准备工作:
PHP环境
XSS的概念
跨站脚本(Cross-site scripting,简称为:CSS, 但这会与层叠样式表(Cascading Style Sheets,CSS)的缩写混淆。因此,跨站脚本攻击缩写为XSS)是一种网站应用程序的安全漏洞攻击。
类型:
反射型,DOM型,存储型
反射型:
首先了解PHP中的$_GET 和 $_POST
简单来讲,就是用来传参数的,对应GET或者POST请求
使用方法
$get = $_GET['xss'];
$post = $_POST['xss']; #XSS为接收值
构造反射型XSS漏洞
我们就用 GET请求举例子
简单来说就是:
if(isset($_GET['xss'])) {
$xss = $_GET["xss"];
echo 'name:',$xss;
}#获取一个GET值为,并且赋值给变量$xss
通过 echo来输出 GET请求的值,没有任何过滤的情况下,可以执行Javascript代码
通过简单的代码,我们可以构造一个简单的前端,xss常出现的搜索界面
尝试输入Hello
echo会将GET参数返回,所以产生xss漏洞;
XSS存储型:
我们先不用数据库,直接用txt文件的方式存储,一般存储型的,都是存储数据库上的
简单的代码还原存储型xss
出现地方:评论区,资料上传等
老规矩:
// 使用get取值
if(isset($_GET['comments']))
{
$comments = $_GET['comments'];
$login = fopen('xss.txt','a'); //打开xss.txt文件
fwrite($login, $comments."\r\n");//将get请求的写入xss.txt
fclose($login);//关闭文件
$url = "xsscc.php";
echo "<meta http-equiv='refresh' content ='0.1;url=$url'>";
}
if(file_exists('xss.txt')){ //判断文件xss.txt是否存在
$read = fopen("xss.txt",'r'); //打开xss文件 "r"表示只读
while(!feof($read)){
echo fgets($read) . '</br>';//输出read的值
}
fclose($read);
}
代码解释:就是讲接收到的GET值,写入txt文件中,然后通过while输出txt的所以内容
最后:
我们输入的内容都会存储,显示页面上
最后输入:
<script>alert('xss')</script>
每次打开都会弹窗,这就是xss存储型的特点
如何防御:
利用PHP的函数
htmlentities()
将内容转换为HTML实体
例如我们的xss反射型
if(isset($_GET['xss'])) {
$xss = $_GET["xss"];
echo 'name:',htmlentities($xss);
}
这样我们输出的就直接是
<script>alert('xss')</script>
结束
DOM型也是差不多的,这里就不演示了,真实环境当中,
xxs漏洞会加很多过滤
需要自己一步步探索
需要完整源码的可以私