分类 SecToolkit 下的文章

一个半自动化命令注入漏洞Fuzz工具

1. OCIFT是什么

一个半自动化命令注入漏洞Fuzz工具(One Semi-automation command injection vulnerability Fuzz tool)简写为:OCIFT

2. OCIFT有什么用

这是一种半自动化的黑盒测试工具,它可以帮助渗透测试人员或代码审计人员在愉快的上网的同时,深度挖掘目标应用系统存在的命令注入漏洞。

OCIFT有什么特点

  • Payload基于Commix生成方式修改而来(需要持续完善).
  • 基于浏览器代理的半自动化Fuzz.
  • 多线程Fuzz速度快,不影响正常浏览器访问使用.
  • 支持设置白名单限制Fuzz范围.
  • 支持设置黑名单避免带来不必要的麻烦.
  • 支持DNSLog辅助验证

4. 实现思路

基于Tornado的实现一个代理服务器,解析GET/POST请求提取Fuzz点,带入payload进行Fuzz测试。

文件结构说明
         |____run.py 主程序入口
         |____dnslog.py DNSLog SDK
         |____fuzz.conf 配置文件
         |____fuzz.py Fuzz线程
         |____make_payload.py Payload生成器
         |____readme.md 说明文档

5.配置文件说明

  • 配置各个参数,以逗号分隔

    [initconfig]

  • 黑名单HOST-为了避免带来不必要的麻烦

    black_hosts =.gov,localhost,127.0.0.1,google,gstatic,cnzz.com,doubleclick,police,mil.cn,gov.cn,gov.com

  • 静态文件黑名单-这些不做Fuzz

    url_ext_black =.ico,.flv,.css,.jpg,.png,.jpeg,.gif,.pdf,.ss3,.txt,.rar,.zip,.avi,.mp4,.swf,.wmi,.exe,.mpeg

  • 白名单HOST-为了限制Fuzz的范围, 默认为空-表示对除黑名单范围外的所有地址进行Fuzz.

    white_site =qunar

  • 请求超时-限制每次Fuzz请求超时时间

    timeout =10

  • 我的DnsLog地址

    my_cloudeye =ano1qu2j.xfkxfk.com

  • 判断是够注入命令执行成功的关键字

    checkkeys =110586256,/bin/bash,nameserver,IPv4,Windows IP

  • 用于测试命令注入的基本命令

    base_command =cat /etc/resolv.conf,echo 110586256,cat /etc/passwd,ipconfig,ping CommandInj.{my_cloudeye},echo 110586256<nul

  • Fuzz线程数

    fuzz_count =20

  • fuzz的payload类型, 默认False-表示使用自定义的规则

    commix_payload_type = False

  • DnsLog登录会话ID,我用的xfkxfk牛的dnslog.xfkxfk.com

    dnslog_sessionid =q6wva2e3skg79vkdegra2bygft0d1

  • Your Domain

    custom_domain =a2fta2j

  • 记录成功结果的Log文件

    Logfile =rce_success_results.txt

6.如何使用

1.安装模块

pip install tornado pip install requests

2.根据自己需要完成文件fuzz.conf的配置

3.启用主程序

python run.py 8089 如下图:

687474703a2f2f7777772e636f6666656568622e636e2f7a625f75736572732f75706c6f61642f323031372f30342f32303137303430393030333434313134393136363932383136393639342e6a7067.jpg

4.设置浏览器代理 然后会自动开始Fuzz

687474703a2f2f7777772e636f6666656568622e636e2f7a625f75736572732f75706c6f61642f323031372f30342f32303137303430393030333332343134393136363932303432313932372e6a7067.jpg

7.总结

  • 基本实现了想要的半自动化Fuzz功能
  • payload还需要不断优化

Github地址:https://github.com/coffeehb/OCIFT

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

免责声明

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

利用Scapy造一个Passive DNS Collector 工具:Pdns_sniff

pdns_sniff是什么?

简单理解为一个记录你发起过的DNS请求的东西,利用了Passive DNS 思路,被动的记录发起过的DNS请求。

pdns_sniff有什么用?

利用这样的工具可以帮助我在愉快的上网的同时,轻松搜集到测试目标的各种子域名。

pdns_sniff原理是什么?

利用了python里的强大的scapy套件,运用它抓取,解析出DNS请求包从而得到各种域名。使用了mysql进行数据存储,利用了gevent协程进行并发进行数据包的分析和写入数据库(PS:刚学gevent,拿来用用。)

效果图

效果图一:数据库中记录1

20170205223502148630530254796.png

效果图二:数据库中记录2

20170205223524148630532412525.png

效果图三:工具输出记录

