# 编写自己的Acunetix WVS漏洞脚本

Author: 乌云历史资料库 (@wooyun_archive)
Published: 2014-07-04T06:44:00Z
Canonical: https://wepostx.com/topics/515

> 乌云历史资料归档
>
> **原始作者：** 乌帽子
> **原始编号：** superkieran-wooyundrops:294
> **原始发布时间：** 2014-07-04 14:44
> **声明：内容仅用于技术研究和个人使用，版权归 wooyun.org。**

---

## 0x00 背景

AWVS提供了自定义的脚本编程接口，可是网上的资料很少，只有官方的几篇介绍和参考手册，最近研究了一下怎么编写AWVS的漏洞脚本来写一篇简单性的文章，大家有兴趣的可以交流。
本文以8.0为例，首先呢安装好Acunetix Web Vulnerability Scanner 8（该破解的破解，该付费的付费），然后我们需要WVS公开的小小的SDK，下载地址：[http://www.acunetix.com/download/tools/WVSSDK.zip](http://www.acunetix.com/download/tools/WVSSDK.zip)，下载好了后解压bin目录下的WVSS.exe到WVS安装目录下面，此即为WVS脚本编写工具。另外sdk里还有3个简单的脚本小例子和WVS_SDK_Quick_Introduction.pdf，耐心的可以看看。

## 0x01 细节

下面的截图就是WVS码脚本工具了

![原文图片](/media/2016/06/a2b7893e392a1638d955d786119b29f1)

打开WVS数据目录，通常是在C:\Documents and Settings\All Users\Application Data\Acunetix WVS 8\Data\Scripts下，可以看到有10个文件夹，Network、PerFile、PerScheme、PostScan、PerFolder、PerServer、PostCrawl、WebApps、XML。我们先来认识一下：

![原文图片](/media/2016/06/4552104ecefb71cff349d05b2dbeda1d)

```text
Network：此目录下的脚本文件是当扫描器完成了端口扫描模块后执行，这些脚本可以检测TCP端口的开放情况，比如检测FTP的21端口是否开放、是否允许匿名登录； PerFile：此目录下的脚本是当扫描器爬虫爬到文件后执行，比如你可以检查当前测试文件是否存在备份文件，当前测试文件的内容等； PerFolder：此目录下的脚本是当扫描器爬虫爬行到目录后执行，比如你可以检测当前测试目录是否存在列目录漏洞等； PerScheme：此目录下的脚本会对每个URL的 GET、POST结构的参数进行检测，AWVS定义了的参数包括HTTP头、Cookies、GET/POST参数、文件上传(multipart/form-data)……比如你可以检测XSS、SQL注入和其他的应用程序测试； PerServer：此目录下的脚本只在扫描开始是执行一次，比如你可以检测Web服务器中间件类型； PostScan：此目录下的脚本只在扫描结束后执行一次，比如你可以检测存储型XSS、存储型SQL注入、存储型文件包含、存储型目录遍历、存储型代码执行、存储型文件篡改、存储型php代码执行等； XML：漏洞的详细描述文档都在这里。
```
今天演示的漏洞是Discuz 7.2的faq.php SQL注入，关于漏洞：[http://ha.cker.in/1087.seo](http://ha.cker.in/1087.seo)
我们就用POC来写漏洞的脚本吧！
检测原理：
根据公开的POC构造出特殊请求，若存在SQL注入则构造的SQL语句将会执行成功并在返回到响应内容，构造POC如下：

```text
/faq.php?action=grouppermission&gids[99]='&gids[100][0]=) and (select 1 from (select count(*),concat((select 0x4861636B656442795365636572),floor(rand(0)*2))x from information_schema.tables group by x)a)%23
```
URLEncode编码一下：

```text
faq.php?action=grouppermission&gids[99]='&gids[100][0]=)%20and%20(select%201%20from%20(select%20count(),concat((select%200x4861636B656442795365636572),floor(rand(0)2))x%20from%20information_schema%20.tables%20group%20by%20x)a)%23
```

![原文图片](/media/2016/06/9b3fca6862bcf768c14d16882fbad866)

我们需要用WVS的脚本请求此URL并处理返回的内容，以此判断是否存在漏洞。
打开AWVS，Tools -> Vulnerability Editor，右键VulnXMLs节点，选择‘Add Vulnerability’

![原文图片](/media/2016/06/bd3cad4bd0679084f265f3ae67bca2b2)

新建一个漏洞，VulnXML FILENAME为Discuz7.2FaqSqlinjection，点Add按钮（新建的VulnXML会被保存到XML文件夹下哦）

![原文图片](/media/2016/06/c9001296727d769401588af7d95f8294)

接下来登记下该漏洞的相关信息

![原文图片](/media/2016/06/52771f040e2ffaf0f3225403bb961ed8)

![原文图片](/media/2016/06/817d87097e77249fbddfe7126f632290)

然后进入wvss写脚本，保存为Discuz7.2FaqSqlinjection.script放入PerServer文件夹吧。
测试脚本：
使用AWVS的网站爬虫爬行网站并保存结果，

![原文图片](/media/2016/06/5539fd5e4e8240131ba9eaec6a83d67e)

这里选择根目录

![原文图片](/media/2016/06/f34ceb71747780ef68ba0f73519140b1)

点击小三角按钮测试

![原文图片](/media/2016/06/7d17f4f2c2983f1d05cf074afc83c3a2)

![原文图片](/media/2016/06/48afe1c23f8924a70c3d3fc7e3a277ac)

完整的代码如下

![原文图片](/media/2016/06/ca780b2edb4e9e43aecc32e83bc3ec60)

测试成功了，我到WVS里扫描去测试扫描看看~
我们新建的漏洞脚本在这里，Scanning Profiles –》 PerFolder目录下，新建一个扫描模板勾选要测试的脚本并保存，这里保存为“test_HA.CKER.IN”，然后用这个模板扫描目标站测试吧

![原文图片](/media/2016/06/1c9f1dd0dd1da70d27bbc6dd81eca95c)

选择模板并开始扫描

![原文图片](/media/2016/06/619534b8a846983b4480b88bcbabb522)

扫描完成后，结果如图

![原文图片](/media/2016/06/ef9bd2bf402733368537264681134313)

漏洞脚本重复检测了很多次，下次更新修复下这个问题。

## 0x02 总结

本人不才，这次对AWVS自定义脚本编写简单的介绍就到这了，只是做个示例展示给大家，这些API不是很详细我也不是很会写，更多的API等你去挖掘吧！
参考：
[http://www.acunetix.com/vulnerability-scanner/scriptingreference/index.html](http://www.acunetix.com/vulnerability-scanner/scriptingreference/index.html)
[http://www.acunetix.com/blog/docs/creating-custom-checks-acunetix-web-vulnerability-scanner/](http://www.acunetix.com/blog/docs/creating-custom-checks-acunetix-web-vulnerability-scanner/)

## Replies
