攻防世界高手区刷题(更新ing)

攻防世界高手区

  • forgot
  • pwn100
  • pwn200

forgot

打开题目checksec一下
攻防世界高手区刷题(更新ing)_第1张图片
是32位文件就放到32位的ida中反编译一下,看到经过一系列对v2数组的判断和v14的赋值,最后返回图中这一串指向的地址中的内容
在这里插入图片描述
刚好又发现了cat flag的字符串和system,所以这道题应该就是要覆盖掉这个地址,是它指向cat flag和system这个地址
在这里插入图片描述
攻防世界高手区刷题(更新ing)_第2张图片
再运行一下文件看看
攻防世界高手区刷题(更新ing)_第3张图片
发现有两个地方是可以输入的,看回到ida找到这两个地方很有可能就存在栈溢出漏洞,然后发现第一处的输入限制了输入32,并不能实现溢出,但是在第二输入时是没有限制长度的,所以这里就是栈溢出的点
在这里插入图片描述
在这里插入图片描述
v3和v2的距离也可以得到
在这里插入图片描述
现在就可以开始写payload的啦
payload1.0版本
攻防世界高手区刷题(更新ing)_第4张图片
运行了一下发现成功连接上了,但是flag并没有输出???所以又返回ida看看是什么原因,发现是因为前面本来以为没什么用的循环一直退出不了,所以才不能执行最后一步。这个循环是当v14=10的时候就会退出的,最开始给v14的初始值就是10,所以在循环中就不能让它有机会更改v14的值。查看各判断条件,
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述当输入给v2数组的溢出字符不满足这其中条件就不会更改v14的值,所以这里我选择了‘/’
payload2.0版
攻防世界高手区刷题(更新ing)_第5张图片
成功拿到flag
攻防世界高手区刷题(更新ing)_第6张图片

pwn100

checksec:
攻防世界高手区刷题(更新ing)_第7张图片
放进64位ida中反编译,看到有read函数和puts函数,但是没有\bin\sh和system
攻防世界高手区刷题(更新ing)_第8张图片
攻防世界高手区刷题(更新ing)_第9张图片
可以利用read函数进行栈溢出,可以看到可读入200个字符远大于0x40,从而可以泄露read的got表中的内容,把read的地址用puts函数打印出来,再把puts的返回地址设为main函数以此来再次利用栈溢出写入\bin\sh和system,因为是64位程序所以要先利用寄存器来传参,这里puts只有一个参数所以使用rdi就可以了
rdi的地址貌似一般都是在如图中pop的寄存器后而在retn前(貌似做过的题都是,还没找出什么原理,待挖掘…),但是也可以用命令行找一下edi的地址
攻防世界高手区刷题(更新ing)_第10张图片
攻防世界高手区刷题(更新ing)_第11张图片
得到rdi的地址为0x400763,然后就可以开始写payload的了,这里libc库的查找和system,/bin/sh的地址用wiki中推荐的LibcSea工具来辅助查找,这里贴上该工具的使用模板
攻防世界高手区刷题(更新ing)_第12张图片
攻防世界高手区刷题(更新ing)_第13张图片

pwn200

checkse一下
攻防世界高手区刷题(更新ing)_第14张图片
放进32位ida中反汇编,无system和\bin\sh,但发现write函数和read函数,其中read函数明显可以看到存在栈溢出,可以利用write来写入system和\bin\sh。
在这里插入图片描述攻防世界高手区刷题(更新ing)_第15张图片
由于动态绑定机制,所以我们需要两次调用函数,第二次调用时write函数就是绑定的got表的真实地址,可以进行写入,实现则利用read函数的栈溢出漏洞,修改返回地址为main函数地址,下面开始构造payload,system和\bin\sh的地址同样利用LibcSearcher来查找
攻防世界高手区刷题(更新ing)_第16张图片
攻防世界高手区刷题(更新ing)_第17张图片

你可能感兴趣的:(网安实验室)