Ctfshow pwn 02(自己做出的第一道pwn题)

算是一篇第一次做出pwn题的日记了!

本文写给想要入门pwn但只安装好虚拟机和ida完全不知道怎么用的小白~

有许多写的不严谨或无脑的地方请多包涵!

其中有许多我在做题时踩到的坑(因为自己零基础实在不知道怎么问也不知道去问谁而导致浪费好多时间而进行不下去)

现在开始!

首先第一步,来到ctfshow的网站,找到这道pwn02

之后点击Launch an instance(这所是一个建立连接的步骤,少了这一步在使用python3时会出现如下报错)如果问我什么是python3,请耐心看下去

得到nc pwn.challenge.ctf.show 28053 

(记住它后面会有用!而且这段数据会随着每次Launch而不同!)

然后点击stack,下载本题所需的文件

之后我们来到虚拟机,将这个文件复制粘贴或拖动进虚拟机

(在虚拟机home里可以找到它)

 

 然后我们用Ctrl+Alt+T打开操作页面

这里我们需要进行四步操作

1.输入cd Desktop/,打开主菜单

2.输入file +拖动stack文件到file后(回车运行)

    根据后面的32_bit我们可以知道这是一个32位文件,这将决定我们用ida32还是ida64来打开它

3.checksec +拖动stack文件到checksec后(回车运行)

    这里用来查看它是否开启了一些保护

4.输入sudo +拖动文件到sudo后(回车运行)

在这里不要忘记sudo,不要忘记sudo,不要忘记sudo!

它是你执行文件所需要的权限,否则会出现如下报错

    然后输入123随意运行一下这个程序,得到如下图结果

然后我们返回Windows界面来打开ida(此处的ida即为ida32)

拖动桌面的stack到ida里

然后我们就可以得到一段完全看不懂的代码,什么都不用管,直接F5

(出现了相对简单我们可以看懂的代码)

然后点击pwnme()函数    (可能还是不怎么看得懂)

我们可以看到[ebp-9h]和(s,50,stdin)

意思就是字符串s可以接受9个字节,确输入了50个,也就是之后会学到的栈溢出

(不明白先自己去学一下栈溢出啦)

 

 接着我们回到虚拟机

1.输入cyclic 200 (回车运行)(随机生成200个字符)

2.gdb +拖动stack到gdb之后(回车运行)会弹出红色的gdb_peda$,在后面输入run,运行一下这个程序

3.然后我们就会看到出现了报错(因为我们的字符是随机生成的)

 

我们来观察一下报错内容

发现红色的报错地址所对应的字符位”aaae“

 

 然后我们用cyclic -l aaae(回车运行)出现了13(也可以理解为9+4)

(9为刚才字符串所能容纳的字节,32位程序即+4,64位程序即+8)

13也可以直接在ida中观察得出(9+4)

记住13这个数据!他关系到之后填充字符的个数(至于填充是什么,耐心看!)

 然后我们回到ida,用shift+F12,来到下面的第二个页面

之后双击/bin/sh的那一栏

(bin sh和我们拿到shell(执行权限)有关,对bin sh 请自行了解)

 

然后来到如下页面,点击command 然后Ctrl+x,点击OK

 

然后来到如下页面,点击上面工具栏的Options,勾选Line prefixes (graph),然后OK

 

 

我们可以看到starts at  804850F(记住它!后面也会有用!)

 ​​​​​​​

然后我们在虚拟机中打开python,将下面这段写入后保存

 

这段代码的

p = remote("pwn.challenge.ctf.show",28053)

payload = b'a'*13(python3+b,python则去掉b)

payload += p32(0x804850F)都与上文的数据有关

然后我们打开运行框,输入python3 +拖动你写好的python文件到python3后(回车)

看到红色的$后,输入ls

再输入cat flag,成功得旗! (记得加cat!)

 

最后回到刚才的网站,将旗粘贴进去,Submit,成功!

感谢学习!

大佬勿喷!

来源url
栏目