bit4 发布的文章

Teemo:域名收集及枚举工具

项目主页

https://github.com/bit4woo/Teemo

About teemo

域名收集及枚举工具

提莫(teemo)是个侦察兵,域名的收集如同渗透和漏洞挖掘的侦察,故命名为提莫(Teemo)!

该工具主要有三大模块:

利用搜索引擎:

  • baidu
  • so.com (360搜索)
  • google (需要代理,可能被block)
  • bing (使用cn.bing.com)
  • yahoo
  • yandex (可能被block,替代方案xml.yandex.com)
  • dogpile
  • exaland (可能被block)
  • ask (需要代理)
  • googleCSE (需要API key)

利用第三方站点:

  • Alex
  • Chaxunla (图形验证码)
  • netcraft
  • DNSDumpster
  • Virustotal
  • ThreatCrowd
  • CrtSearch
  • PassiveDNS
  • GooglCT
  • ILink
  • sitedossier
  • threatminer
  • Pgpsearch

利用枚举

基本使用

运行环境:python 2.7.*

  • 查看帮助:

    python teemo.py -h

  • 枚举指定域名(会使用搜索引擎和第三方站点模块):

    python teemo.py -d example.com

  • 使用代理地址(默认会使用config.py中的设置):

    python teemo.py -d example.com -x "http://127.0.0.1:9999"

  • 启用枚举模式:

    python teemo.py -b -d example.com

  • 将结果保存到指定文件(默认会根据config.py中的设置保存到以域名命名的文件中):

    python teemo.py -d example.com -o result.txt

  • 收集域名并扫描指定端口 :

    python teemo.py -d example.com -p 80,443

参考

参考以下优秀的工具修改而来:

Thanks for their sharing.

优缺点

为什么要修改,相对以上优秀工具有什么优缺点?

优点:

  • 使用的搜索引擎和第三方站点更全面,经过实际测试,发现收集的域名会更多。
  • 添加了代理的支持,像google,ask等可以通过指定代理地址去访问,个人使用google较多,所以这个对我很重要。
  • 使用搜索引擎的模块,会收集邮箱地址。

缺点:

  • 初始版本,bug很多。但后续会持续更新改进。欢迎提bug。

To Do

  • 接入打码平台
  • 域名有效性判断,端口扫描并记录--json格式(`{domain:{ip:127.0.0.1,ports:{80,443},cdn:{yes
    or no,具体是谁}}}domain`)
  • 泛解析,dns轮询相关
  • 优化config.py
  • 模糊匹配,例如包含"qq"的所有域名,比如qqimg.com
  • 搜索引擎模块,使用google hacking 搜索

Done

  • 添加多线程支持。
  • 添加www.so.com 360搜索引擎
  • 修复ask页面参数不正确问题
  • 优化代理参数设置
  • 优化正则表达式,去除以“-”开头的非法域名
  • 随机请求参数,减小被block几率
  • 优化搜索引擎部分参数配置
  • 修复dnsdumpter访问出错问题

相关思维导图

687474703a2f2f692e696d6775722e636f6d2f5155747a6e6c4b2e706e67.png

免责声明

作者公开该工具代码,出于技术分享的目的,请不要用于非法用途。 任何使用该工具及代码,或者修改后的工具及代码,造成的任何问题,与本作者无关,特此声明!!!

BurpSuite和Fiddler串联使用解决App测试漏包和速度慢的问题

前言

没什么技术含量,就是一个小tips,请轻喷,大侠们有什么更好的也欢迎分享讨论。

问题

在实际的测试过程中,我一直使用BurpSuite,但是在使用它进行Android App的测试时发现有两种不好的情况:

  1. 使用了burp的代理后,响应速度明显降低,有的App对响应时间有要求,待到响应包返回后,页面已经显示超时,无法完成测试。
  2. 第二种情况更是糟糕,就是出现抓不到包的情况。在MottonIN的群也有小伙伴反映过相同的情况;官方论坛也有人遇到:http://forum.portswigger.net/thread/1115

解决方案

经过反复尝试,找到了如下的解决方法:

手机wifi设置代理 —–>Fiddler —->BurpSuite —–>互联网(或者测试环境网络)

原理说明

肯定有个疑问,只用burp都慢了,双重代理岂不是更慢?

答案是非也,串联速度会比只用burp快很多,为什么呢?这可能(我不能保证说得是对的,只是自己的猜测)和2个工具的抓包机制有关了。

