攻防世界 hello_pwn

刚学pwn的小白,大家互相学习,看看哪里说得不对打在评论区!

这道题先把附件拿kali file一下,是64位的elf文件(相当于Windows exe)

直接执行一下,这里看别人的wp是可以通过输入构造字符串来getshell的,我这里就不这么做了,多练写脚本的能力

国际惯例checksec一下,64位小端序,未开启栈溢出保护和地址随机化,很明显这道题利用栈溢出了

拖入ida,shift+F12查看字符串,这里看到解题关键cat flag.txt指令,双击进去

点击command后按X再ok追踪到相关函数

offset command把后面当做命令指令

伪代码如下

双击主函数分析代码, read(0, &unk_601068, 0x10uLL)解读:第一个0是文件描述符,0代表标准输入(stdin),即程序从键盘或管道接收输入的地方。   然后从指针&unk_601068指定的缓冲区里面读取最多16位数据(0x10uLL解读:0x代表十六进制,uLL=unsigned long long,无符号long long 型,10转为十进制即为16)

双击&unk_601068查看一下指向的存储空间,可以从偏移地址或四个db(dword byte)存储四个字节

连续地址接下来就是dword_60106C,通过刚才主函数分析,使这块存储的数据为1853186401即可调用函数执行命令得到flag

写脚本,下面两个略微差别

payload = b'a'*4 + p64(1853186401)payload = 'a'*4 + p64(1853186401).decode("iso-8859-1")区别在于前者是全部以byte字节序列传输,后者不用b以及通过decode("iso-8859-1")转化为str进行传输

p.recvuntil("bof"):读取数据直到返回bof,bof代表缓冲区溢出发生,即我们攻击成功了

不懂脚本语句的可以看这篇文章pwntools常用脚本语句介绍讲解_recvuntil-CSDN博客

然后用Python跑一下拿到flag

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值