词典中的 JeecgBoot SQL 注入( CWE- 89)
JeecgBoot (jeecg-boot)在其词典表查询机制中容易受到SQL注射(CWE-89)的影响. " SysDictServiceImpl.getFilterSql " 方法将攻击者控制的 " 条件 " / " FilterSql " 值汇编成 " WHERE " 条款,而 " SysDictMapper.xml " 则用MyBatis ' ${filterSql}-生弦替换法将其插入。 远程的,实际上未经认证的攻击者可以提供布尔或比较的表达式(例如1=1',1=0',或id=''),被评价为SQL,允许任意行和列从“sys user'等数据库表格中读取.
校对:Soup 页:1
脆弱部分
- “jeecg-boot/jeecg-module-system/jeecg-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/SysDictMapper.xml”
- " 服务系统 "
类似的终点包括: " /sys/api/getDict rojects " 、 " /sys/api/queryFiltertableDictInfo " 、 " /sys/dict/loadDictOrderByValue/{dictCode}` " 、 " /sys/api/quetableDictByKeys " 、 " /sys/api/quetableDictableDictalByKeys " 和 " /sys/api/tictbit从tableByKeys " 。
校对:Soup
用户控制的 “ filterSql” / “条件” 字符串通过 MyBatis ${}' 生字符串插入SQL 文本,该插件不进行逃出或参数化。
`SysDictMapper.xml'将攻击者控制的碎片逐字插入:
\ xml 时 <! -- SysDictMapper.xml(187行) -- -- > 在 ${ filterSql} 中选择
<! -- -- SysDictMapper.xml(208行) -- -- > 和 ${过滤器Sql}
`SysDictServiceImpl.getFilterSql ' 将攻击者控制的`条件'(`法典 ' 第4个逗号分隔要素)编成`Where'条款而不能逃脱,从而制造出碎片:
贾瓦
// SysDictServiceImpl.getFilterSql (第541行) (中文(简体) ).
filterSql = " where " +条件;
SysDictServiceImpl.query Table Dictim ProjectsByCodeAndFilter ' 将原始的filterSql'请求参数直接传入queryTableDictVinfilter (.)',达到${filterSql}`'水槽。
警卫是一份关键词黑名单,即Sql InjectionUtil. specialFilter ContentForDictSql'。 当投入中包含选择'、插入'、更新'、删除'、联合'(通过'选择')、睡眠'、基准('、数据库()'、版本()'、附属'、信息-schema'、;、、-'和类似标志。 它不封锁1=1'、1=0'、和'、或'或id='.''。
校对:Soup {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
返回所有行( WHERE 总是真实的)
卷轴 - G “http://127.0.0.1:8082/jeecg-boot/sys/api/getDict项目”\
--data-urlencode "dictCode=sys user, realname,id, 1=1"
-H"X -Access-Token:$Token"(X -Access-Token: $Token) (美国英语).
** 确认的损害**
- ** 公布PII和商业数据。 ** `ditCode=sys user、电话、电子邮件、1=1'退回每个用户的电话号码和电子邮件。 攻击者可以使用`1=1'或目标条件倾倒任何未列入黑名单的表格和柱子。
- ** 可读的仲裁非敏感表格。 **`dictCode=sys dict item, item text, item value,1=1' 返回了字典行;`dictCode=sys user, realname,id,1=1' 返回了所有4个用户(测试用户,张三,jeecg, ).
内容来源: jeecgboot/JeecgBoot