代码审计-PHP专题&原生开发&SQL注入&1day分析构造&正则搜索&语句执行监控&功能定位

发布于:2025-09-15 ⋅ 阅读:(20) ⋅ 点赞:(0)

挖掘技巧:

-语句监控-数据库SQL监控排查可利用语句定向分析

-功能追踪-功能点文件SQL执行代码函数调用链追踪

-正则搜索-(update|select|insert|delete|).*?where.*=

如何快速的在多个文件代码里面找脆弱:

1、看文件路径

2、看代码里面的变量(可控)

3、看变量前后的过滤

1、Bluecms-CNVD-1Day-常规注入审计分析

审计流程:(update|select|insert|delete|).*?where.*=\

正则-ad_js.php->getone()->无过滤->有输出payload注入

Poc:

ad_js.php?ad_id=1 union select 1,2,3,4,5,6,database()

这里我们先创建一个账号

这里想挖sql注入的代码审计漏洞,可以使用正则表达式搜索

只有存在可控变量才有机会挖到漏洞,这里跟踪一下这个$ad_id变量

这里我们跟踪一下调用的函数getone

跟踪过去这里是一个接收sql语句的函数,然后这里有一个query的执行

并且这里也适合挖sql注入,因为这里面有回显

果然这里是一个执行sql语句的方法

这里其实很明显的就是sql注入了

为什么payload是ad_js.php?ad_id=1 union select 1,2,3,4,5,6,database()

因为我们在ad_js.php中找到的漏洞点,然后config.php文件中有一个$pre = "blue";这段代码的含义就是我们搜索的数据库前面都带有blue_的前缀,然后这个数据库中一共是7列,或者盲测也可以测试出来是7列,再加上常规sql注入即可

拓展:这里sql注入一般会带有xss漏洞,由于这里没有过滤,那可以尝试xss漏洞

<script>alert(1)</script>

payload:

http://127.0.0.1:83/uploads/ad_js.php?ad_id=1<script>alert(1)</script>

2、emlog-CNVD-1Day-常规注入审计分析

https://www.cnvd.org.cn/flaw/show/CNVD-2018-26200

审计流程:

comment.php->delCommentByIp($ip)->无过滤->构造触发

Poc:

/admin/comment.php?action=delbyip&ip=127.0.0.1%27and(extractvalue(1,concat(0x7e,(select%20user()),0x7e)))%20--+&token=11f3f9cb7e78e3f88e39ea5678939b7d

这里我们翻找了一下,因为这里可控变量太多,并且没有什么具体的sql语句,所以我们查看一下调用的方法、函数等,这里找到一个delComment

这里是关键点,我们传入的ip然后调用的是下面的del方法,我们追踪一下这个del方法

这里就出现了,上面是$ip,也就是我们要传入的值,然后下面一个sql语句,接收我们的值,这里看起来是可控的,因此可能存在漏洞

这里能找到action这个变量的来源,GET传参的一个action

这里执行sql语句并没有回显,所以尝试报错或者延迟注入

这里我们注入会提示权限不足,token error,这里就需要配置上token

这里有报权限不足,那我们追踪一下checkToken这个函数,看一下

这里有一个genToken(),我们想获得token,追踪一下

就在他上面一行的方法,这里面的token值是再cookie里面的,所以后面我们加上一个cookie里面的token

我们加上token再看一下

3、emlog-CNVD-1Day-2次注入审计分析

https://www.cnvd.org.cn/flaw/show/CNVD-2023-65138

https://github.com/fupinglee/MySQLMonitor

https://github.com/cw1997/MySQL-Monitor

审计流程:

数据库监控->user.php无可控->nickname->添加不可控->data.php可控->导出修改导入->触发二次注入

/admin/data.php

导入文件时执行SQL文件中语句,带入Payload

INSERT INTO emlog_user VALUES('110','','$P$BnTaZnToynOoAVP6T/MiTsZc9ZAQNg.',(select version()),'writer','n','','123@qq.com ','','','0','1687261845','1687261845');

/admin/user.php

select查询nickname条件数据,访问触发二次注入

数据库监控

这样自动检查到我们搭建的靶场和数据库之间的交互来找sql注入

这里我们能找到这样一条命令,一条插入,这里插入7个值,所以我们后面二次注入也要构造7个值

就是我们把sql攻击语句写入数据库中查询再次执行

追踪一下这个new User_Model();

这里就是为什么我们打开用户页面会出现的数据,这里就查询数据库里的值,然后显示到页面中

这里我们更改nickname的原因就是$condition随之改动,sql语句也随之改动。

$res = $this->db->query("SELECT * FROM " . DB_PREFIX . "user where 1=1 $condition order by uid desc $limit");
这就是我们页面能获取到数据的sql语句,查询后显示到页面上,那我们改动这个sql语句就会造成注入

因此我们访问用户页面会执行条sql语法,我们用利用的就是这条语句

问题就在这里,我们可以导出数据库文件然后再插入sql攻击语法然后再导入备份

在这里我们插入sql语句

这里就将nickname写成一个查询语句。

查询成功