专栏首页漫流砂SNMP 漏洞分析

SNMP 漏洞分析

“ 之前进行了服务扫描,对于hasee得到的结果主要就是80端口的http服务,似乎攻击面被局限在了web渗透上,这样就太不全面了,接下来的几篇文章我会针对常见的服务进行深入分析攻击手段”


SNMP 扫描

Simple Network Management Protocol 简单网络管理协议

通过SNMP 协议可以获取到几乎服务器运行的全部状况(cpu使用情况,内存占用率,硬盘使用情况等),因此一般被用来监控服务器的运行状况

SNMP 使用UDP协议,因为UDP协议效率较高,用它来实现网络管理不会太多地增大网络负荷

在大范围管理网络的时候这个协议显得尤为重要,还有很多路由设备中采用SNMP协议来进行流量查看管理。

SNMP Community String

这个是snmp协议的中一个类似密码的配置项,正是因为很多管理员没有配置这个选项才导致严重的信息泄漏,甚至被攻陷服务器

Windows 和Linux中默认的值是 public

Public 的权限可以查询任意信息

除此之外还有 private ,private有写的权限,可以直接修改配置文件,甚至可以启动一个进程

MIB Tree

MIB Tree 是一个以树状来定义的信息管理库,不同的厂商可能会定义自己的MiB库,同时国际标准化组织也规定了一套规范

Port

SNMP 分为客户端和服务器端

我们使用客户端对服务器进行监控

客户端端口 162

服务器端口 161

Version

目前snmp有三个版本 V1,V2c,V3

前两个版本应用较广,遗憾的是缺乏加密机制,导致信息可以被嗅探;同时缺乏一个较为完善的身份验证机制

V3版本中完善了以上的这些缺陷

这里我就自己在本地win7搭建了一个SNMP的服务器


onesixtyone

onesixtyone 192.168..1.1 public

可以看到我配置的Community String 是ita-cat,所以我们扫描出现的结果是这样,说明并没有采用默认配置(win7默认配置中并没有用户,且默认只允许本地连接)

我们用shodan在互联网上随便找一个

结果对比一下

可以看出这个是存在默认口令的路由设备,可以任意我们查询了

如果此时不是默认CommunityString ,我们可以采用爆破的方式来进行

onesixtyone 192.168.1.1 -c password.txt -w 100

正好之前整理了字典,这回就不大动干戈了,用一个小字典吧

可以看到ita-cat这个Community String是正确的

snmpwalk

snmpwalk 192.168.1.133 -c public -v 2c

可以看出查出了关于这个路由设备的几乎所有信息(后面还有巨多),前面的数字就是MIBTree

如果想要查询特定的信息可以指定oid

snmpwalk 192.168.1.1 -c public -v 11.3.6.1.4.1.25506.2.12.1.1.1

有三个通常包含账号密码信息的oid是

1.3.6.1.4.1.2011.5.2.1.10.1

1.3.6.1.4.1.2011.10.2.12.1.1.1

1.3.6.1.4.1.25506.2.12.1.1.1

snmpwalk 可以看到相对来说更加详细的信息,稍有遗憾的是这些我们很难都记住,并不是很直观,而且snmpwalk似乎没有爆破密码的功能,或许它就是用来作为一个信息获取工具来使用的,后期的数据处理由调用方来进行

snmp-check

snmp-check –c public –v 2c 192.168.1.1

显示的信息更佳符合我们人工去查看,比较直观

我添加一个可写的CommunityString,看看这个工具的 –w 选项能不能识别出来

snmp-check –c public –v 2c –w 192.168.1.1

从结果看出是可写的!


StringBleed

CVE-2017-5135

这个CVE漏洞利用异常的简单,漏洞产生的原因就是个别产品身份验证有问题,无论我们提交什么CommunityString ,都会身份认证成功,对于这个漏洞的修补可以说是十分的糟糕,我刚刚还在shodan按照漏洞说明的产品们选择了几个进行测试,都成功了,而且其中大部分还具有写的权限。

目前受影响厂商和相关设备(78种型号设备)

漏洞说明 http://www.cnvd.org.cn/webinfo/show/4122

5352 —>Zoom Telephonics, Inc

BCW700J —> BN-Mux

