被动扫描那些事儿1

之前一直在手工的做漏洞的挖掘,其优点在于准确度高,可以发现其中很深的漏洞以及逻辑问题,但是这也是它的缺点,在深度挖掘的时候,并不能覆盖到测试的方方面面,所以一个半自动的扫描工具很适合的这样的情况 。

先来看一下主要的一些漏洞类型:

  1. 越权
  2. XSS,包括反射与存储
  3. SQL注入
  4. XXE
  5. CSRF
  6. 命令注入
  7. ImageMagick
  8. phpinfo/phpmyadmin泄露
  9. SSTI(server-side template injection)
  10. URL跳转与SSRF

这些问题,其中反射型XSS最容易检测,SQL注入可以用sqlmapapi来进行, 命令注入与SSTI也可以自动化来检测,而越权, ImageMagick ,存储XSS可以自己来测试,因为需要提交的表单或者 AJAX并不是太多, 而CSRF的关注点在于如果存在重要操作时,或者在self-xss时才会显得重要,所以手工来测就可以了。

这样的话,我们的目的就是一个被动扫描GET类型的反射XSS,SQL注入, 命令注入与 SSTI有扫描器。

扫描需要

  1. 一个代理
  2. 扫描脚本

v 1.0 BurpSuite

代理的话我第一版用的是burp, 每次使用burp suite时开启log保存,然后在代理结束之后对log进行解析,简单的进行解析,进行XSS与SQL注入扫描,探测是否存在URL跳转或者回显的SSRF(这里其实并不是SSRF,而是远程文件包含,但是目前没想到好的SSRF自动化发现的idea,所以拿这作为开头,因为存在远程文件包含的地方,可能会出现SSRF)。

v1.0 版本是有一些问题的,其一就是时实性不好,在这方面burpsuite是硬伤,当然也可能是我太懒,毕竟觉得写一个监测脚本来监测log日志的增加是不明智的,而且可能会出现请求还没完全写入日志,就被脚本读取,这时候并不是一个完整 的URL请求,所以后边就放弃了这种想法。

talk is cheap, show me the code
xssDetect

XSS

这里还是说一下当时的思考过程。
主要原来还是因为从小场景过渡到大场景,之前的手工测试已经来不及或者说不可能全面的覆盖到每一个功能项了,这个时候就想着用半自动化的工具把自己从一些简单漏洞的耗时中解放出来。君子性非异也,善假于物也。 所以在github上搜了一下有关xss的payload,但是最终我还是选择了一些简单的如<svg onload=alert(1)>, `';!--\"<XSS>=&{()}一方面可以探测是否将特殊字符过滤掉了, 另一方面也不会造成大影响。

当然这里只使用了GET方法,因为如果自动将payload用于POST,一方面可能导致自己的信息被覆盖,而另一方面如果真有xss, 那么可以导致所有人访问的时候会出现弹窗. 所以如果有同学想自己做的时候,可以将payload改为无害的如<svg onload=console.log(1)>.

另外一个点就是在我们访问的过程中, 会出现很多相似的URL请求, 比如只是请求参数的变化. 这些应该视为同一个请求, 所以在这里做了一个简单的去重函数. 即用urlparse将url解析开来, 然后query=dict(urlparse.parse_qsl(query))将其转换为dict, 再将scheme, netloc,path,sort(query.keys)拼起来做为去重的条件.

当然这里还可以更细致的去重, 如将path中的数字以{num}来代替. 不过考虑到一天的日志不会太多,所以没有这样写.

sql injection

另外一个点就是sqlmapali了。

sqlmapapi在之前的wooyun zone里也有人详解的讲过, 有兴趣的同学可去搜过来看一下。在这里我只用了以下几个restfulapi,创建任务、选项设置、查看结果
另外这里有一个坑, 即: 通过看sqlmapapi的源码可以知道,它后边是用subprocess来创建的, 如果代理的结果过多的话, 可能会使服务器崩溃。不要问我怎么知道…

所以如果要使用的话,最好控制一下一次检测的数量, 自己在用的时候控制在15-20个之间. 可以根据自己的环境和需要调整。

而且在用的时候, 最好通过修改源代码的方法将admin的hash值改成固定的, 这样可以在固定的链接下查看已经跑出来的结果.

url跳转

最后一部分就是对URL跳转做了检测。在VPS上开启了一个HTTP服务, 比如xxx/ssrf.txt, 如果返回的结果包含此链接中的锚点, 即ssrf.txt中的内容, 那么这很可能是一个URL跳转漏洞, 或者, 是一个远程文件包含, 谁又说远程文件包含不能转换成ssrf呢?

后期还写了一个命令注入与模板注入的脚本, 抽时间可以也集成在这里边.

总之这是一个还算方便的工具, 尤其是不在本地熟悉的环境时候, 可以简单方便的进行一些测试

end

但是这并不能掩盖它的缺点, 即不够优雅, 扩展性也不好. 所以下一步是写一个简单的方便易扩展的被动扫描工具。

文章目录
  1. 1. 扫描需要
  2. 2. v 1.0 BurpSuite
    1. 2.1. XSS
    2. 2.2. sql injection
    3. 2.3. url跳转
  3. 3. end
|