2018-04-27PWN第一谈

明天就要比赛了,可是还是什么都不会,自己告诉自己:不急!慢慢来吧,走的踏实就行。

题目:ctf-wiki的retlibc

题目背景:NX enable;ASLR 开启;

        感觉这种方法主要针对于开启了ASLR的program,但还是应该清楚地原则是:这里的地址随机化只是虚拟页号的随机化,因此对于share object的libc而言,低12位是永恒不变的(这里的虚拟页大小为4k)

思路:

        -- 通过system('/bin/sh')拿shell必要条件:system()地址,'bin/sh'字符串地址

        -- 地址被随机化,但一旦被装载地址就被确定,采取leak libc中函数地址

        -- 根据已泄露的地址和libc中函数地址的固定偏移来计算得出system,'bin/sh'的地址

        -- 通过栈溢出来两次构造payload (第一次leak,第二次get shell)

注意:

        1. 这里第一次构造的payload返回地址要改成main addr才能使第二次生效

        2. 关于LibcSearcher的使用(这个好像用的libc database都是ubuntu的)

        3. leak常用函数puts(),write(),puts有\00截断问题,write()则可以输出固定大小的内容

EXP:

你可能感兴趣的:(2018-04-27PWN第一谈)