记一次PHP代码审计拿下CNVD

本篇文章作者幽壑,本文属i春秋原创奖励计划,未经许可禁止转载。
https://bbs.ichunqiu.com/thread-63544-1-1.html

记一次PHP路由审计

工具:Seay源代码审计系统

0x1 反射型xss

首先进行一个自动化扫描,根据结果进行跟进排查
image

跟进/user/tpl/_user_import.php文件
image

可以看到直接输出了多个参数echo $useripcw,echo $cfusername,echo $cfuserip,echo $cfusermac,没什么过滤
我们这里直接传入一个xss语句触发xss
image

0x2 SQL注入漏洞

image

跟进/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"

image

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目录

image

上传post.php文件
访问上传的shell文件
image

0x4 前台RCE

在进行阅读代码时发现一个疑似后门的文件

if(isset($_POST['previewtxt']))
{
$index = $_POST['previewtxt'];
$index = str_replace("&lt;","<",$index);
$index = str_replace("&gt;",">",$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
文件
尝试写入一句话木马
image

访问小马验证执行
image

关于CNVD要求
1、为中危及以上,评分大于4.0
2、注册资产大于5000万
3、并且测试案例要大于10,并且写出至少3例完整复现过程


image
image

posted @ 2023-09-05 20:32  LinkPoc  阅读(63)  评论(0编辑  收藏  举报