ICQ Baidu November Pwn



pwnme

漏洞比较容易发现,首先在account的edit函数中存在格式化字符串漏洞

在account的edit函数中溢出整形溢出
这是由于在输入的password_length可以超过256,回卷从而满足限定条件password_length && password_length <= 20u ,在之后的memcpy拷贝处就会发生栈溢出

漏洞利用时,首先想到利用printf格式化字符串泄露两个libc的地址,然后根据这两个个地址利用libcdb或者libcserach来找到libc的版本,然而失败了,服务器用的比较奇葩的libc version,查不到

之后,想通过DynELF来泄露得到system的地址,这样就能够直接ret2libc拿到Shell了
可以DynELF在本地成功,但是在远程利用的时候,DynELF总是莫名挂掉……..
最后,只能通过ret2syscall来Getshell了
思路如下:

  1. 利用printf格式化字符串泄露read地址,从而确定偏移,计算syscall地址
  2. 利用Ropgadgets做ROP,构造eax=0x3b,edi=”/bin/sh”,esi=NULL,ecx=NULL
  3. 最后call到syscall地址,Getshell

3.7z

比较容易的题目,题目是一个HTTP的登陆程序

我们输入HTTP报文,其中函数USER-Agent:之后的内容通过judge函数判断,即可执行“token”下的命令
而judge函数是一个很简单的亦或加密,存在弱密钥,也就是一个直接得到shellbackdoor。

当然还存在格式化字符等漏洞,我们直接利用弱密钥,将构造好的HTTP报文加上我们想要想要执行的命令注入即可。

loading

题目是PCTF的一道原题pctf 2016 fixedpoint
主要是通过float运算构造相应的shellcode

函数mmap了一块rxw的空间,通过scanf()/2333.0的值写该空间,最后return去执行

题目的关键在于*((float *)v6 + i) = (long double)v4 / 2333.0写入的值是float类型
float 满足IEEE754标准,并不能够很精确的控制最低有效位lsb,这样就需要一定的技巧来构造shellcode
具体的内容可见wp:
pctf 2016 fixedpoint writeup

发表评论