从AWVS插件到伪 *** 扫描

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

  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

相关文章

核酸检测多久拿报告(核酸检测如何预约?)

核酸检测多久拿报告(核酸检测如百思特网何预约?) 出差、休假需要核酸检测怎么办?由于各地具体管控政策不同,近日不少有出行计划的市民都自发前往核酸采样点进行核酸检测。 据上海市卫健委透露,按照“应检...

你知道的黑客帝国的动作设计(黑客帝国运动镜头分析)

你知道的黑客帝国的动作设计(黑客帝国运动镜头分析)

黑客帝国2:重装上阵的幕后制作 虚拟拍摄2000年3月,影片的特效团队在特效总监约翰·盖特的带领下开始着手本片中的1000多个特效画面,盖特曾因首部《黑客帝国》赢得奥斯卡最佳特效奖。《黑客帝国2:重装...

现在的顺丰速运怎么样快不快?顺丰的速度究竟有多快

现在的顺丰速运怎么样快不快?顺丰的速度究竟有多快

曾经的顺丰人,和大家分享下当下火爆快递圈的顺丰速运。顺丰快递作为当前中国快递最强劲的快递公司,无论从时效,服务,市场占有率,企业利润,等其他各个方面比起四通一达都不是强的一点点。今天我们不说其他,直面...

怎么查询姐妹微信已删记录

. 身为家长看重的就是孩子的教育,家长应该从小培养孩子在社会想处的能力才能更好的在这个社会生存。其实家长只要培养好孩子的三商就不怕孩子没出息。那么孩子三商是哪三商呢。该怎么培养下面友谊长存小编就来和...

qq群黑客接单是真的吗_学业网

23、donald (新呈现)deb http://dk.archive.ubuntu.com/ubuntu/ trusty main universe而在盯梢蓝宝菇的进犯活动中,该安排投进的LNK文...

调取他人微信聊天记录调取他人微信聊天记录机构可靠吗

 过去也有以蠕虫病毒的形式,来散布挖矿绑架恶意软件的案例,但是这是第一次挖矿绑架蠕虫被发现存在Docker社群版本中,使用容器进行传播。研究人员表示,由于大多数传统端点保护软件,都不会检查容器中的...