题11:Backdoor,tips:敏感文件泄漏!
解题:题目给出了提示“敏感文件泄漏”,于是用dirb扫一下:
存在git文件,用git_extract导出文件:
导出的文件如下:
查看几个文件内容,发现falg.php.bd049e文件提示flag在文件b4ckdo0r.php中:
访问b4ckdo0r.php,确实存在且提示查看该 文件源码:
考虑是否存在.b4ckdo0r.php.swp等文件,尝试后发现存在.b4ckdo0r.php.swo,把它下载下来。
稍解释一下,为什么会存在.b4ckdo0r.php.swp,.b4ckdo0r.php.swo等文件?在linux系统,当我们用vi编辑文件如b4ckdo0r.php时,就会自动生成 .b4ckdo0r.php.swp,此时如有另一用户也用vi打开这一文件就会生成 .b4ckdo0r.php.swo,以此类推可能生成 .b4ckdo0r.php.swn,.b4ckdo0r.php.swm等等文件,如果文件编辑后正常关闭,这些临时生成的文件也会被自动移除,否则就会保存下来。
接下来还原下载下来的文件,vi -r b4ckdo0r.php.swo :
回车,打开的文件显示b4ckdo0r.php原码:
代码是混淆的,通过create_function将$L的内容创建为函数,稍改动输出$L:
运行,用burpsuit测试得
复制出来并稍做整理:
接下来就是代码审计。在下载下来的代码加入一些打印语句,帮助快速理清逻辑并找出漏洞构造payload:
需要在http头加入Accept-Language和Referer,构造Accept-Language: zh-CN,zh;q=0.1,则Referer的值最少要两个参数,且第二个参数格式为"675"+payload+"a3e",因为程序中使用了eval,所以可以考虑使用system函数执行系统操作,但构造的载荷会经过base64_decode,异或,gzuncompress的处理,所以可以把要执行的操作经过逆处理即gzcompress,异或,base64_encode:
先查看一下目录文件,system("ls")处理后得到“TPocyB4WLfrhNv1PZOrQMTREimJn”,把这字符串加下前缀“675”,后缀“a3e”,做为Referer的第二个参数:
把得到的字符串“TPp8VHv2Kv4DTuVN+hCEff8ve2EBCpdlZk33ypDEwMumBIr0uCrKpbiq1Z5+6xyPHma96ydT”,因为这字符串是经过gzcompress,异或,base64_encode处理,所以可以进行base64_decode,异或,gzuncompress解密:
得到该文件列表,其中有this_i5_flag.php,查看该文件 system("cat this_i5_flag.php"):
处理后得到“TPocyB4WLfrhNn0oHmlM/vxKuakGtSv8fSrgTfoQNOWAYDfeUDKW”,把这字符串加下前缀“675”,后缀“a3e”,做为Referer的第二个参数再次请求:
将“TPqE1x3wTNfRNH6te3Qzh2E2MLfnroKRHU8h77uC4l69AI1A1C5NjSLPviCIHgK+0s+hcHS+YrEi092wjmSSQWhmaa0jGw==”解密:
得到this_i5_flag.php的内容包含了flag。