最近在玩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