1、什么是shellcode

这里我谈谈自己的理解,shellcode 就是一段可执行的机器码,如果可以让 CPUshellcode 首字节开始往下执行,那么 shellcode 执行完毕就会达到编写者想要的目的(shellcode 不一定非要是获取 shell 的机器码),至少初学者先这么理解应该是没什么问题的。

阅读全文 »

1、什么是栈迁移

这里我谈谈自己的理解,简单一句话:栈迁移就是换个地方控制程序的执行流(这个换的地方既可以是bss段也可以是栈里面,又或者是堆里面)。

阅读全文 »

写在前面

现在BUU第六页快做完了,发现现在有的题目在做的时候确实没想出来,不过看了一眼其他师傅的wp就很快写出来了,如果针对这类题目再去单独写一份wp又没太多必要。所以在之后的做完的题目里,没有必要单独写一篇wp的题目以及直接做出来的题目就都放到这篇文章来简单记录一下了。

阅读全文 »

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

1、bss段的格式化字符串,需要找一条栈链,需要用栈地址->栈地址->栈地址->值,用第二个栈地址来控制第三个栈地址,将第三个栈地址当做跳板,最终去通过跳板的不断移动,去不断写入一或两字节的数据。
这里稍稍总结两句。
利用格式化字符漏洞来达到写的目的,分为两种情况。
如果输入直接是在栈中,那就可以去利用距栈顶偏移加我们构造地址,去达到任意地址任意写的目的。
如果输入是在bss段,那么要利用栈链,来进行任意地址任意写。

2、这道题的思路是一边利用格式化字符串漏洞去不断执行printf和read,一边在栈里写入bss段地址,为之后的栈迁移做打算。最后将布置好的rop链发送过去,让执行流迁移到rop链上,利用magic gadget来获取shell。

3、又收集到了一个新的magic gadget。adc DWORD PTR [rbp+0x48],edx 机器码搜11554889

4、第一次遇见格式化字符函数自己修改自己的返回地址去执行自己… 另外就是格式化字符并不需要对齐,格式化字符后面的地址才需要对齐。

5、多注意栈里的数据,是否有特殊的存在。没思路的时候,就调试一下看看能不能找到有用的信息。

阅读全文 »

题确实不难,但确实比赛没写出来,可惜差了一点,要是再给半个小时或者一个小时应该就出了,最后卡在一个奇奇怪怪的点(就是 global_max_fast 为了避免写进去 0xdeadbeef 有点大,就用了 global_max_fast - 1 这个地址写入的,结果不知道为啥后面 free 掉堆块后,里面的数据直接没了)浪费了很多时间

阅读全文 »

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

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

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

阅读全文 »

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

阅读全文 »

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

阅读全文 »

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

阅读全文 »