20170205223538148630533859265.png

效果图四:使用方法

20170205223434148630527450376.jpeg

需要安装的三方库

  • gevent
  • scapy
  • MySQLdb

需要修改的数据库配置

大概在第29行

conn = mysql.connect(user='root', passwd='yourpassword', host='127.0.0.1', db='dnslogsDB')

pdns_sniff的相关代码

https://github.com/coffeehb/tools/tree/master/pdns_sniff

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。

灵活布置、可二次开发的乌云公开漏洞及知识库搜索

感谢hanc00l爬取了wooyun的网页,才使乌云关闭后,大家依旧可以访问以前的漏洞库、知识库。hanc00l发布了基于flask或者torndo的乌云公开漏洞、知识库搜索的github项目,同时发布了已经配置好的虚拟机,允许大家直接把乌云搭建在了本地。

为了方便的在本地进行乌云搜索,我准备把乌云搜索搭建在树莓派上。但是,hanc00l使用的数据库是mangodb,总数据在6GB左右。32位的mangodb支持的总共数据大小最大是2GB,而我的树莓派正是32位,所以我没办法在树莓派上布置。于是利用静态的乌云漏洞库、知识库,我自己建立了数据库、搜索页面,实现了可在apache、nginx等上布置,基于mysql数据库的乌云知识库、漏洞库搜索项目。

我的项目使用python依次处理静态页面,用正则抽取出信息再批量插入数据库;之后又写了个php,实现了对数据库的搜索。

二.python的经验分享

我在python中利用的扩展库是BeautifulSoup与MySQLdb。关于这两个库的介绍有很多,下面我主要介绍下我对这两个库的操作。

1)beautifulsoup的使用

from bs4 import BeautifulSoup     #引用库

soup=BeautifulSoup(html,"html.parser")       #创建BeautifulSoup对象,html为目标

corps=soup.find_all('p',class_='words')      #从对象中查找类名为words的p的标签

大家可以输出一下试试

2)MySQLdb的使用

import MySQLdb    #引用库

try:   #错误处理

        conn=MySQLdb.connect(host='localhost',port=3306,user='root',passwd='',db='wooyun',charset='utf8')     #建立连接,host主机、port端口(默认3306)、user用户、passwd密码、db操作的库、charset字符编码

        cur=conn.cursor()  #获取操作游标

        reload(sys)

        sys.setdefaultencoding('utf-8')   #设置编码

        tmp=(title1,date1,author1[0],type1[0],corp1[0],docs)  #要插入的数组

        cur.execute("INSERT INTO `bugs`(`title`,`dates`,`author`,`type`,`corp`,`doc`) VALUES(%s,%s,%s,%s,%s,%s)",tmp)    #插入数据库

        conn.commit()    #提交操作,插入时不可省

        cur.close()    

        conn.close()    #关闭连接,释放资源

except MySQLdb.Error,e:

         print "Mysql Error %d: %s" % (e.args[0], e.args[1])    #如果出错,输出错误

对于mysql不是很熟悉的同学如果有phpmyadmin的话可以在phpmyadmin中操作一下数据库,可以预览mysql语句。也可以在mysql命令行中执行语句尝试。

三.php的经验分享

虽然以前一直会php和css,但是这是第一次真正写一个动态页面。

首先对参数进行过滤。判断是否为整数数字:

if(is_numeric($_GET['page'])&&is_int($_GET['page']+0)){

        #code

    }

php中标签的输出是这样的!

echo "<p style=\"display:inline-block;\">haha</p>";

bootstrap很好用!

推荐链接:

bootstarap基本css样式;

bootstarp组件。

php对数据库的处理:

现在版本的php不再推荐MYSQL函数了,建议使用PDO或者mysqli

本来想使用pdo的,想感受一下预处理。但是pdo会对参数中的某些字符进行转义。无论我怎么处理都会报错,最终我决定使用mysqli了。

//mysql建立连接 

$db=new mysqli('localhost','root','','wooyun'); //localhost:3307

//sql对象错误检查 

if(mysqli_connect_errno()){ 

echo '<br>Error:Please try again later.'; 

exit(); 
}

参数如上,不解释了。host有两种方式,默认端口是localhost;指定端口是localhost:3307

$query0="SELECT count(*) FROM `".$kind."` WHERE `title` LIKE '%".$keywords."%'";  #mysql语句

$num=$db->query($query0);   #执行该语句

$row=$num->fetch_row();    #取得结果

四.后记

在课业之余用了10天时间搭建完成,见识了很多扩展,很有帮助。

我的新浪微博:http://weibo.com/grt1st

项目github地址:https://github.com/grt1st/wooyun_search