本文主要介绍Web网络安全分析中XFF注入攻击原理的详细说明。有需要的朋友可以借鉴一下,希望能有所帮助。祝大家进步很大,早日升职加薪。
目录
XFF注入XFF注入代码分析
XFF注入
XF注入攻击的测试地址:http://127.0.0.1/sqli/xff.php。
X-Forwarded-for简称XFF头,代表客户端的真实IP。通过修改X-Forwarded-for的值,可以伪造客户端IP。通过Burp Suite住宅数据包内容设置X-Forwarded-for到11.22.33.44,然后访问并更改URL,页面恢复正常,如图62所示。
图62 XFF头
将X-Forwarded-for设置为11.22.33.44 ,再次访问网址,页面返回MySQL的错误信息。结果如图63所示。
图63访问X-Forwarded-for:11.22.33.44的结果
分别设置X-Forwarded-for为11.22.33.44 和1=1#和11.22.33.44 和1=2#,再次访问URL。结果如图64和图65所示。
图64访问X-forwarded-for: 11.22.33.44 和1=1 #的结果。
图65访问X-forwarded-for: 11.22.33.44 和1=2 #的结果。
根据页面返回的结果,可以判断地址变更存在SQL注入漏洞,然后可以通过order by判断表中字段的个数。最后,测试数据库中有4个字段。尝试联合注入法,语法为X-forwarded-for:-11 . 22 . 33 . 44 Union Select 1,2,3,4 #,如图66所示。
图66使用联合注入
然后,使用联合注入方法完成注入。
XFF注入代码分析
PHP中的getenv()函数用于获取环境变量的值,类似于$_SERVER或$_ENV,返回环境变量对应的值,如果环境变量不存在,则返回FALSE。
以下代码可用于获取客户端的IP地址。程序首先判断HTTP头参数HTTP_CLIENT_IP是否存在,如果存在,则支付$ip。如果没有,它将确定HTTP头参数HTTP _ x _ forwarded _ for是否存在。如果是,它将被分配给$ip。如果没有,它将把HTTP头参数REMOTE_ADDR赋给$ip。
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
$con=mysqli_connect(localhost , root , root , test );
if (mysqli_connect_errno())
{
“Echo”连接失败:“”。mysqli _ connect _ error();
}
if(getenv(HTTP_CLIENT_IP ))
{
$ IP=getenv( HTTP _ CLIENT _ IP );
}
else if(getenv( HTTP _ X _ FORWARDED _ FOR ))
{
$ IP=getenv( HTTP _ X _ FORWARDED _ FOR );
}
elseif(getenv(远程_ADDR ))
{
$ IP=getenv( REMOTE _ ADDR );
}
其他
{
$ IP=$ HTTP _ SERVER _ VARS[ REMOTE _ ADDR ];
}
$result=mysqli_query($con, select * from users where ` IP `= $ IP );
如果(!$result)
{
printf(Error: %sn ,mysqli _ Error($ con));
exit();
}
$ row=mysqli _ fetch _ array($ result);
echo $row[username]。 : .$ row[ password ];
echo br
?
接下来,将$ip拼接到select语句中,然后将查询结果输出到接口。
由于HTTP头参数可以伪造,所以可以添加一个头参数CLIENT_IP或X_FORWARDED_FOR。当设置了x _ forwarded _ for=1 union select 1,2,3 #时,执行的SQL语句为:
select * from user where IP `= 1 union select 1,2,3#
此时,SQL语句可以分为两部分:select * from user where IP `= 1 和Union select 1,2,3 2和3。第二个语句(union query)可用于获取数据库中的数据。
以上是Web网络安全分析中XFF注入攻击原理的详细内容。更多关于Web网络安全中XFF注入攻击的信息,请关注我们的其他相关文章!