BCW710J —> BN-Mux

BCW710J2 —> BN-Mux

C3000-100NAS —> Netgear

CBV734EW —> Castlenet

CBV38Z4EC —>CastleNet

CBV38Z4ECNIT —>CastleNet

CBW383G4J —>CastleNet

CBW38G4J —>CastleNet

CBW700N —> TEKNOTEL

CG2001-AN22A

CG2001—>UDBNA

CG2001—>UN2NA

CG2002 —>UN2NA

CG2200 —>UN2NA

CGD24G-100NAS —> Netgear

CGD24G-1CHNAS —> Netgear

CM5100 —> Netgear

CM5100-511 —> Netgear

CM-6300n —> Comtrend

DCX-3200 —> Arris

DDW2600 —> Ubee

DDW2602 —> Ubee

DG950A —> Arris

DPC2100 —> Cisco

DPC2320 —> Cisco

DPC2420 —> Cisco

DPC3928SL —> Cisco

DVW2108 —> Ubee

DVW2110 —> Ubee

DVW2117 —> Ubee

DWG849 —> Thomson

DWG850-4 —> Thomson

DWG855 —> Thomson

EPC2203 —> Cisco

EPC3212 —> Cisco

IB-8120 —>W21

IB-8120 —>W21E1

MNG2120J —>NET&SYS

MNG6200 —>NET&SYS

MNG6300 —>NET&SYS

SB5100 —> Motorola

SB5101 —> Motorola

SB5102 —> Motorola

SBG6580 —> Motorola

SBG900 —> Motorola

SBG901 —> Motorola

SBG941 —> Motorola

SVG1202 —> Motorola

SVG2501 —> Motorola

T60C926 —> Ambit

TC7110.AR —> Technicolor

TC7110.B —> Technicolor

TC7110.D —> Technicolor

TC7200.d1I —> Technicolor

TC7200.TH2v2 —> Technicolor

THG540 —> Thomson

THG541 —> Thomson

Tj715x —> Terayon

TM501A —> Arris

TM502B —> Arris

TM601A —> Arris

TM601B —> Arris

TM602A —> Arris

TM602B —> Arris

TM602G —> Arris

TWG850-4U —> Thomson

TWG870 —> Thomson

TWG870U —> Thomson

U10C019 —> Ubee

U10C037 —> Ubee

VM1700D —>Kaonmedia

WTM552G —> Arris

WTM652G —> Arris

DCM-704 —> D-Link

DCM-604 —> D-Link

DG950S—> Arris


经过以上方法应该我们可以获取读或者读写的权限,下一步我们开始考虑下一步的攻击

SNMP放大反射DoS 攻击

其实之前我有讲过关于DoS(拒绝服务攻击)的相关课程,在DoS 中有一种就是反射性DoS,原理上就是利用IP欺骗和发包与回包之间数据包的大小差距来进行的数据放大的一种攻击方法

比如我向一个SNMP服务器发送一个请求包,原地址写上我们要攻击的目标,此时SNMP就会返回数据包给目标,我们请求的数据包较小,而返回的数据包量巨大,可能会放大近20倍,从而实现此攻击。

结合刚刚介绍的漏洞,一个完美的DDoS方案就出来了,大家应该都懂吧!

或许哪天无聊我可能会写一个这样的脚本。

获取或者修改密码

在只读权限下,我们可以最基本的就是完整的路由信息,端口信息,进程信息,服务信息等,不过想要进一步对目标进行渗透才是我们想要的,华为的一些设备我们可以直接读取到明文或加密的密码,这样我们就可以直接登录了,这是比较顺利的,wooyun上有很多案例

可以参考

http://www.anquan.us/static/bugs/wooyun-2015-0137975.html

在读写的权限下,如果能够直接读到密码就不说了,大多数情况下还是不能读取到的,此时利用起来就十分的艰难了

目前互联网上也没有什么文章来介绍这方面,我针对获取的信息进行了以下思

1. 修改某一个属性,为我们以后的渗透做准备(比如将主机名改成sql注入语句等)

snmpset -On -v2c -c test 192.168.1.106iso.3.6.1.2.1.1.5.0 s Hack

修改过后在win7这边并没有看到变化,不知道是不是重起生效

