1、找到靶机ip:192.168.162.133
nmap -sn 192.168.162.0/24
2、扫描靶机端口,发现开放22、80和8080端口
┌──(root💀cracer)-[~/snakeoil]
└─# nmap -p- -A 192.168.162.133 3 ⚙
Starting Nmap 7.91 ( https://nmap.org )
Nmap scan report for 192.168.162.133
Host is up (0.00065s latency).
Not shown: 65532 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.9p1 Debian 10+deb10u2 (protocol 2.0)
| ssh-hostkey:
| 2048 73:a4:8f:94:a2:20:68:50:5a:ae:e1:d3:60:8d:ff:55 (RSA)
| 256 f3:1b:d8:c3:0c:3f:5e:6b:ac:99:52:80:7b:d6:b6:e7 (ECDSA)
|_ 256 ea:61:64:b6:3b:d3:84:01:50:d8:1a:ab:38:29:12:e1 (ED25519)
80/tcp open http nginx 1.14.2
|_http-server-header: nginx/1.14.2
|_http-title: Welcome to SNAKEOIL!
8080/tcp open http nginx 1.14.2
|_http-open-proxy: Proxy might be redirecting requests
|_http-server-header: nginx/1.14.2
|_http-title: Welcome to Good Tech Inc.'s Snake Oil Project
MAC Address: 00:0C:29:05:FB:60 (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.65 ms 192.168.162.133
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 20.83 seconds
3、访问80端口,首页是一个默认页面,没什么有用信息,访问8080端口
三个链接的信息如下
第三个给了个网址https://flask-jwt-extended.readthedocs.io/en/stable/options/,访问之后发现是flask和jwt的一些参数设置,暂时不知道有什么用,先放着,接着扫描目录
4、(1)访问users目录,得到一个用户名和密文密码,反解不了,先放着
(2)registration猜测是注册页面,访问registration路径,显示错误的访问方法
改为post访问,提示缺少username
加上username又提示缺少password
加上password提示注册成功,可以在users页面看到
(3)接着访问login页面进行登录,同样的操作,可以直接把上面那个包的registration改为login,提示登陆成功,并且返回了同样的access_token,这是一个类似于登录后cookie值用来认证的一个东西
(4)访问secret路径提示Internal Server Error,先放着,访问run路径,也是要改成post,访问后提示要url参数
注意这里的请求体要用json格式,访问后提示要secret key
这里猜测应该还是得访问到secret页面的东西,尝试登录之后访问,那就得带上之前的access_token值进行访问,在之前给的网址中找到一个cookie中的字段access_token_cookie用来保存access_token值
重复步骤(3)得到access_token值
在请求包中加上Cookie,键值对为access_token_cookie和我们上面获得的access_token值,成功得到secret_key值
然后再回到run页面,加上我们刚刚获得的secret_key,成功得到信息
(5)拿这个开头的信息去查一下发现是curl执行的统计信息,尝试命令注入,发现成功返回信息
尝试使用bash和python等命令反弹shell时提示命令被ban了
于是查看app.py文件查看到底禁掉了哪些命令
关键代码如下:
if "bash" in req_json["url"]:
abort(400, description="Banned command!")
if "python" in req_json["url"]:
abort(400, description="Banned command!")
if "/dev/tcp" in req_json["url"]:
abort(400, description="Banned command!")
if "nc" in req_json["url"]:
abort(400, description="Banned command!")
if "mkfifo" in req_json["url"]:
abort(400, description="Banned command!")
if "php" in req_json["url"]:
abort(400, description="Banned command!")
在本地新建一个shell.sh文件写入一句话,使用python3搭建个简易的web服务器,开启监听,然后使用wget下载到靶机上,给777权限,运行,成功反弹shell,python3提权到tty
5、使用sudo -l发现可以使用root身份执行任意命令,但是需要patrick的密码,之前查看app.py文件的时候发现两个可疑的密码
进行尝试,成功使用NOreasonableDOUBTthisPASSWORDisGOOD密码进行登录,获得root权限
6、最后补上两个flag
patrick家目录下的local.txt
root家目录下的proof.txt