推荐一个圈子,专注漏洞分享:https://pc.fenchuan8.com/#/index?forum=101997&yqm=DHL4E
代码审计一(命令执行)
首先获取路由,并根据路由使用/进行分割
我们来看req参数是如何处理的,首先分割出req的位置1和位置2的字符串,然后调用file_get_contents来读取POST提交的输入
我们来看req1为mute_member的情况
首先获取参数members并赋值给变量memlist,获取参数id赋值给conference_number变量,然后将变量conference_number传递给$conf_cmd变量,并传递给方法cmd_assync
跟进cmd_assync函数,就是封装了的exec方法,传递执行命令cmd
这里对可控的参数id没有进行任何过滤并传递给了exec方法,从而造成命令执行
执行演示
代码审计二(命令执行)
首先获取参数fax_extention和fax_name,fax_number,其中fax_number我们可以不用管
fax_extention用来构建上传文件的路径,fax_name是我们发送传真的文件名
同时参数调用了check_str进行字符串检查,未过滤路径穿越,只过滤了’
文件上传后的代码如下
首先根据上传的 文件后缀获取文件名和文件后缀,文件后缀和变量fax_name有关,如果文件后缀为tiff,则修改为tif。如果文件后缀为pdf,,就调用命令gs -q -sDEVICE=tiffg3 -r204x196 -g1728x2156 -dNOPAUSE -sOutputFile=".f a x n a m e . " . t i f − − " . fax_name.".tif -- ".fax
name.".tif−−".fax_name."将或追转换为.tif,在执行命令的过程中,变量fax_name被直接传入到了exec方法中,且没有任何过滤,从而造成了命令执行
造成文件执行的原因是在文件上传之后,没有及时的暂停程序逻辑,而是继续向后判断,根据文件类型进行文件转换,从而执行了转换文件格式的命令
PS:这里是存在文件上传漏洞的,需要知道网站的绝对路径,然后再位置fax_extention构造穿越,因为在文件上传之前,是没有判断文件后缀的,尽管不满足文件转换,最后会输出一句Fax image not available on server,但是之前调用move_uploaded_file已经实现了文件上传,难点在于不知道网站的绝对路径
代码审计三(SQL注入)
获取的三个参数uuid,number,gps被直接拼接在了insert语句中,且无任何过滤
测试运用
代码审计四(SQL注入)
参数dep_level被直接拼接在了SQL语句中,且字符串拼接发生在预处理之前
测试运用
代码审计五(文件上传)
这是一个很有意思的漏洞,初看存在文件上传的白名单校验,但是仔细分析代码发现校验的其实是content-type字段,而不是通过文件名获取文件类型之后通过判断文件后缀名来校验白名单,所以存在文件上传漏洞
校验的是下图中的内容
同时文件上传之后采用insert将文件上传的数据插入数据库,参入字段t_event_uuid来自于post直接获取的uuid,且无任何过滤。
测试运用
访问上传的文件地址
更多漏洞详见:https://pc.fenchuan8.com/#/index?forum=101997&yqm=DHL4E