我用mysql查询了一下,确实是没有变

现在我重新启动一下

可以看到还是没有变化,我们在查询一次,看看重启后是不是snmp的结果也变回来了

从结果可以看出并没有哈,用这个小实验可以看出一点,这里的修改只是改变了snmp查询时候的MIB库的内容,而不是对系统实质性的修改

那么刚才我打算修改后为了后期渗透调用的想法就失败了

2. 留着以后擦屁股时候用

目标系统的管理员或者使用snmp协议管理流量的路由设备可能会被我们修改的信息所蒙骗,即使发生了大流量洪峰也可能蒙混过关而不被察觉!

3. 对抗AV时候使用

在绕过WAF或者防病毒软件时候心里有数,提前做好免杀


最后分享两个自动化渗透的脚本

之前也说过,snmp协议多用于路由等设备中,说到这种设备,那么比较有名的就是华为和思科了

华为、HP、H3C

https://github.com/grutz/h3c-pt-tools/

思科

Cisc0wn

https://github.com/nccgroup/cisco-SNMP-enumeration

由于我没有相关设备,也不想去费时间去配置模拟器,大家可以用gns3 配置试一试,玩一玩

总结来说对于SNMP的一个渗透也就是这个地步了,虽然很难获取到shell,不过能够得到如此详细的信息对后面的渗透测试工作可是十分的有帮助。

-END-

本文分享自微信公众号 - 漫流砂(yidalidemao)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-07-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • FTP & VBScript & Powershell & Debug 远程传输

    之前我们说过FTP在非交互shell 下会出现没有办法输入密码,导致身份认证过程没有办法完整完成,这里我们就来介绍一下如何变通。

    意大利的猫
  • Linux 守护进程|应急响应

    通常我们都是通过以上两种方式来获得一个shell,之后运行程序的,此时我需要纠正一个概念,我们通常都说获得一个shell,本质上来说,我们获取了一个sessio...

    意大利的猫
  • 原创Python小脚本之备份扫描

    Python语言可以说是万金油的语言,在各种领域都有所建树,有Python安全的一位国外大神说过Python不可以进行系统编程,我理解为不适合,因为一切皆有可能...

    意大利的猫
  • EntityFrameWork连接多Db配置

      如题所示,EF作为微软主推的ORM工具,最新版本已经是7,说明有很多人在使用它做项目。在使用过程中,可能会连接不同的数据库,本文介绍的是连接SqlServe...

    用户1219352
  • DL | 语义分割原理与CNN架构变迁

    图像分割是根据图像内容对指定区域进行标记的计算机视觉任务。本文聚焦于语义分割任务,即在分割图中将同一类别的不同实例视为同一对象。作者将沿着该领域的研究脉络,说明...

    昱良
  • JavaScript网页全屏API

    在大多数的浏览器中都有实现网页全屏显示的功能,并且大部分浏览器实现全屏显示和退出全屏显示的快捷键通常是F11和Esc两个按键。如今,W3C已经制定了关于网页全屏...

    用户6167509
  • 网页全屏模式轻松掌握[局部元素全屏展示]

    我第一次对网页全屏模式有概念,是那种网页播放视频的全屏播 放的那种。感觉很强,前几个星期有个需求也是关于全屏模式的,接触之后才知道全屏模式并不神秘,是个很容易掌...

    OBKoro1
  • TensorFlow基本操作 实现卷积和池化

    之前已经提到过图像卷积的操作和意义,并且用OpenCV中的filter2D函数实现了一些例子。OpenCV中的filter2D函数仅仅是用一个卷积核去卷积单个的...

    小莹莹
  • 校招前几个月,如何高效地进行复习?

    距离明年春招还有三个多月的时间,很多想找实习和想参加补招的同学应该也都在忙着复习。今年的春招已结束,我在开始准备秋招了,也就是从4月份到7月份这段时间,我完成了...

    Java技术江湖
  • pandas使用之宽表变窄表的实现

    从医院数据库中导出了大量的体检数据,但体检数据表中,每一行代表某人某次体检的某一项体检的结果。目的想将每一个人的每一次体检结果作为一行存储,每一列为体检项。

    砸漏

扫码关注云+社区

领取腾讯云代金券