漏洞挖掘遇特殊URL参数解析逻辑,求识别后端技术栈及相关建议
识别方法
后端编程语言/框架识别
- 构造语法特征探针:在参数值中插入不同语言特有的内置变量、无危害函数表达式,通过返回内容判断执行结果:
- Python 探针:
users=["test", __import__("os").name],若返回内容包含posix/nt可判定为Python - Node.js 探针:
users=["test", process.version],若返回内容包含v开头的版本号(如v18.16.0)可判定为Node.js - PHP 探针:
users=["test", PHP_VERSION],若返回内容包含PHP版本号可判定为PHP - Ruby 探针:
users=["test", RUBY_VERSION],若返回内容包含Ruby版本号可判定为Ruby
- Python 探针:
- 利用错误信息泄露:传入语法非法的参数值(如
users=[、users={"a"}),观察返回的报错内容,若出现Traceback为Python、V8错误堆栈为Node.js、PHP格式报错信息为PHP,部分报错还会直接暴露所用Web框架 - 检查HTTP响应头:查看
Server、X-Powered-By等响应头字段,常见特征如X-Powered-By: Express对应Node.js生态、Server: gunicorn对应Python生态、X-Powered-By: PHP/xxx对应PHP
代码注入漏洞验证
先区分是标准JSON解析还是eval类动态执行,避免误判:
- 传入算术表达式:
users=["test", 1+1],如果是标准JSON解析,该内容属于非法JSON会返回错误;如果返回200且第二个用户标识为2,可确认后端存在动态表达式执行逻辑,符合eval解析的特征 - 确认执行能力后再传入对应语言的无害命令执行探针,比如Python环境下传入
users=["test", __import__("os").popen("whoami").read()],验证命令执行效果
处理建议
Bug Bounty提交建议
- 严格遵守漏洞平台规则,仅使用无危害的Payload验证,禁止访问、修改用户数据,禁止执行破坏性操作
- 提交漏洞时附完整复现步骤、执行结果截图,代码注入属于高危/严重级漏洞,需明确标注危害范围
修复方案建议
- 完全移除
eval类动态执行逻辑,改用对应语言的标准JSON解析库(如Python的json.loads、Node.js的JSON.parse)解析用户传入的users参数 - 增加参数类型校验:限制
users参数只能为数组类型,数组元素仅允许为符合用户名规则的字符串,解析失败直接返回400错误 - 增加输入长度限制,避免参数过长导致的解析异常
内容的提问来源于stack exchange,提问作者trieulieuf9
相关产品推荐
相关产品推荐

