从AWVS插件到伪 *** 扫描

访客4年前关于黑客接单1178

  AWVS作为非常强大的web漏洞扫描器,相信大家都不陌生。然而,AWVS必须运行在windows环境,对Linux用户来说,多了一层使用虚拟机的麻烦。鉴于此,我们对AWVS进行了一些简单分析, 并试着对其中几个插件进行了Python化。 在这个过程中, 可以更好地认识到AWVS的优势与不足。

  awvs.png

  关于如何编写AWVS插件,以及每个目录下插件的作用, 《编写自己的Acunetix WVS漏洞脚本》一文中已有介绍

  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:漏洞的详细描述文档都在这里。

  首先是文件夹, 存放的都是不同类型的漏洞的详情介绍与修复方式, 相信使用过的小伙伴都在右侧的漏洞详情见过, 这里不再做分析;

  其次是文件夹, 这里存放的是对 *** 端口进行的一些漏洞检测与信息发现,比如其中的看名称也知道这是对域传送漏洞的检测, 其他还有ftp匿名登录等, 因为这系列的文章是从插件分析到 *** 扫描, 所以不再对这一部分进行详细介绍. 不过这里可以推荐看一下系列相关的script, 毕竟每个公司可能都会开一些 *** 端口, 而且这一系列的漏洞在wooyun中也有介绍.

  再就是文件夹, 包括与等, 还有, 这时对XSS进行了一个检测,稍后我们会对这里进行分析

  文件夹,包括与等,还有这种检测SQL注入的. 同样,我们也会对注入进行一个检测

  文件夹将是重点关注的内容,同quote中的内容一样, 这里包括常用的漏洞包括XSS/SQLI/XXE/SSRF等

  再接下来是文件夹: 是对不同中间件的检测如是对apache *** 检测, 还包括,等不同中间件的检测, 有兴趣的可以看一下, 包括也提供了一个检测插件

  这个,讲实话没有细看..就不过多叙述误导大家了;

  文件夹, 只有几个插件大家可以看一下名称: , , , , , 这随随便便拎出来一个就是高危呀同志们;

  最后一个是对一些常见的CMS如, , 进行漏洞检测;

  本次分析了以下插件的实现思路

  Blind_Sql_Injection.script

  classSqlInjection.inc

  classCRLFInjection.inc

  classXSS.inc

  Code_Execute.script

  XXE_Folder.script

  Server_Side_Request_Forgery.script

  为了更好的理解AWVS的插件, 需要首先理解它的几个类:, , 还有一个变量,前三个类看类名也比较好理解, 分别是处理URL, Report和HTTP请求的类,但是不太理解..目前也查不到相关的资料,如果有知道的小伙伴请联系我. 这些虽然和插件的流程无关,但是对于我们规划自己的工具还是很有帮助的.

  经过对几个插件的分析, 发现一般都有这么几个函数: 作为入口,类似于python中的函数, 但是有的插件并没有这一个; 函数, 作为加载文件与的函数, 可以不用太再意, 函数, 的实例实现

  闲言少叙, 开始分析之一个插件,我们先从开始

  在中, AWVS定义了三种document_type类型: html, xml, invalid, 而所有非与类型的都被定义为了 invalid. 同时还定义一个类类,用于在非浏览器如等模型下找到XSS, 举例来说:

  var inputValue = prefix + script_start_tag + script_payload + "(" + rndStr + ")" + script_end_tag;

  ....

  var hq = new THTMLQuery(this.lastJob.response.body);

  if (hq.executeHtmlQuery("tag=script|textwithin=" + script_payload + "(" + rndStr + ")")

  || hq.executeHtmlQuery("tag=script|textwithin=" + script_payload + "('" + rndStr + "')")

  || hq.executeHtmlQuery('tag=script|textwithin=' + script_payload +' ("' + rndStr + '")'))

  {

  this.alert(inputValue);

  return false;

  }

  可以看到, 在为,即时, 使用这种来确定传入的值是否生成了标签而非, 但是这个类的实现未曾找到其定义所在的文件. 不过我们可以使用类来实现,如上边的类js代码可以转换为下边的python代码

  from bs4 import BeautifulSoup as bsdef htmlquery(html, tag, payload):

  b = bs(html, 'html.parser')

  scripts = b.findAll(tag)

  for s in scripts:

  if payload in s:

  return True

  return False

  在中, AWVS用了很多种类型的payload, 我把其中的函数过滤了一下, 对于某个函数想了解的可以更进一步参考

  classXSS.prototype.testPartialUserControllableScriptSrc

  classXSS.prototype.testSimpleScriptTagInjection

  classXSS.prototype.testSimpleScriptTagInjectionWithoutEncoding

  classXSS.prototype.testISINDEX

  classXSS.prototype.testScriptTagInjectionAgainstStringReplace

  classXSS.prototype.testScriptTagVariantInjection

  classXSS.prototype.testScriptTagSrcInjection

  这里特别提一下这个函数, 这是服务器模板注入的一种, 在Python或者jsp中的作用不仅仅是, 在AWVS中, 测试SSTI的payload是: 同时对于的值在返回的body中做检测, 这也可以成功日后检测的一项. 更多的内容可以参考的官方博客介绍:Server-Side Template Injection解锁更多姿势.

  所以, 对于AWVS如何检测反射XSS,目前已经有了一个直接的理解:

  提取参数,

  遍历参数并追加输入不同类型的payload,

  判断返回的类型

  使用 类来搜索对应的payload是否生成了相应的标签与内容

  返回alert报告

  但是对于每一种类型的payload都写一个函数实在是太累了, 如果想简单的使用的话,可以试试以下两种姿势:

  建立一个, 每一种payload的原始代码作为, 其不同的变种作为 , 使用value作为payload请求,在返回的响应中检测, 简单粗暴。

  使用这种headless浏览器,加载返回的响应内容,查看是否有alert自己的randStr。

  在中, 检测的是最常见的报错注入. 同样的, 入口函数是, 然后对于不同类型的进行检测与验证. 由下边的代码可以看到:

  // AcuSensor is NOT enabled

  if (!this.testForError()) continue;

  // single quote + double quote

  if (!this.testInjection("1'"", new Array("", "'", '"'))) continue;

  // backslash

  if (!this.testInjection("\")) continue;

  // single quote + double quote (unicode)

  if (!this.testInjection("1\x00\xc0\xa7\xc0\xa2")) continue;

  // scalar/variable

  if (!this.testInjection('@@' + randStr(5))) continue;

  // single + double quote (base64 encoded)

  if (!this.testInjection('JyI=')) continue;

  // GBK/Big5 encoding

  if (!this.testInjection('\xbf\'\xbf"')) continue;

  // utf8_decode

  if (!this.testInjection('\xF0\x27\x27\xF0\x22\x22')) continue;

  // conversion (ASP)

  if (!this.testInjection('(select convert(int,CHAR(65)))')) continue;

  首先, 用来检测原始请求中是否有出现的报错信息,如果有,进行下一个参数的检测,否则,分别使用不同的payload来进行报错注入的检测. 需要注意的是, 仅在使用payload:的时候,需要第二个参数来重复验证.

  接着看一下testeInjection函数, 其流程如下:

  检测是否在返回值中存在匹配的errormessage, 如果不存在, 则continue

  如果存在, 并且有confirm value,即函数的第二个参数, 分别使用mysql,mssql的报错语句进行复测

  var matchedText = this.errorMessages.searchOnText(job.response.toString()); if (matchedText) {

  ...

  var markerPlain = '4Cu'+randStr(8);

  var markerEncodedMSSQL = encodeStringAsChar(markerPlain, '+');

  var markerEncodedMYSQL = encodeStringAsChar(markerPlain, ',');

  for (var i=0;i

相关文章

房产知识:房票子的产权性质是什么

相信现在有很多的朋友们对于房票子的产权性质是什么都想要了解吧,那么今天小编就来给大家针对房票子的产权性质是什么进行一个介绍吧,希望小编介绍的内容能够为大家起到帮助哦 房票子的房子办产权按照回迁方式收费...

又一手机微信新式行骗忽然“兴起”,很多人资产失窃,赶紧告知亲

又一手机微信新式行骗忽然"兴起",很多人资产失窃,赶紧告知亲人! 不论是手机微信還是支付宝钱包,现在在我们的日常生活之中都充分发挥了关键的功效,大家...

qq上的黑客接单都是真的吗,找免定金的专业黑客,哪里找破解qq密码的黑客

a 装备文件XML隐写 将创立一个名为exploit.rtf文件的RTF ,指向一个名为CVE-2019-0199_POC的第二个RTF文件的OLE目标(该文件将只要一些POC文本)。 Sel...

拉肚子拉水怎么办(得看看是什么情况,才能对

生活中常常会因为不正确饮食或者进食了不卫生食物之后导致肠胃功能紊乱,严重会出现急性腹泻,治疗不及时演变成慢性腹泻。面对闹肚子拉水症状,许多人都手足无措。出现这种情况需要及时治疗,同时控制好患者的饮食,...

详细教您ai格式怎么打开

详细教您ai格式怎么打开

ai是一种矢量图格式文档的后缀名,是由Adobe Illustrator绘图软件的默认设置储存文件格式,一般的看图片软件打不开。下边,我也给大伙儿介绍一下ai文件格式的开启方式,有必须就赶快来了解一下...

北京阁商务全国各地高端私房群-【韩珍】

“北京阁商务全国各地高端私房模特群-【韩珍】” 高端模特伴游北京高端商务招聘职位,,我还在昨日早晨跑步的情况下遇到了“高端模特伴游北京高端商务招聘职位”商务小学妹艺人经纪人盼盼”,因为我是和女友一起慢...