知识点:
是HTTP请求头中XFF的伪造和应用,是一道借用XFF来爆破数据库、表、列以及列值的题目。先输入账户为admin,密码为123456进行登录尝试,出现了弹窗,仔细观察弹窗会发现类似IP地址格式的112.111.12.126数据存在,猜测这是服务端记录并显示了客户端的IP地址。
首先了解服务端如何获取客户端请求IP地址?
服务端获取客户端请求IP地址,常见的包括:x-forwarded-for、client-ip等请求头,以及remote_addr参数。
remote_addr:指的是当前直接请求的客户端IP地址,它存在于tcp请求体中,是http协议传输的时候自动添加,不受请求头header的控制。因此,当客户端与服务器之间不存在任何代理的时候,通过remote_addr获取客户端IP地址是最准确,也是最安全。remote_addr无法伪造
x-forwarded-for,即XFF,是很多代理服务器在请求转发时添加上去的。如果客户端和服务器之间存在代理服务器,那么通过remote_addr获取的IP就是代理服务器的地址,并不是客户端真实的IP地址。因此,需要代理服务器(通常是反向代理服务器)将真实客户端的IP地址转发给服务器,转发时客户端的真实IP地址通常就存在于XFF请求头中。
client-ip同XFF,也是代理服务器添加的用于转发客户端请求的真实IP地址,同样保存与请求头中。
使用Burp Suite抓包
查看Response,可以看出服务端的可能记录并显示了客户端IP地址。根据已知服务端获取客户端的方法知识以及题目(X-Forwarded-For注入漏洞实战)的提示,通过在请求头header中增添XFF选项及内容,检测服务端是否可以通过XFF获取客户端IP地址并判断XFF是否可以作为注入点。
服务端可以通过客户端设置XFF获取IP地址,并将其回显到alert中,因此XFF存在注入点。然后使用kali上的SQLmap对服务端的数据库、表、列以及列值进行爆破。记得将Request保存到test.txt文本文件中
- SQLmap结合test.txt文件对数据库进行爆破,发现名为webcalendar的数据库
- 根据上面获取的数据库信息,获取数据库webcalendar的表信息
- 根据获取的数据表内容,有两个表,先对user表的列进行爆破,发现了username和password列,这可能就是我们需要获取的内容
- 根据获取到列的值,对里面的字段进行爆破
总结:
根据HTTP请求头X-Forwarded-for伪造以及应用,然后使用SQLmap获取到了用户名以及密码(admin,1038411473),最后登录成功