Writeup 实验吧/WEB/貌似有点难/32 【HTTP header伪造】

http://www.shiyanbar.com/ctf/32
http://ctf5.shiyanbar.com/phpaudit/

0x00 发现是代码审计,伪造客户端IP

在header中添加:X-Forwarded-For: 1.1.1.1或者Client-Ip: 1.1.1.1,即可完成伪造。
注:header中的分割符为“-”,而php中为“_”,且header的名字也不完全一样。

参考链接:https://blog.csdn.net/hudashi/article/details/50955602

伪代码:
1)ip = request.getHeader("X-FORWARDED-FOR")
可伪造,参考附录A
2)如果该值为空或数组长度为0或等于"unknown",那么:
ip = request.getHeader("Proxy-Client-IP")
3)如果该值为空或数组长度为0或等于"unknown",那么:
ip = request.getHeader("WL-Proxy-Client-IP")
4)如果该值为空或数组长度为0或等于"unknown",那么:
ip = request.getHeader("HTTP_CLIENT_IP")
可伪造
5)如果该值为空或数组长度为0或等于"unknown",那么:
ip = request.getRemoteAddr() //虽然可能拿到的是代理服务器的ip,相对来说最安全
可对于匿名代理服务器,可隐匿原始ip,参考附录B

从 request.getRemoteAddr() 函数的定义看:
Returns the Internet Protocol (IP) address of the client or last proxy that sent the request.
实际上,REMOTE_ADDR 是客户端跟服务器“握手”时的IP,但如果使用了“匿名代理”,REMOTE_ADDR 将显示代理服务器的ip,或者最后一个代理服务器的ip。请参考附录B。

你可能感兴趣的:(Writeup 实验吧/WEB/貌似有点难/32 【HTTP header伪造】)