天道酬勤

反射型XSS之php5.2版本踩小坑

##反射型XSS

反射型XSS又称非持久型XSS,这种攻击方式往往具有一次性

攻击方式:

攻击者通过构造恶意链接,并将其发送给受害者,待受害者点击链接之后,服务器就接收到受害者的请求并进行处理,然后服务器把带有XSS代码的数据发送给受害者的浏览器,浏览器解析这段带有XSS代码的恶意脚本之后,就会触发XSS漏洞。

##环境搭建

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>反射型XSS</title>
</head>
<body>
<center>
<h6>输入你想打印的字符</h6>
<form action="" method="get">
<input type="text" name="xss_input_value" value="输入"><br />
<input type="submit">
</form>
<hr>
<?php
if (isset($_GET['xss_input_value'])) {
echo '<input type="text" value="'.$_GET['xss_input_value'].'">';
}else{
echo '<input type="text" value="输出">';
}
?>
</center>

</body>
</html>

在代码中,通过GET获取参数xss_input_value的值,然后通过echo输出一个input标签,并将xss_input_value的值放入input标签的value中(也就是输出到页面上)。

ps:sublime 写html代码真好用

现在我们对其访问,如下:

现在我们在框内输入XSS恶意代码  "><script>alert("xss")</script>,提交查询

发现变成如下:

在这个地方我困惑了很久,我的环境是正确的。我写的恶意代码也是没有问题的,可是为什么就不触发弹窗呢?

我检查了网页的源代码,如下:

原来我的双引号被转义了。

那重新构造恶意代码 "><script>alert(/xss/)</script>,点击提交

发现这一次成功弹窗了,成功执行了我们的恶意代码。

再次回到 双引号 被转义的问题 

实验了很多次,终于找到了问题的源头,在于php的版本,我起初搭配的php版本是5.2,后来换了5.3及以上版本,双引号就不被转义了,成功执行恶意代码。

##修复反射型XSS漏洞

修复反射型XSS漏洞,我们要利用一个函数——htmlspecialchars()

htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。

用法: htmlspecialchars($a,ENT_QUOTES)

现将测试环境部分代码,做如下修改,即可修复XSS漏洞:

<?php
		$xss = $_GET['xss_input_value'];
		$xss = htmlspecialchars($xss,ENT_QUOTES);
		if (isset($xss)) {
			echo '<input type="text" value="'.$xss.'">';
		}else{
			echo '<input type="text" value="输出">';
		}
?>

做完修改之后,我们再来看其,输入恶意代码后的页面源代码:

发现恶意代码内的字符被转义,也就不会执行恶意脚本了,成功抵御XSS攻击。

不自己尝试搭建环境,永远不知道会有多少的冷知识!

赞(0) 打赏
未经允许不得转载:HackerGu‘s Blog » 反射型XSS之php5.2版本踩小坑
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

专注黑客技术的研究

联系我们联系我们

觉得文章有用就打赏一下文章作者

微信扫一扫打赏