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

挖掘技巧:

-语句监控-数据库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','','PBnTaZnToynOoAVP6T/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写成一个查询语句。

查询成功

相关推荐
paid槮4 小时前
MySql基础:数据类型
android·mysql·adb
用户2018792831675 小时前
AMS和app通信的小秘密
android
用户2018792831675 小时前
ThreadPoolExecutor之市场雇工的故事
android
诺诺Okami5 小时前
Android Framework-Launcher-InvariantDeviceProfile
android
Antonio9156 小时前
【音视频】Android NDK 与.so库适配
android·音视频
sun00770015 小时前
android ndk编译valgrind
android
AI视觉网奇16 小时前
android studio 断点无效
android·ide·android studio
jiaxi的天空16 小时前
android studio gradle 访问不了
android·ide·android studio
No Silver Bullet17 小时前
android组包时会把从maven私服获取的包下载到本地吗
android