本周是第六周了,继续佛系刷题,上周的红帽杯 pwn 题就 3 道,但是我第一道就不会,最后还是通过各种姿势了解到了怎么搞,神他妈爆破 pwn
1 | from pwn import* |
说实话,我看这题一开始是一点思路没有,下面说一下我当时的心路历程
- 因为只能控制 3 个字节,就一直想着怎么跳转,但是 mmap 区域有点问题,而且短跳转没什么可以利用的,最多能跳到 vsdo 里边,走不通
- 然后就想着怎么通过 3 个字节比如 push 寄存器后 ret 的操作来整,发现也行不通,没什么可以利用的值
最后才注意到函数流程,原来判断还是有用的,其实还是想的太粗糙,就想 get shell ,其实 get flag 即可~~~~
1 | v7 = v6(1); |
其实回过头来看基本上就是告诉你了,就是爆破,奈何我直接忽略了后边的 if 语句~~~ 所以还是得多看题多总结啊,现在就深入总结以下本题逻辑
1 | int sub_8048B5C() |
本题被 stripped 了,不过没事就基本用到了 3 4 个函数还是能分清的,所以直接把分析完的贴出来
1 | int sub_8048B5C() |
关键其实还是read(0, &unk_80F6CC0, v1 - 1);这行,这个把 ecx 放上了 unk_80F6CC0 ,没清理掉,赶紧用上,把我们输进去即 [ecx] 放到 eax 假装当返回值,就是0: 8b 01 mov eax,DWORD PTR [ecx],再加个 ret 回去就完事了~~~ (狗头)
难受了这么简单的题怪我太粗心了~~ 顺便安利一个贼强的网站,能把汇编转为字节码 ,好用~~
第二道加 ollvm 了,不太会,第三个浏览器 pwn ,怎么搞~~~~
hitctf pwn1
1 | from pwn import * |
我这个真是就看见一个洞,结果这个 printf(s2, &v1); 也是一个~~~ 太粗心了丫~~~
hitctf pwn2
1 | from pwn import * |
找这个洞,花了五百万年,终于找到了,前后 5 个小时吧,服了,这题学了很多,明天写题解发先知!!
ddctf pwn
比较简单的,但是溢出不太常规,注意一下偏移直接 one_gadget 必定成功
1 | #encoding:utf-8 |
没题做了,再做一遍今年信息安全 pwn
your_pwn
1 | from pwn import * |
daily
1 | from pwn import * |
深入学习大佬姿势,好骚好骚,第一次接触这种不限制 free 范围的
double
1 | from pwn import * |
一开始没看懂这题