• 最新XFF注入攻击和代码分析技术


    点击星标,即时接收最新推文

    da01c6b6cab79b6985c8976a0bca638f.png

    本文选自《web安全攻防渗透测试实战指南(第2版)》

    点击图片五折购书

    c5c15859928654fcbff7904e88cead5a.gif

    XFF注入攻击

    XFF注入攻击的测试地址在本书第2章。

    X-Forwarded-For简称XFF头,它代表客户端真实的IP地址,通过修改X-Forwarded-For的值可以伪造客户端IP地址,在请求头中将X-Forwarded-For设置为127.0.0.1,然后访问该URL,页面返回正常,如图4-67所示。

    db94c8f1c8214762292b5edb278db62a.jpeg

    图4-67 

    将X-Forwarded-For设置为127.0.0.1',再次访问该URL,页面返回MySQL的报错信息,结果如图4-68所示。

    9cf0ad96bddd47f8f1eedfd448206c1d.jpeg

    图4-68

    将X-Forwarded-For分别设置为127.0.0.1' and 1=1#和127.0.0.1' and 1=2#,再次访问该URL,结果分别如图4-69和图4-70所示。

    90617eac6be2070f4c8aa75b3237e093.jpeg

    图4-69  

    c486bf87f48dd29177760fc75b88a594.jpeg

    图4-70  

    通过页面的返回结果,可以判断出该地址存在SQL注入漏洞,接着使用order by判断表中的字段数量,最终测试出数据库中存在4个字段,尝试使用Union查询注入方法,语法是X-Forwarded-for:-1' union select 1,2,3,4#,如图4-71所示。

    a90f2d26d9945d34e2bc034f9d46b6c4.jpeg

    图4-71  

    接着,使用Union注入方法完成此次注入。

    8efaf60d2f8914f60dbd2bcae649dd85.gif

    XFF注入代码分析

    PHP中的getenv()函数用于获取一个环境变量的值,类似于$_SERVER或$_ENV,返回环境变量对应的值,如果环境变量不存在,则返回FALSE。

    使用以下代码即可获取客户端IP地址。程序先判断是否存在HTTP头部参数HTTP_CLIENT_IP,如果存在,则赋给$ip;如果不存在,则判断是否存在HTTP头部参数

    HTTP_X_FORWARDED_FOR。如果存在,则赋给$ip;如果不存在,则将HTTP头部参数REMOTE_ADDR赋给$ip。

    1. $con=mysqli_connect("localhost","root","123456","test");
    2. if (mysqli_connect_errno()){
    3. echo "连接失败: " . mysqli_connect_error();
    4. }
    5. if(getenv('HTTP_CLIENT_IP')) {
    6. $ip = getenv('HTTP_CLIENT_IP');
    7. } elseif(getenv('HTTP_X_FORWARDED_FOR')) {
    8. $ip = getenv('HTTP_X_FORWARDED_FOR');
    9. } elseif(getenv('REMOTE_ADDR')) {
    10. $ip = getenv('REMOTE_ADDR');
    11. } else {
    12. $ip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
    13. }
    14. $result = mysqli_query($con,"select * from winfo where `ip`='$ip'");
    15. if (!$result) {
    16. printf("Error: %s\n", mysqli_error($con));
    17. exit();
    18. }
    19. $row = mysqli_fetch_array($result);
    20. echo $row['username'] . " : " . $row['address'];
    21. echo "
      ";
    22. ?>

    接下来,将$ip拼接到select语句中,然后将查询结果输出到界面上。

    由于HTTP头部参数是可以伪造的,所以可以添加一个头部参数CLIENT_IP或X_FORWARDED_FOR。

    当设置X_FORWARDED_FOR =-1' union select 1,2,3,4%23时,执行的SQL语句如下:

    select * from winfo where `ip`='-1' union select 1,2,3,4#'

    此时,SQL语句可以分为select * from winfo where `ip`='-1'和union select 1,2,3,4这两条,利用第二条语句(Union查询)就可以获取数据库中的数据。

    dee82d74d1ddb8841c5892a1e3ea86f1.gif

    MS08067安全实验室视频号已上线

    欢迎各位同学关注转发~

    —  实验室旗下直播培训课程  —

    19b95fb3b3718b61f7165f0f897654ff.png

    766c7de3ae56df8c1c6658c64897a0a8.jpeg

    a4c9036ad49896b16e873f746cff7686.jpege0c1e1f9a6e85aedc3ae9d12ec9f1298.png

    9cda0a65119f4ede39cdb9fac73d8498.jpeg

    76876e9447ce18266b7959abce249403.jpeg

    aa3f7d1faaf11bb81a9816209938f1b6.jpeg

    70889079d80968e8777b9d2142835760.jpeg

    864784b16a9767c268783d1fcdcc5ed7.jpeg


    和20000+位同学加入MS08067一起学习

    aefa65855369e5db181fe3b3385a60ba.gif

  • 相关阅读:
    SpringBoot和Vue集成Markdown和多级评论——基于SpringBoot和Vue的后台管理系统项目系列博客(二十三)
    四种强大且隐秘的缓存
    【lesson13】进程地址空间收尾
    企业数字化转型资料合集
    eProsima-fastdds简介
    数据分发服务 (DDS) 内置主题
    Maven
    【广度优先搜索-中等】130. 被围绕的区域
    在亚马逊购买产品时怎么选择自动收货方式
    【ONE·R || R与C++混合编程简单介绍 】
  • 原文地址:https://blog.csdn.net/shuteer_xu/article/details/133917787