这里我需要说明一下echsop具备全局的一个安全转义
全局文件:/includes/init.php
当未开启gpc后进入addslashes_deep函数内容,php在高版本后gpc处于默认关闭状态
addslashes_deep当string时直接进行安全转义,数组时递归转义,这便是ecshop的全局安全。
漏洞文件:user.php
POST获取JSON值并进行json_decode而json_decode具备绕过全局转义以及gpc的特点,也就是会吞并反斜杠。当我们提交’时会被转义成\’而这里再经过一次json_decode则因吞并反斜杠导致还原单引号所以导致我们可以输入危害内容,但下面还存在一个if的判断
判断SESSION的v_code值是否为true与no_need_vcode是否定义,因为这里用的是&&所以我们满足其中一个条件即可绕过判断,post_data是由我们json_decode后赋值的变量所以这里no_need_vcode可控绕过判断
将post_data中的mobile赋予$mobile并一下判断action是否指定为sms_get_password方法,当指定时则进入check_user方法
期间未再经过转义所以导致存在注入但ecshop在新版本后存在安全防护
安全防护文件:/includes/safety.php
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $url_arr=array( 'xss'=>"\\=\\+\\/v(?:8|9|\\+|\\/)|\\%0acontent\\-(?:id|location|type|transfer\\-encoding)", ); $args_arr=array( 'xss'=>"[\\'\\\"\\;\\*\\<\\>].*\\bon[a-zA-Z]{3,15}[\\s\\r\\n\\v\\f]*\\=|\\b(?:expression)\\(|\\<script[\\s\\\\\\/]|\\b(?:eval|alert|prompt|msgbox)\\s*\\(|url\\((?:\\#|data|javascript)", 'sql'=>"(EXTRACTVALUE|EXISTS|UPDATEXML)\\b.+?(select|concat)|[^\\{\\s]{1}(\\s|\\b)+(?:select\\b|update\\b|insert(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+into\\b).+?(?:from\\b|set\\b)|[^\\{\\s]{1}(\\s|\\b)+(?:create|delete|drop|truncate|rename|desc)(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+(?:table\\b|from\\b|database\\b)|into(?:(\\/\\*.*?\\*\\/)|\\s|\\+)+(?:dump|out)file\\b|\\bsleep\\([\\s]*[\\d]+[\\s]*\\)|benchmark\\(([^\\,]*)\\,([^\\,]*)\\)|(?:declare|set|select)\\b.*@|union\\b.*(?:select|all)\\b|(?:select|update|insert|create|delete|drop|grant|truncate|rename|exec|desc|from|table|database|set|where)\\b.*(charset|ascii|bin|char|uncompress|concat|concat_ws|conv|export_set|hex|instr|left|load_file|locate|mid|sub|substring|oct|reverse|right|unhex)\\(|(?:master\\.\\.sysdatabases|msysaccessobjects|msysqueries|sysmodules|mysql\\.db|sys\\.database_name|information_schema\\.|sysobjects|sp_makewebtask|xp_cmdshell|sp_oamethod|sp_addextendedproc|sp_oacreate|xp_regread|sys\\.dbms_export_extension)", 'other'=>"\\.\\.[\\\\\\/].*\\%00([^0-9a-fA-F]|$)|%00[\\'\\\"\\.]"); if( !function_exists('filterData') ){ function filterData(&$data,$type){ $data and filterArray($data,$type); } |
以上为安全防护的正则内容,一看就输入可以绕过的,因为们有json_decode所以可以打乱关键字导致绕过,至于硬刚绕过,菜鸟不会。
本地复制: