前言
在暑假没有什么事干就抽时间和队友做了一下De1ctf,对于小白来说还是比较难得。
SSRF ME
题目的hint
1 | hint for [SSRF Me]: flag is in ./flag.txt |
访问http://139.180.128.86/链接拿到源码如下:
1 | #! /usr/bin/env python |
阅读源码发现scan函数没有什么过滤可以进行SSRF
1 | def scan(param): |
发现题目过滤了常用的读取文件的协议gopher,file于是联想到hint要进行任意文件读取,可以用local_file:绕过读取文件
1 | def waf(param): |
我们要进行任意文件的读取首先要进行签名校验
1 | def checkSign(self): |
跟进getSign(),看到使用md5进行签名,其中secert_key = os.urandom(16)是固定长度的随机数。
1 | def getSign(action, param): |
可以进行hash长度扩展攻击,脚本如下:
1 | import hashpumpy |
还有一个非预期的解法脚本如下:
1 | import requests |