buu-pwn
人生第一道pwn题
buu-pwn
rip
栈溢出
今天听了星盟的pwn课 感觉这题应该有戏
gets
可以来制造栈溢出
然后点击去 参数s
可以看到
我们可以看得到 我们要搞到 return 的话 要填 F + 8 个位置才行
然后看一下后门函数的地址
可以看到后门函数 fun
的地址为 0x401186
然后我们可以来编写脚本了
出了点小状况 emmm 估计要decode 一下
emm 问题是真的多 555
首先是 byte 的问题
然后来看一下?bash貌似出来了 咋一下就没了 emmm
pwntools-tutorial/bytes.md at master · Gallopsled/pwntools-tutorial · GitHub
找到了解决方法
但是没有打通 ,,,
1 | from pwn import * |
看了网上的教学 呃呃呃
好像说是 ubuntu 回合以前的不一样 所以 以后要备用几个docker?
找到了两种解决方法
至于最后为什么要+1,我们可以发现,不加一我们在本地可以打通,但是却打不通远程,这也是我开头说的,和以前payload不一样的地方,原理我们是没有错的,这里+1是为了堆栈平衡
老版本的这道题是32位的,而现在是64位的,参数小于6个不会用到栈来传参。而gets()只有一个参数,所以传递参数只需用到rdi(这你可以看ida的汇编代码,call下面有个mov rdi,rax),这道题的s应该是一个局部变量,23个刚刚覆盖了rbp,然后那两个地址紧接着往下排,0x401198是 “retn” 保证程序能正常返回,然后0x401186在Main函数栈顶。又因为retn相当于pop + 执行,故形成了返回地址劫持~~
emmm
最后payload
1 | from pwn import * |
反而是 recvuntil
没用对 最后还是打出来了
warmup_csaw_2016
Ubuntu 16
checksec 一下
1 | Arch: amd64-64-little |
拖到IDA反编译一下 看到一个函数
看一下函数的地址
函数地址为 0x40060D
看看有没有办法跳转到这里 由于是ubuntu16 应该不存在昨天堆栈平衡的问题了
看一下 main 函数 可以发现有个 gets 函数 是不是有问题?
貌似这个 write 也有问题 用这个 s
貌似可以导致栈溢出?
看了一下栈的结构
他这个 s 下面 有一个
这个 var_40 是 gets 里的 v5
so 直接用 v5 行不行?
1 | from pwn import * |
试了下 好像不行 emmm
我是sb 那是16进制
1 | payload = b'a'*72 +p64(backdoor) |
emmm
ciscn_2019_n_1
我们只要让 v2 == 11.28125 即可
我们可以得到v1
用v1溢出来污染v2
1 |
|
网上抄了一段代码
跑出来的是
1 | 0x 0,0x80,0x34,0x41 |
写payload
1 | from pwn import * |
pwn1_sctf_2016
希望这题不是栈溢出 o.o
有个vuln函数
有个 strcpy
估计又是栈溢出 o.o
怎么搞
找到后门函数
地址 0x8048f0d
然后想办法溢出
想要溢出 需要 0x3c
个字母 但我们只能输入 32 个字
但是 我们可以把 I
变成 You
payload
1 | from pwn import * |