天天看点

BugkuCTF pwn题第一弹PWN1PWN2总结:

PWN1

BugkuCTF pwn题第一弹PWN1PWN2总结:

这题没什么好说的,直接nc连接,然后ls获取文件目录,然后猫flag就可以得到flag了。

需要注意的是因为这题是新手入坑题,所以直接把flag放在flag文件下,一般情况下不排除其他文件有flag。

槽一句,虽然这题简单到不行,但是我也是看了别人的博客之后才发现自己有多无知,这么基础的东西都不会。

BugkuCTF pwn题第一弹PWN1PWN2总结:

PWN2

BugkuCTF pwn题第一弹PWN1PWN2总结:

这道题是有给文件的,那么我们先把文件下载下来分别保存到Ubuntu和主机。

首先我们尝试一下故技重施,nc一下看看会怎么样。

BugkuCTF pwn题第一弹PWN1PWN2总结:

发现被这个程序嘲讽了,显然这题不是那么简单可以做的。这个时候我们就要用上我们下载好的工具了。

首先在Linux终端上checksec一下这个程序。

BugkuCTF pwn题第一弹PWN1PWN2总结:

发现这个程序是64位的,那么我们将它拖入对应的ida中,然后找到main函数按下F5打开新世界。

BugkuCTF pwn题第一弹PWN1PWN2总结:

通过观察这个程序的逻辑我们发现s这个变量申请了0x30个字节,但是下面read函数读取了s这个变量0x100个字节,所以这玩意是妥妥的栈溢出。

BugkuCTF pwn题第一弹PWN1PWN2总结:

然后很巧的我们又发现了就在main函数下面有一个get_shell_函数,那我们肯定控制不住自己的手双击下去发现这个函数的地址是0x400751,先把这个地址记下来。

BugkuCTF pwn题第一弹PWN1PWN2总结:

下面就是在gdb中打开pwn2,然后创建随机字符,并运行。

BugkuCTF pwn题第一弹PWN1PWN2总结:

发现RBP段的字符被填充为bAA1AAGA,再利用这个字符计算出偏移量。

BugkuCTF pwn题第一弹PWN1PWN2总结:
BugkuCTF pwn题第一弹PWN1PWN2总结:

然后根据偏移量写出脚本就可以了,下面是我仿照其他大佬写的脚本。

from pwn import *

sh = remote("114.116.54.89", 10003)

print sh.recv()
payload="A" * 0x38 + p64(0x400751)
sh.sendline(payload)
sh.interactive()
           

总结:

pwn2的思路就是想办法计算出get_shell_的地址偏移量,算出来之后就直接溢出到后门函数就行了。

对于个人来说,还需要加强对于堆栈的理解,还有编写脚本的相关知识。目前还是缺少做题经验,即使是对于这类简单问题依然没有思路,就是题目做得少的缘故,总结一下就是我还是萌新。

这是我的第一篇自己真正想写并写出来的博客,之前一直都有想要培养自己写博客的习惯,但是都是因为没有好好学习总结所以一直不知道要写什么。那么就以这篇博客作为我的秃头之路的里程碑吧!

继续阅读