从AWVS插件到伪 *** 扫描

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

  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

相关文章

纽约遭黑客攻击(纽约网络攻击)

纽约遭黑客攻击(纽约网络攻击)

本文导读目录: 1、假消息和黑客同时“袭击”美国战疫中枢,美国究竟得罪了谁? 2、给我介绍一下世界各国的有名黑客事迹 3、著名的黑客事件都有哪些 4、历史上最著名的几次黑客事件 5、2...

“汉语桥”全球总冠军sd内存卡无法格式化戴庐可与中国的“不解之

  中新网重庆11月15日电 题:“汉语桥”全球总冠军戴庐可与中国的“不解之缘”   中新网记者 钟旖   仅三年时间,22岁的比利时青年戴庐可已来往中国8次。他既爱中国的山水田园,也热衷寻访各地...

长安街沿线10处立体花坛展现中国辉煌成就

  长安街沿线10处立体花坛展现中国辉煌成就   新华社北京10月2日电(记者魏梦佳)每年国庆节,天安门广场及长安街沿线绚丽的立体花坛,都是北京市民及游客关注及拍摄的对象。今年,长安街沿线建国门至复...

南昌找黑客帮忙办事-女黑客林怡QQ(中国第一美女黑客林怡图片)

南昌找黑客帮忙办事-女黑客林怡QQ(中国第一美女黑客林怡图片)

南昌找黑客帮忙办事相关问题 秦风和女黑客相关问题 黑客能干什么行业 西苑医院被黑客攻击(中医科学院西苑医院) 黑...

购买别人的微信聊天记录

 尽管说如今启用微信小程序早已变成了日常,可是因为本人开发设计小程序還是沒有完全健全,因此 依然存有着一些局限,而这种作用在本人小程序之中是没有办法完成的。 第一个作用便是有关微信付款的插口,尽管说...

大阴阳师和月见黑客服(阴阳师月见黑的获取方式)

大阴阳师和月见黑客服(阴阳师月见黑的获取方式)

月见黑是什么 1、月见黑是一个网络用语,源自日本,原意是指每个月的 15 号,因为在日本旧历中,每个月的 15 号被称为月见,而黑在日语中有日子的意思。2、月见黑是阴阳师中的头像框,玩家达成非洲·阴阳...