74CMS最新版:74cms_v3.4.20140820 官方8.20号更新
文件:/user/personal/personal_resume.php
在创建建立第一步时:
将fullname,education_cn等信息通过函数inserttable插入数据库
在进入数据库时,通过转义,但是进入数据库存储时,依然可带入单引号等而已SQL语句
在inserttable进入数据库后
通过check_resume函数检测简历完成程度:
通过:
取出已经进入简历中的信息
看这里:
fullname,education_cn两个参数被取出来后进入了setsqlarr变量
最后进入了updatetable函数:
进入updatetable函数:
在updatetable中,没有对数据进行任何的处理专业过滤等
到这里我们第一步进入数据库的恶意SQL,在这里再次进去了数据库,导致SQL注入
因为在update中,所以我们想更新简历中那个信息都可以
================================================================================
我们来总结下:
前面发了很多二次注入的漏洞,都是在建立简历这里,基本都在updatetable这个函数里面产生的
1、首先74cms在获取内容后通过转义过滤处理,进入了数据库
2、进入书库时使用inserttable,这里没有任何过滤处理,导致单引号进入数据库
3、在其他地方取出简历数据,通过get_resume_***函数,也没有处理,此时单引号已经产生了
4、在其他地方进行修复内容时,再次使用inserttable和updatetable,由于没有过滤,导致二次SQL注入
当进入updatetable是数组时,这里直接去数组的元素,连引号都没有,直接注入,如:
WooYun: 骑士人才系统注入(20140805)注入一枚
当非数组是,使用单引号保护,这里产生了二次注入,如:
WooYun: 74CMS 最新版二次SQL注入多出可越权操作
WooYun: 74cms (20140709) 二枚二次注入
等,所以这里修复已经很简单了
当然还有inserttable函数里面也需要处理
这里存在两个参数fullname,education_cn
由于fullname在数据库中限制长度为15,太短了
这里我们使用education_cn为测试
因为在update中,所以我们想更新简历中那个信息都可以,这里选择最短的QQ
在第一步,创建基本信息时:
在学历处填写:',qq=concat(user(),version())#
然后继续完善简历信息,直到第四步,填写完教育信息时,返回预览自己的建立
qq联系方式即被修改为user和version的值
由于这里可以任意截断,所以可以修改任意用户的联系方式等简历信息
这里我们没有添加where条件,那么即可修改全部用户的QQ联系方式