修复整理ecshop漏洞

来源:undefined 2024-12-24 13:02:36 1010

1、

ECShop存在一个盲注漏洞,问题存在于/api/client/api.php文件中,提交特制的恶意POST请求可进行SQL注入攻击,可获得敏感信息或操作数据库。

路径:/api/client/includes/lib_api.php

参照以下修改:

推荐(免费):eschop

1

2

3

4

5

6

7

8

9

10

11

12

13

function API_UserLogin($post)

{

/* SQL注入过滤 */

if (get_magic_quotes_gpc())

{    

$POST@[UserId] = $POST@[UserId];

}

else

{    

$POST@[UserId] = addslashes($POST@[UserId]);    

}

/* end */

$POST@[username] = isset($POST@[UserId]) ? trim($POST@[UserId]) : ;

登录后复制

2、

ecshop的后台编辑文件/admin/shopinfo.php中,对输入参数id未进行正确类型转义,导致整型注入的发生。

路径: /admin/shopinfo.php

参照以下修改(53-71-105-123行):

1

2

3

4

5

源代码:

admin_priv(shopinfo_manage);

改为:

admin_priv(shopinfo_manage);

$_REQUEST[id] = intval($_REQUEST[id]);

登录后复制

3、

文件/admin/affiliate_ck.php中,对输入参数auid未进行正确类型转义,导致整型注入的发生。

参照以下修改(31行和51行):

1

2

3

4

5

源代码:

$logdb = get_affiliate_ck();

改成:

$_GET@[auid] = intval($_GET@[auid]);

$logdb = get_affiliate_ck();

登录后复制

注:好像按上面改了阿里云还是会提示这个漏洞,然后我在文件顶部处添加以下代码就可以了:

1

$_GET@[auid] = intval($_GET@[auid]);

登录后复制

4、

ecshop的/admin/comment_manage.php中,对输入参数sort_by、sort_order未进行严格过滤,导致SQL注入。

参照以下修改:

1

2

$filter[sort_by]      = empty($_REQUEST[sort_by]) ? add_time : trim(htmlspecialchars($_REQUEST[sort_by])); 

$filter[sort_order]   = empty($_REQUEST[sort_order]) ? DESC : trim(htmlspecialchars($_REQUEST[sort_order]));

登录后复制

5、

ecshop没有对会员注册处的username过滤,保存重的用户信息时,可以直接写入shell。

路径:/admin/integrate.php

大概109行,参照以下修改:

1

$code = empty($_GET@[code]) ? : trim(addslashes($_GET@[code]));

登录后复制

大概601行,参照以下修改:

1

2

3

4

源代码:

@file_put_contents(ROOT_PATH . data/repeat_user.php, $json->encode($repeat_user));

修改成:

@file_put_contents(ROOT_PATH.data/repeat_user.php,<?php die();?>.$json->encode($repeat_user));

登录后复制

注:好像按上面改了阿里云还是会提示这个漏洞,然后我在文件顶部处添加以下代码就可以了:

1

$_GET@[code] = empty($_GET@[code]) ? : trim(addslashes($_GET@[code]));

登录后复制

6、

ecshop后台模版编译导致黑客可插入任意恶意代码。

路径:/admin/edit_languages.php

大概在第120行

1

$dst_items[$i] = $_POST@[item_id][$i] . = . " .$_POST@[item_content][$i]. ";;

登录后复制

修改为

1

$dst_items[$i] = $_POST@[item_id][$i] . = . .$_POST@[item_content][$i]. ;;

登录后复制

8、

ecshop的/includes/lib_insert.php文件中,对输入参数未进行正确类型转义,导致整型注入的发生。

有$arr[num] 、$arr[id]、$arr[type]这些参数的,在函数开头加上:

1

2

3

4

5

6

7

8

大概289行加上:

$arr[num] = intval($arr[num]);

$arr[id] = intval($arr[id]);

大概454行加上:

$arr[id] = intval($arr[id]);

$arr[type] = addslashes($arr[type]);

大概495行加上:

$arr[id] = intval($arr[id]);

登录后复制

9、ECSHOP支付插件存在SQL注入漏洞,此漏洞存在于/includes/modules/payment/alipay.php文件中,该文件是ECshop的支付宝插件。由于ECShop使用了str_replace函数做字符串替换,黑客可绕过单引号限制构造SQL注入语句。只要开启支付宝支付插件就能利用该漏洞获取网站数据,且不需要注册登入。

1

2

3

4

5

6

7

搜索代码:

$order_sn = str_replace($_GET@[subject], , $_GET@[out_trade_no]);

将下面一句改为:

$order_sn = trim(addslashes($order_sn));

登录后复制

Ecshop后台模版编辑漏洞 详情描述参考:https://www.cnblogs.com/LittleHann/p/4272255.html

漏洞文件:/admin/mail_template.php 和 /includes/cls_template.php

/admin/mail_template.php文件添加以下代码(过滤了部分php关键词)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

/*------------------------------------------------------ */

//-- 保存模板内容

/*------------------------------------------------------ */

elseif ($_REQUEST[act] == save_template)

{

if (empty($_POST@[subject]))

{

sys_msg($_LANG[subject_empty], 1, array(), false);

}

else

{

$subject = trim($_POST@[subject]);

}

if (empty($_POST@[content]))

{

sys_msg($_LANG[content_empty], 1, array(), false);

}

else

{

$content = trim($_POST@[content]);

}

$type   = intval($_POST@[is_html]);

$tpl_id = intval($_POST@[tpl]);

/*过滤了部分php关键词*/   

$temp_check = preg_replace("/([^a-zA-Z0-9_]{1,1})+(extract|parse_str|str_replace|unserialize|ob_start|require|include|array_map|preg_replace|copy|fputs|fopen|file_put_contents|file_get_contents|fwrite|eval|phpinfo|assert|base64_decode|create_function|call_user_func)+( |()/is", "", $content);

$temp_check = preg_replace("/<?[^><]+(?>){0,1}|<%[^><]+(%>){0,1}|<%=[^><]+(%>){0,1}|<script[^>]+language[^>]*=[^>]*php[^>]*>[^><]*(</scripts*>){0,1}/iU", "", $temp_check);

$content = $temp_check;

/*过滤了部分php关键词*/

$sql = "UPDATE " .$ecs->table(mail_templates). " SET ".

"template_subject = " .str_replace(\, , $subject). ", ".

"template_content = " .str_replace(\, , $content).  ", ".

"is_html = $type, ".

"last_modify = " .gmtime(). " ".

"WHERE template_id=$tpl_id";

if ($db->query($sql, "SILENT"))

{

$link[0]=array(href => mail_template.php?act=list, text => $_LANG[update_success]);

sys_msg($_LANG[update_success], 0, $link);

}

else

{

sys_msg($_LANG[update_failed], 1, array(), false);

}

}

登录后复制

/includes/cls_template.php文件替换函数(fetch_str()):

1

2

3

4

5

6

7

8

9

10

11

12

13

function fetch_str($source)

{

if (!defined(ECS_ADMIN))

{

$source = $this->smarty_prefilter_preCompile($source);

}

$source=preg_replace("/([^a-zA-Z0-9_]{1,1})+(copy|fputs|fopen|file_put_contents|fwrite|eval|phpinfo)+( |()/is", "", $source);

$source=preg_replace("/<?[^><]+?>|<%[^><]+%>|<script[^>]+language[^>]*=[^>]*php[^>]*>[^><]*</scripts*>/iU", "", $source);

return preg_replace("/{([^}{

]*)}/e", "$this->select();", $source);

//return preg_replace_callback("/{([^}{

]*)}/", function($r) { return $this->select($r[1]); }, $source);//修饰符 /e 在 PHP5.5.x 中已经被弃用了

}

登录后复制

以上就是修复整理ecshop漏洞的详细内容,更多请关注php中文网其它相关文章!

最新文章