之前写过一遍Aider.py,但只是跟着代码一顿阅读没有灵魂,所以重新对它阅读并重新写一遍。

描述

文件位置:aider/aider.py 是用来辅助验证的脚本

官方描述就一句话

代码阅读分析

这个脚本会监听8088端口、以及DNS监听53端口。可以将所有请求的dns请求记录下来辅助验证某处是否存在漏洞。

源代码:

import socket,thread,datetime,time
query_history = []
url_history = []
def web_server():
web = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
web.bind(('0.0.0.0',8088))
web.listen(10)
while True:
try:
conn,addr = web.accept()
data = conn.recv(4096)
req_line = data.split("\r\n")[0]
path = req_line.split()[1]
route_list = path.split('/')
html = "NO"
if len(route_list) == 3:
if route_list[1] == 'add':
if route_list[2] not in url_history:
url_history.append(route_list[2])
elif route_list[1] == 'check':
if route_list[2] in url_history:
url_history.remove(route_list[2])
html = 'YES'
else:
query_str = route_list[1]
for query_raw in query_history:
if query_str in query_raw:
query_history.remove(query_raw)
html = "YES"
print datetime.datetime.now().strftime('%m-%d %H:%M:%S') + " " + str(addr[0]) +' web query: ' + path
raw = "HTTP/1.0 200 OK\r\nContent-Type: application/json; charset=utf-8\r\nContent-Length: %d\r\nConnection: close\r\n\r\n%s" %(len(html),html)
conn.send(raw)
conn.close()
except:
pass
if __name__=="__main__":
dns = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
dns.bind(('0.0.0.0',53))
thread.start_new_thread(web_server,())
while True:
try:
recv,addr = dns.recvfrom(1024)
if recv not in query_history:query_history.append(recv)
print datetime.datetime.now().strftime('%m-%d %H:%M:%S') + " " +str(addr[0]) +' Dns Query: ' + recv
except Exception,e:
print e
continue
dns = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

UDP建立socket连接,然后绑定53端口。

if recv not in query_history:query_history.append(recv)

将请求添加到query_history数组中。

web_server()

监听8088端口并且接收消息,取第一行,然后分割。 取到url 将url按/分割,然后判断分割的数据是否等于3,第二个数字是等于add还是check

如果是add:则判断第三个数组是否在url_history里,没有的话则添加进去

如果是check:则判断第三个数组是否在url_history里,有的话从url_history移除。

如果数组长度不等于3 ,则判断第二个数组的值是否在query_history里。有的话从query_history移除。

也就是说利用漏洞请求http://ip:8088/add/randomstrnslookup randomstr IP ,ip就是巡风的地址。

然后验证 http://ip:8088/randomstrhttp://ip:8088/check/randomstr是否返回了'yes',是的话就存在漏洞。

用个例子来说明,如Apache Tika中的命令注入(CVE-2018-1335)漏洞。该漏洞无回显,所以写巡风验证POC十分困难。但利用该辅助功能就很方便了。

搭建环境过程在这里:https://github.com/zhengjim/loophole/tree/master/CVE-2018-1335

我们首先利用漏洞命令执行nslookup zhengjim_test 127.0.0.1(zhengjim_test自行取名,127.0.0.1为巡风地址)。

然后我们只要验证http://127.0.0.1:8088/zhengjim_test是否返回YES就行了

误判率还低,因为首先地址是自己定义的,而且返回完YES后则移除了,保存不会重复。

与https://github.com/LandGrey/dnstricker功能类似

dnstricker监听本地53/udp端口,用以模拟解析/响应dns请求,导引流量;可以将所有请求自己子域名的dns请求记录下来,用来确定某处是否存在漏洞;

总结

该功能适用于那些无回显的漏洞,如无回显的代码执行漏洞,无回显的命令执行漏洞,无回显的sql注入漏洞,无回显的XML实体注入,与dnslog功能相似。使我们更好的写POC。感谢ysrc开源~

