CTF比赛PWN题解题思路(一)

WriteUp 4周前 admin
17 0 0

题目一

运行程序如下,输入1,提示no username

CTF比赛PWN题解题思路(一)

用IDA对程序进行逆向,需要输入admin才能继续

CTF比赛PWN题解题思路(一)

程序漏洞点是在输入用户名的地方存在栈溢出

CTF比赛PWN题解题思路(一)

方法一

使用gdb进行调试,在main函数处设置断点

CTF比赛PWN题解题思路(一)

单步调试(ni)到func函数处,进行步入(si)

CTF比赛PWN题解题思路(一)

单步调试到名字输入的位置

CTF比赛PWN题解题思路(一)

输入足够长度的字符串

CTF比赛PWN题解题思路(一)

CTF比赛PWN题解题思路(一)

计算引起溢出的字符串长度,有两种方法,第一种包括admin所以长度为56

CTF比赛PWN题解题思路(一)

CTF比赛PWN题解题思路(一)

将返回地址覆盖成程序中我们想让其返回的地址,这里我们通过IDA查找危险函数

CTF比赛PWN题解题思路(一)

这里有危险的shell函数,地址为0x405D36, 因为小端存储,因此我们需要写入365D40,字符串为6]@

CTF比赛PWN题解题思路(一)

最终payload为admin+51个字符+6]@,成功获得shell

CTF比赛PWN题解题思路(一)

方法二

CTF比赛PWN题解题思路(一)

根据变量长度计算空间大小,再加上8比特,编写脚本

CTF比赛PWN题解题思路(一)

CTF比赛PWN题解题思路(一)

题目二

首先查看伪代码,栈空间建议使用gdb进行调试,伪代码查看可能不准确

CTF比赛PWN题解题思路(一)

程序最终的判断是v7和v5相等即可得到shell,v7是程序里的,v5是我们的输入,然后这里data可以输入0xc0个字节,这里可以覆盖v7的地址空间。

因此本题的解题思路是输入data,覆盖掉v7,然后输入已知的数据,获得shell。

CTF比赛PWN题解题思路(一)

编写脚本获得shell

CTF比赛PWN题解题思路(一)

CTF比赛PWN题解题思路(一)

题目三

查看伪代码 gets处存在栈溢出,必须首先输入设定的字符串

CTF比赛PWN题解题思路(一)

但是溢出后的返回地址,程序里面并没有明显的shell,但是有bin/sh字符串和system函数可以利用

CTF比赛PWN题解题思路(一)

获取RDI地址

CTF比赛PWN题解题思路(一)

编写脚本获得shell

CTF比赛PWN题解题思路(一)

题目四

类似于题目三,不同点在于没有/bin/sh字符,需要使用gets函数写入

使用gdb调试,vmmap命令获得可写的地址空间

CTF比赛PWN题解题思路(一)

编写脚本写入/bin/sh

CTF比赛PWN题解题思路(一)

获得shell

CTF比赛PWN题解题思路(一)

原文始发于微信公众号(小话安全):CTF比赛PWN题解题思路(一)

版权声明:admin 发表于 2024年8月22日 下午7:16。
转载请注明:CTF比赛PWN题解题思路(一) | CTF导航

相关文章