[PHP]$_SERVER中的[‘HTTP_X_FORWARDED_FOR’]函数


最近在玩CTF的时候遇到了跟这个函数相关的几道题,我感觉这是一个非常有趣的参数,他能透过代理IP取到真实用户的地址。对HTTp协议进行扩展。定义了一个叫做X-Forwarded-For的实体头

X-Forwarded-For也就是常说的XFF头,因为XFF头是客户端的,所以我们能控制XFF头部分,可以用来”伪造IP”我之前写过一个随机请求头爆破用户名的脚本,就用到了XFF头伪造IP。

当然使用BURP也可以构造XFF头”伪造IP”

获取IP界面:

PHP使用$_SERVER[‘HTTP_X_FORWARDED_FOR’]获取IP

当没用XFF头就用$_SERVER[‘REMOTE_ADDR’];获取IP。

如果有就使用$_SERVER[‘HTTP_X_FORWARDED_FOR’],前面说过,XFF头是客户端发送的,我们可以控制,那么就来伪造一下

在请求中加一个X-Forwarded-For

$_SERVER[‘HTTP_X_FORWARDED_FOR’]普遍用于获取客户端IP并存入数据库,一般做数据分析,或者WAF会用的到

就拿WAF为例,大部分喜欢这样玩。

<?php header("Content-Type: text/html; charset=UTF-8"); function Ip(){ $ip = ''; if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; }else{ $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } $getIp = Ip(); echo '你的IP'.Ip().'以被记录<br>以启动报警功能!'.'<br>'; $mydb = new mysqli('localhost', 'root', 'root', 'ip'); $sql = "insert into ip(ip) values ('$getIp')"; $mydb->query($sql); ?> 

 

获取某个IP然后存入数据库,因为首先是用$_SERVER[‘HTTP_X_FORWARDED_FOR’],发送的请求头,我们可以控制,那么没有经过过滤的情况下,会造成http请求头中的XFF头注入,很有趣的一个注入。

sqlmap -r xff.txt –level 3 –dbms=mysql –risk 1 –users

注入类型是比较奇葩时间盲注

 

 

【注】本文转自:http://www.lsafe.org/?p=481


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM