之前写过一遍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. 让Virtualbox复制出的虚拟机联网

    http://www.williamsang.com/archives/215.html vi /etc/udev/rules.d/70-persistent-net.rules 注释掉eth0的相关 ...

  2. 5.两分钟让你明白app后端有啥用

    app后端,也称为app后台,称呼不一样,但指的是同一个东西. 我一直都以app后端有啥用这个问题不用解释.但在网络上,有准备进行app创业的网友(是从传统行业过来的)问过这个问题,我这里就以app后 ...

  3. hibernate入门-基本配置及简单的crud操作

    框架来说主要是需要写大量的配置文件,hibernate相比mybatis来说更强大,移植性更好: 1.类和数据库的映射配置:配置文件命名一般--类名.hbm.xml (user.hbm.xml),与实 ...

  4. 【dfs判负环】BZOJ1489: [HNOI2009]最小圈

    Description 找出一个平均边权最小的圈. Solution 经典问题,二分答案判断有无负环. 但数据范围大,普通spfa会超时,于是用dfs判负环(快多了). 思路是dis设为0,枚举每个点 ...

  5. java.util.Date 与 java.sql.Date 之间的转换

    SimpleDateFormat sdf = new SimpleDateFormat("yy-MM-dd HH:mm:ss"); String dateStr = sdf.for ...

  6. (5)STM32使用HAL库实现串口通讯——实战操作

    功能需求: (1)对接收的字符串原样返回(每10个字符一次). (2)发送一个字符串完成后改变LED的状态. 1.创建工程 使用的是F407Discovery,4个LED对应PD12-PD14. (1 ...

  7. Description Resource Path Location Type Cannot change version of project facet Dynamic Web Module to 2.3.

    报错信息:Description Resource Path Location Type Cannot change version of project facet Dynamic Web Modu ...

  8. 【SAP业务模式】之STO(二):系统配置

    本篇博文开始讲述STO业务模式的配置! 一.定义发货工厂的装运数据: 目录:SPRO-物料管理-采购-采购订单-设置库存调拨订单-定义工厂的装运数据 定义发货工厂的装运数据: 为收货工厂分配客户代码: ...

  9. python接口自动化(二十五)--unittest断言——下(详解)

    简介 本篇还是回归到我们最初始的话题,想必大家都忘记了,没关系看这里:传送门  没错最初的话题就是登录,由于博客园的登录机制改变了,本篇以我找到的开源免费的登录API为案例,结合 unittest 框 ...

  10. RK3399配置笔记

    1. adb shell 默认超级管理员 在build/core/main.mk下将ADDITIONAL_DEFAULT_PROPERTIES += ro.secure=1改成ADDITIONAL_D ...