MisConfig HTTP Proxy Scanner:发现配置不当的HTTP网关(正反向代理),突破边界访问企业内网应用

MisConfig HTTP Proxy Scanner是一个web漏洞扫描器,用于扫描发现配置不当的HTTP正反代理:

  • 错误配置的外网反向代理,内网系统被意外暴露到外网
  • 错误配置的外网正向代理,攻击者可以暴力枚举内网域名,访问内网的生产运维系统、办公系统

本项目地址:https://github.com/lijiejie/MisConfig_HTTP_Proxy_Scanner

本工具介绍: https://mp.weixin.qq.com/s/hnv4HUntZtApjNCbhv34ow

开源DNSLog工具eyes.sh

背景

eyes.sh 是一个用来辅助安全测试和漏扫工具的DNS Log / HTTP Log检测工具,基于 BugScan DNSLog 优化。 感谢四叶草安全、感谢坤哥 🙂 。

  • 公司内部扫描器每天产生数百万次DNS Log接口调用
  • 因为某些原因,DNSLog服务部署在低配置的海外VPS,成为了扫描系统的一个瓶颈

在这个背景之下,我们对DNSLog服务做了一些简单的优化。

增强的功能

  • 更加友好的分页、删除、查看指定IP,增加搜索功能,增加显示IP定位、显示Request Headers、捕获Request Body
  • 支持监控新记录自动刷新(可以关键词过滤,关注特定目标或特定漏洞)
  • 支持DNS重绑定
  • 接口优化,增加支持Group DNS查询,减少扫描器的接口调用次数
    • 例如,扫描器先以 (主机名+任务ID)做DNS前缀,投递完所有payloads,任务结束时,通过单个查询,检查是否有漏洞被触发
  • API接口域名TTL为0,导致过多无意义查询,修正为1200
    • 原来每次API请求都将产生额外的DNS查询
  • 增加了注册、一键生成随机域名、简单管理开关、简单登录锁定等
  • 数据库优化,后端使用MySQL ,增加索引,数百万记录下查询性能较好

有兴趣的同学可以部署试试:   

https://github.com/lijiejie/eyes.sh

http://eyes.sh    

  • 演示账号 demo / demo@pass,请注意,该账号删除功能无效
  • 也可以在登录页面中选择 创建随机ID并登录
DNSLog
Web Log

关注我的微信公众号,获取更多扫描器代码

BugScan DNSLog中的一处文件遍历漏洞

https://github.com/BugScanTeam/DNSLog 是一个漏洞检测用的 DNSLog 程序。目前这个项目已经归档,不再更新了。

在其DNS解析的代码中,存在如下片段(可能是开发在测试的时候无意间写入)

https://github.com/BugScanTeam/DNSLog/blob/master/dnslog/zoneresolver.py

if qtype == 'TXT':
    txtpath = os.path.join(tempfile.gettempdir(), str(qname).lower())
    if os.path.isfile(txtpath):
	reply.add_answer(
	    RR(qname, QTYPE.TXT, rdata=TXT(open(txtpath).read().strip())))

可以看到,程序会尝试读取临时文件夹下以qname参数命名的文件,返回TXT记录。然而,qname参数是攻击者可控的的任意字符串。攻击者可以通过 .. 来跨目录,实现读取任意文件。

不过,分析后发现这里利用条件较为苛刻: 首先,命令行工具不允许出现两个点 .. 这样的空Label畸形DNS查询(攻击者可以自己编程发送畸形请求)。同时,发现qname其实是一个dnslib.label.DNSLabel对象, str(qname) 会自动在字符串后面追加一个分隔符 “.” , 这是TXT记录常见的字符串表示。 见 dnslib\label.py

def __str__(self):
    return ".".join([ s.decode() for s in self.label ]) + "."

上述str函数让这个文件读取漏洞的利用价值大打折扣,因为在python的open函数中,无法通过像\x00截断、回车换行符截断,或者是web server用问号带参数的形式,实现截断掉多余的点号。 但是,在Windows下,读取文件的时候,多一个点号也是能读取成功的。 也即: 读 C:\1.txt. 能直接读取到 C:\1.txt 的内容。 所以,虽然是一个鸡肋漏洞,但还是可以成功演示其利用过程。已知在我的Windows系统中, 存在 C:\InstallConfig.ini,编写如下利用代码:

import dns.query


qname = dns.name.Name(('.', './', './', './', './', './', './', './', './InstallConfig.ini'))
_qname = qname.concatenate(dns.name.root)
request = dns.message.make_query(_qname, 'TXT', 1)
request.use_edns(-1, 0, 0)
response = dns.query.udp(request, '127.0.0.1', 10.0, 53, source=None, source_port=0)
print(response)
Windows读取C:\ 文件

如图所示,成功读取到C:\InstallConfig.ini 的内容。 [Install] 后面的内容为该文件内容。

下面示例在Linux系统下读取文件。 为了证明,创建一个 /test.txt. 文件,写入一段文字。改变上述代码中的文件路径

qname = dns.name.Name(('./', './', './', './', './', './', './', './test.txt'))

如图所示,成功读取了 /test.txt. 文件的内容。

可见,文件读取漏洞存在,但因为str函数的表示,让漏洞利用价值较低。 在Windows下可以读取更多文件,但Linux下无法截断点号,暂时只能读取点号. 结尾的文件。

招聘安全服务开发工程师 – 北京

爱奇艺安全团队在北京招聘 安全服务开发工程师1名

主要负责公司内部安全服务平台的开发和优化:SIEM、态势感知、入侵检测、堡垒机、扫描平台等。   欢迎投递简历!   lijiejie[at]qiyi.com

 

要求:
1.  熟练掌握Python,熟悉Django等web框架。 了解AngularJS等前端框架

2. 熟悉 Linux 操作系统, 熟悉常见算法和数据结构

3. 熟练使用MySQL,掌握查询优化; 熟练使用MongoDB

4. 熟悉RabbitMQ/ActiveMQ/RocketMQ、Redis、Kafka 等消息中间件,了解Elasticsearch,了解Docker

5. 有安全攻防经验优先、有海量数据处理和分析经验优先

 

Struts2-045漏洞批量扫描工具

一个 Struts2-045漏洞批量扫描工具

https://github.com/lijiejie/struts2_045_scan

Requirements

pip install requests

Usage

usage: scan.py [options]

Struts2-045 Scanner. By LiJieJie (https://www.lijiejie.com)

optional arguments:
  -h, --help  show this help message and exit
  -f File     New line delimited targets from File
  -t THREADS  Num of scan threads, 100 by default

Screenshot