巡风源码阅读与分析---Aider.py的更多相关文章

  1. 巡风源码阅读与分析---view.py

    巡风xunfeng----巡风源码阅读与分析 巡风是一款适用于企业内网的漏洞快速应急.巡航扫描系统,通过搜索功能可清晰的了解内部网络资产分布情况,并且可指定漏洞插件对搜索结果进行快速漏洞检测并输出结果 ...

  2. 巡风源码阅读与分析---nascan.py

    Nascan是巡风主要是做目标的资产识别(信息收集). nascan.py 文件位于 nascan/nascan.py # coding:utf-8 # author:wolf@YSRC import ...

  3. 巡风源码阅读与分析--querylogic函数

    文件位置:views/lib/QueryLogic.py Querylogic() # 搜索逻辑 def querylogic(list): query = {} if len(list) > ...

  4. 巡风源码阅读与分析---AddPlugin()方法

    文件位置:view/view.py AddPlugin() # 新增插件异步 @app.route('/addplugin', methods=['get', 'post']) @logincheck ...

  5. (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析

    (3.4)mysql基础深入——mysql.server启动脚本源码阅读与分析 my.server主要分为3大部分 [1]变量初始化部分 [2]函数声明部分 [3]具体执行部分 #!/bin/sh # ...

  6. HTTP请求库——axios源码阅读与分析

    概述 在前端开发过程中,我们经常会遇到需要发送异步请求的情况.而使用一个功能齐全,接口完善的HTTP请求库,能够在很大程度上减少我们的开发成本,提高我们的开发效率. axios是一个在近些年来非常火的 ...

  7. 如何实现一个HTTP请求库——axios源码阅读与分析 JavaScript

    概述 在前端开发过程中,我们经常会遇到需要发送异步请求的情况.而使用一个功能齐全,接口完善的HTTP请求库,能够在很大程度上减少我们的开发成本,提高我们的开发效率. axios是一个在近些年来非常火的 ...

  8. python2.7-巡风源码阅读

    推荐个脚本示例网站:https://www.programcreek.com/python/example/404/thread.start_new_thread,里面可以搜索函数在代码中的写法,只有 ...

  9. (原)NSQ源码阅读和分析(1)

    原文出处:https://www.cnblogs.com/lihaiping/p/12324371.html 本文记录自己在阅读和学习nsq源码的时候的一些学习笔记,主要目的是个人总结和方便后期查阅. ...

随机推荐

  1. 关于CSS定位属性 position 的使用

    CSS中一般通过浮动和定位来对标签进行位置操作.下面我们来讨论一下定位的用法和需要注意的地方. 1.首先,说一下position的几个属性值 (1)none属性值,这个是定义不进行定位,默认为不定位, ...

  2. python下如何安装.whl包?

    下载 .whl 包 先 pip install wheel 之后 pip install 包名字.whl 即可安装某模块包

  3. MySQL 在线更改 Schema 工具

    MySQL在线更改schema的工具很多,如Percona的pt-online-schema-change. Facebook的 OSC 和 LHM 等,但这些都是基于触发器(Trigger)的,今天 ...

  4. BZOJ_1858_[Scoi2010]序列操作_线段树

    BZOJ_1858_[Scoi2010]序列操作_线段树 Description lxhgww最近收到了一个01序列,序列里面包含了n个数,这些数要么是0,要么是1,现在对于这个序列有五种变换操作和询 ...

  5. MIP技术进展月报第2期: 数据绑定,异步脚本加速

    一. 功能更新 1. mip-bind 上线,实现复杂交互 MIP bind 双向绑定机制和组件上线,提供双向绑定的特性:能够允许页面实现数据驱动功能,开发者可以在任意场景修改数据,并驱动页面元素变动 ...

  6. re模块的方法总结

    re模块的方法总结 一,查找 1:match 匹配string 开头,成功返回Match object, 失败返回None,只匹配一个. 示例: s="abc221kelvin4774&qu ...

  7. 3.python词云图的生成

    安装库 pip install jieba wordcloud matplotlib 准备 txt文本 字体(simhei.ttf) 词云背景图片 代码 import matplotlib.pyplo ...

  8. 带你学习AOP框架之Aspect.Core[1]

    在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的 ...

  9. Python的垃圾回收机制(引用计数+标记清除+分代回收)

    一.写在前面: 我们都知道Python一种面向对象的脚本语言,对象是Python中非常重要的一个概念.在Python中数字是对象,字符串是对象,任何事物都是对象,而它们的核心就是一个结构体--PyOb ...

  10. NumPy 超详细教程(3):ndarray 的内部机理及高级迭代

    系列文章地址 NumPy 最详细教程(1):NumPy 数组 NumPy 超详细教程(2):数据类型 NumPy 超详细教程(3):ndarray 的内部机理及高级迭代 ndarray 对象的内部机理 ...