通过这道题的学习与收获有:(说实话,我把这玩意拖到IDA里的一刻,我是想直接把它扔进回收站的,不过最终还是硬着头皮做下来了,收获也真的很多)

1、这道题的漏洞点是数组下标的不检查,导致char类型可能自身变成负数,使得我们可以输入不正常数据来通过对flag的检查。

2、使用单字节爆破的手段,获取flag,这道题对于flag的检查是判断整体的,但之所以可以进行单字节爆破是因为我们是先通过了flag的检查,然后依次改变一字节,来观察回显,我们的flag是否正确,从而进行单字节的爆破。并且还有一个前提是不限次数的输入内容(只要内容是100字节,就可以与flag进行比较判断)

3、当时关于本机的flag和远程的flag这里迷了好久,我一直以为本机的是假flag,然后远程是通过某种加密手段放的是真flag(意思就是说本机flag和远程flag我感觉应该是有关系的),最后看了下前面的英文提示,又想了很久最后发现,这俩flag之间并没有任何关系…

4、我们始终都没法直接控制value_1和value_2的值,我们仅仅只能去控制bin_by_hex数组的索引,而我们爆破的其实是bin_by_hex数组的下标,而真正的flag是通过这个下标去数组bin_by_hex里面找到真正flag的所对应的字符。之所以给我们一种爆破flag的错觉其实是因为爆破的bin_by_hex数组下标正好又是对应字符的ascii(比如我爆破b的时候,分别发了6和2,这个0x62其实是bin_by_hex的下标,但是这个下标放的又正好是b)因此就感觉我们在爆破flag一样。关于这个bin_by_hex数组与它的下标这里,我迷了很久。

5、这道题最后的爆破脚本我感觉还是需要一些python功底才能写出来的(我是看了下师傅们的 exp才写出来的)

6、这道题最恶心的地方就是调试很麻烦(其实我压根就不会…),而且对于这道题调试而言的话,也不知道调试该看什么,又是要连接的,又是fork的,确实不会调…

7、熟悉了一下常见网络编程函数的功能,用IDA简单对他们进行了流程的分析。

阅读全文 »

通过这道题的学习与收获有:

1、strlen函数是可以被00给截断的,而shellcode本身执行的时候并不会因为00截断。

2、第一次手写open,read,write函数的汇编

3、push一个字符串的话,比如push 0x67616c66 (这个是flag),不足八字节,push的时候会自动填充00补全八字节,从而占满一个内存单元。

阅读全文 »

通过这道题的学习与收获有:

1、close 关闭了标准输出时,可以用格式化字符串漏洞来将stdout指向的内容修改成IO_2_1_stderr,让程序重新有回显,关于这个过程我画了张图方便自己理解。

2、已经拿到libc基地址的时候,我们所需要的gadget就可以直接去libc中拿,libc里啥都有,libc里啥都有,libc里啥都有,重要的事情说三遍!

3、写爆破脚本时,感觉会报错的地方,用try和except预判一手,让程序得以继续重新运行,而不是原地崩溃。

4、如果close(1)关闭了标准输出,那么格式化字符串漏洞的写入数据最多只能写入0x2000字节,程序如果执行了setvbuf,stdout会出现在bss段,反之则会在libc库中。

阅读全文 »

通过这道题的学习与收获有:

1、分析这种漏洞比较明显的题目,应该倒推程序逻辑,而且程序最后给出了system(command),而command又是个地址(指向我们所输入的内容),此时应该很容易想到,我们输入/bin/sh就可以执行。但是我开始没有想到这一点… 还是做的少。

2、考察了linux下命令行多命令执行的特定。如果命令被;分开,即使前面的命令执行错误也依旧会执行后面的命令。

3、u32可以一次转四个字符为对应ASCII码,返回值为int类型。

4、当格式化字符为%d时,我们想存入字符串,应该输入对应其ASCII。

5、这道题又是地址又是*地址的,开始容易搞迷糊,应该仔细捋一下。

阅读全文 »

第一次打国外的比赛,由于好几道pwn题出的非常萌新,所以做起来比较舒服(我做出来了三道shellcode闯关和两道无保护的栈题)。其中有两道题的代码是一样的,一个是32位的,一个是64位的。整体利用思路一样,我就详细说一下32位的,64位的这个题同理。

阅读全文 »

一共五个 PWN ,有两个零解,还有一个很少解的题目,本人菜鸡选手做不出来,估计后面复现也够呛,就记录一下比赛做出来的两个常规 PWN

阅读全文 »

这次比赛由于本人较菜,只做出了一道格式化字符串的那道题(比赛24个小时,这道题我打了18个小时,是真菜),在知道roderick师傅三小时做了四道题之后,就感觉自己更菜了 o(╥﹏╥)o 然后由于堆题的libc版本都很高,所以暂时先没打算复现(主要菜狗才刚把低版本libc的堆基础漏洞学完)

阅读全文 »

通过本题的学习明白了,高版本中 fastbin 做出 double free 是如何打 tcache poisoning 的过程。并且了解到了一条新的 IO 链,目前感觉是最好用的一条,可以通杀 2.36 及以下的 libc 版本 具体请见 文章

阅读全文 »

第一次打强网杯,加上强网先锋中的devnull这道题,一共放了18道pwn题。强pwn杯了属于是。不过自己还是太菜了18道pwn,就会做一道。主要也确实是没有学到后面的部分,目前的水平也只够做devnull这道题的,相信明年的时候会做出来更多的pwn题。然后这里我详细写一下devnull这道题的write up。

这道题应该是必须要一个2.34的libc,而且用glibc-all-in-one里的libc patch上去还有点问题。所以我选择了直接把文件拉到docker里做。

如果你想简单学习一下docker,可以看一下我写的这篇文章

阅读全文 »