Fidder 只是http和https的代理而且是用C#写出来的,而BurpSuite是从底层包中解析http流量,而且是Java写的,这么一对比,单独使用2者的时候,Fidder比BurpSuite也就很正常。

为啥串联还快呢,当Fidder的流量走BurpSuite的时候,没有流量解析的过程,只是单纯的转发,少了最耗时的步骤。总体而言还是比单独使用BurpSuite的时候快很多。

详细配置

1.Fidder和BurpSuite的配置

监听8888端口,手机上的代理地址就设置这个

pic1.png

如果要抓https的包,就要如下配置。

pic2.png

gateway的配置,设置的内容是burpsuite的代理地址,表示流量经过Fiddler后,转发到Burp的代理地址

pic3.png

pic4.png

2.手机上的配置:

设置代理地址;安装Fiddler的证书。

类似案例:

比如,sql注入的时候想要看到sqlmap使用了哪些payload,就可以使用proxy参数。

pic5.png

注意:

Fiddler 默认是不会使用系统hosts 的,而Burpsuite默认是会使用的,所以呢,串联后是会使用的。如果你的测试需要绑定hosts,请注意。

BurpSuite插件开发Tips:请求响应参数的AES加解密

缘由

自己使用burp进行测试的过程中遇到好些接口是有sign的,如果修改了请求参数都需要重新计算sign值,所以有用python实现过一个简单的插件,来自动计算sign值,以达到和普通接口测试一样方便的效果。

后来,好基友在做一个APP的测试的时候,发现有类似的问题,接口的所有参数都有使用AES加密,返回也是一样。他通过逆向获得了加密的算法,我们就通过如下的插件实现了自动加解密的过程。在整个过程中有一点点收获,现分享出来。

具体bug请移步:Zealer_android客户端安全检测(从脱壳到burp自动加解密插件案例/SQL注入/逻辑漏洞/附AES加解密脚本POC)

代码

闲话少说,上代码,BurpExtender主类代码如下,进行了较为详细的注释。AES算法类的参考链接:

code:

收获和建议

1.尽量使用java、避免python

我平常python用得比较多的,之前也用python写过几个简单插件。但是在开发burp插件的时候,发现还是Java更合适。上面的这个插件,最初就是用py实现的,但是,当这个py文件调了python的其他类,如下图。通过Jython去解析执行,遇到pyd文件就无法进行下去了,因为pyd是C写的,Jython是无法使用C写的模块的。burp本事是Java写的,使用Java去开发插件兼容性最高,会少很多莫名其妙的错误。

14658104734594.png

下面这个链接对此有详细说明:

14658105549687.png

2.适当代码分离、方便测试

我会分别将插件的代码和AES算法的代码分别写在两个不同文件中。这样可以单独调试算法的代码,也可以让插件代码更简洁不易出错。因为插件的代码每修改一次都需要重新在burp中加载才可以看到效果,不像一般的程序在IDE中就可以调试,所以个人认为这样比较好。

14658107055030.png

3.向优秀插件学习

插件代码的结构基本是固定的。比如,如果想要写一个对http请求和响应进行操作的插件,那么基本上如图的这段代码是可以直接copy使用的,下图标红的几个方法就都是必须的。我想我们大多数时候都是在对http的包进行处理。有了大的框架之后,再进行修改相对会容易很多。所以,如果你想写一个什么样的插件,你完全可以去找一个类似的插件,看他的代码,copy他的代码,改他的代码(比如我的,呵呵)。

14658110843982.png

你要问怎么样查看已有插件的代码?怎样查API文档?

首先安装一个已有插件。

14658112007656.png

找到burp所在路径下的bapps目录,里面就是你安装了的插件。

14658112112250.png

14658112207654.png

拖到JD-Gui中就可以看代码了,这种一般是不会做混淆的,至少我还没发现~。Py的就更不用说了,直接文件右键打打开。

14658112315306.png

4.查找并阅读官方API

关于API文档,我是通过溯源的方法,对于0基础的读者比较实用。比如我的目的是加密各个参数,那么首先要获取请求中的参数。我先去API库中搜索关键词parameter,可以找到多个相关方法,通过对比,我确定List<IParameter> getParameters();是我需要的。找到这个方法后,查看它的参数、返回值类型、所属的类这三个关键因素。它属于IRequestInfo类,只有IRequestInfo类型的对象才可以调用它,那么,有哪些方法会返回这个类型的对象呢?再去找那些方法可以返回这个类型的方法。依次类推,可以知道需要使用哪些方法,哪些类,就能梳理清除大致的思路了。

