bWAPP之xpath注入

目录

一. XML/XPath Injection (Login Form)

1. 源码分析

2. 构造绕过


一. XML/XPath Injection (Login Form)

bWAPP之xpath注入如下,这里让我们登录

用户名那输入一个单引号发现报出了xmli的解析错误,可知是利用了xml/xpath解析的用户登录信息。

这里我们先不着急登录,先看下源代码来学习下这个漏洞

1. 源码分析

关键代码如下:

1. 程序接收了前台传进来的用户名和密码,未做任何过滤

2. 接着加载了本地的一个xml的文件

3. 用xpath语言从加载的xml文件中进行查找用户名和密码,如果查找到了,则进行登录

-》经过一分析我们就知道了漏洞所在点了,程序在接收数据进行xpath查询的时候没有进行过滤,针对本关这一点,我们可以构造绕过直接进行登录

if(isset($_REQUEST["login"]) & isset($_REQUEST["password"]))
{

    $login = $_REQUEST["login"]; 
    $login = xmli($login);    //接收登录的用户名

    $password = $_REQUEST["password"];
    $password = xmli($password);  //接收登录的密码

    // Loads the XML file
    $xml = simplexml_load_file("passwords/heroes.xml"); //加载xml数据

    // XPath search
    $result = $xml->xpath("/heroes/hero[login='" . $login . "' and password='" . $password . "']");   //用xpath查询内容
    if($result)
    {
    ...
    }
}

2. 构造绕过

在不知道用户名和密码的情况下直接绕过登录。先把查询代码拿出来,

$result = $xml->xpath("/heroes/hero[login='" . $login . "' and password='" . $password . "']");

实际上就是这样

$result = $xml->xpath("/heroes/hero[login='用户名' and password=' 密码']");

构造用户名如下,密码随便输入

test' or '1' or '

插入进行语句后就是这样

$xml->xpath("/heroes/hero[login=' test' or '1' or ' ' and password=' xxx']");

我们要知道运算符是有优先级的,一般等于号=的优先级大于and,and的优先级大于or。即 '=' > 'and' > 'or'。login='test'为假,password='xx'为假,or '1'为真,or ''为假

所以$result为真,绕过登录

猜你喜欢

转载自blog.csdn.net/qq_44159028/article/details/115101114