明天就要比赛了,可是还是什么都不会,自己告诉自己:不急!慢慢来吧,走的踏实就行。
题目: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()则可以输出固定大小的内容
网友评论