14658115701726.png

5.插件代码的套路

14658110843982.png

1.public class BurpExtender implements IBurpExtender, IHttpListener

tl.png

2.public class BurpExtender implements IBurpExtender, IHttpListener

tl2.png

3.http请求的常规处理逻辑

processHttpMessage 中需要做的事

  • Burp中最初拿到的东西就是 IHttpRequestResponse messageInfo
  • 把它变成我们认识的数据包格式:

    analyzeRequest = helpers.analyzeRequest(messageInfo);

burptips3.png

burptips4.png

获取各种需要处理的对象:参数、header、body,对象不同,方法有所差别

tl5.png

修改各对象并更新到最终的数据包

6.图形界面怎么搞

1.安装windowbuilder插件

教程:

http://jingyan.baidu.com/article/4d58d54113bfdd9dd5e9c045.html

exe.png

通过拖拽来实现图形解密的设计

exe1.png

exe2.png

为按钮添加点击事件

2.BurpExtender类中增加 Itab IContextMenuFactory

exe3.png

exe4.png

  • 这两个类接口也有他们必须实现的方法,否则看不到图形界面 String getTabCaption(); Component
  • getUiComponent(); –之前踩过的大坑
  • IContextMenuFactory —-对应的是那个“send to”功能

7.关于调试和移植

不能在IDE中直接调试,只能导出jar包,通过burp调用才能看到效果。 ———–所以编写过程尽量多使用输出排查错误。

图形界面的编写可以在IDE中调试完成后再移植到burp中,但是移植到burp需要修改一些地方。

exe5.png

项目主页

BurpSuite插件分享:图形化重算sign和参数加解密插件(更新2.2版本)

参考文档汇总

向先行者致敬,让我们少走弯路。

Java篇:

Python篇:

BurpSuite插件分享:图形化重算sign和参数加解密插件

0x00 前言

学习burp插件开发的一些小收获:

BurpSuite插件开发Tips:请求响应参数的AES加解密

后来断断续续尝试写了图形化的版本,也对纯代码版本进行了改进,现做简单描述分享给大家,链接在末尾。

0x01 工具介绍

适用场景:

有些App产生的请求有对参数进行加密处理或者添加sign字段,导致不能直接判断参数内容和修改参数值。
在知道具体算法的前提下,该插件可以实现请求参数的自动加解密操作(Para Encrypter)、在修改参数后自动重新计算sign(Resign)。

前提条件:

需要知道具体的签名或者加解密算法。这可能需要逆向或者其他手段去获取。

插件特性:

  • 可以控制插件生效的组件,包括proxy、scanner、intruder、repeater。
  • 可以控制插件生效的域名和参数。
  • 目前Resign支持md5的sign算法,Para Encrypter支持AES、Base64。
  • 支持右键”发送到”插件的功能。

0x02 界面和使用

Resign界面展示及说明

bp.png

Resign使用演示

resign.gif

Para Encrypter界面展示及说明

bp1.png

Para Encrypter使用演示

和resign插件类似,不再重复

与SQLMAP的配合

sqlmap.py -u "http://www.test.com/a.php?id=1" --proxy=http://127.0.0.1:8080 --skip-urlencode

通过以上方法,sqlmap的请求也可以通过burp进行进行处理,好基友有通过此方法成功找到过SQL注入。–proxy参数就是burp的代理地址;–skip-urlencode是为了保证在burp对参数进行处理前参数还是原始明文,没有经过URL编码。

0x03 纯代码版本

其实我个人是更倾向使用这个版本的,它的灵活性是图像版本没有办法比的,可以自由修改代码然后从新打包使用。

熟悉Java的朋友建议使用该版本,进行自己的修改和调整。源码中都有较为详细的注释,欢迎fork阅读。

0x04 Change Log

  • 增加SHA1算法支持;
  • 增加自定义排序支持;
  • 增加支持多行删除;
  • 增加字符拼接控制:是否只使用value,指定拼接连接符;
  • 调整插件生效范围策略:主要针对单个请求(就像burp的原生组件一样),也就是说对于每个单独的请求都需从新配置。但是如果同域下其他接口的签名参数和方法完全一样,则可以不用重新配置;
  • 修复排序后删除异常的问题;
  • 修复“发送到 Resign”中的URL编码问题。
  • 支持时间戳形式的参数值,通过获取当前系统时间实现。
  • 优化了log输出格式。

0x04 源码和下载

在github上分享相应的源码:

使用中如有问题,欢迎在github上给我提issue。