手工SQL注入+代码审计然后getshell

CracerCracer 2015-12-15 代码审计 720 0 3

注入点:

http://www.wzecloud.com/ZBdeploy.php?_cls=user&_act=selectedArea&areaId=1

一、先想到的是看能不能直接导出一名话,这样就不用去搞后台了。

一般来说导出一名话的条件如下:

1.网站物理路径

2.有足够大的权限

3.单引号没有被转义

先来加上个单引号试下一下,看一下能不能用数据库导出一名话。

 

图片1

可以看到单引号被转义了,所以就不能导出一句话了。

搞后台
先前我是用SQLMAP 跑了一下,结果发现IP被加黑名单了,然后就开了个代理,准备手工了。

从前面的图就知道了,这个参数的变量外面是没有引号的。

图片1

加上-- 把后面注释,提示栏目数不正确 ,然后不断的尝试 得图片3

(使用union ,其子句select 的栏目数必须一样)确定了为3个栏目,然后加上数据库自带的函数查看一些信息

图片4

两个@@ 为系统变量,一个@为用户变量,这个是插件的目录@@plugin_dir,可知为linux系统 版本>5 ,root 用户

Mysql 5 以上有个内置库information_schema 里面有mysql的所有数据库和表结构信息

SCHEMATA(这张表存所有库名)

图片5

得到wzcloud 库,然后列这个库下面的所有表:

 

TABLES (这张表存所有的表名)

 

数据库名要用16进制,然后返回的为json 格式 ,这里就得到所有的表名了。

图片6

这里看起来眼花花的。

我们来写个文件来处理下数据:

<form action="1.php" method="post">

<textarea style="width:500px;height:300px;" name="buff"></textarea><br/><br/>

<input type="submit" name='sub'/>

</form>

<?php

if(isset($_POST['sub'])){

$buff= $_POST['buff'];

$arr=json_decode($buff,true);

foreach($arr as $arr2){

echo '<pre>';

echo $arr2[‘name’].”:”;

echo $arr2['parentCode']."<br/>";

}

}

提交下数据处理完就清楚了。

图片7

然后来来爆一下字段:

COLUMNS (这张表里面有所有的字段信息)

表名也要用16进制

图片9

最后就写个sql 查了管理的张号密码了:

图片10

拿到后找后台。

这里,不能用工具扫,一个个如何猜,这里我没找出来,然后基友帮我找到的。后面一看

这里用到了程序员的命名习惯,既然库为wzcloud 那么就试试 wzadmin 结果为正确。

三、后台找上传

发现了二个上传的地方,

先来看看编辑器

图片11

百度了一下:ckeditor 漏洞,发现都是用其图片管理器的重命名来拿 shell 想到是apache 就用解析漏洞吧,加上不支持的后缀名,然后我就试了下:

图片12

应该是有白名单机制。 想了想一般像这种新版的编辑器,都修复了,这里就放弃了。

 

 

然后看了他自己写的上传函数:图片13

直接上传了个.php 文件。

图片14

显我上传成功了。

但是没有 返回路径给我

下面就抓包试下看。

图片15

也没给我返回什么 路径

然后我试着点了下删除 如下:

图片16

难道没有上传成功么?

看到上面的图件文件一传了之后会有个缩图,应该是文件上传处理的时候不是图片,没法生成缩略图就返回false了。

没办法了,这时候只能用数据库来load_file 了。

根据他的url形式,

http://www.wzecloud.com/ZBdeploy.php?_cls=user&_act=selectedArea&areaId=1

估计这个ZBdeploy.php 是个核心的处理文件,既然是linux 又是root权限那么我们直接导入/etc/passwd 文件来查看网站的跟目录:

图片17

0x2F6574632F706173737764 ,转成16进制

 

load_file(0x2F6574632F706173737764)

图片18

直接拿到网站根目录,再类似的查看他网站的文件,就可以进行代码审计了。

 

00x4

接下来就是load_file他网页文件了。

replace(load_file(0x2F7661722F7777772F5A426465706C6F792E706870),0x3c,0x20)

这里用replace替换了< 为空格符,不然返回的为网页文件,就没法显示了。

 

尼玛呀,结果返回个null给我,难道不存在么, 还是管理员自己指定了虚拟目录。

接着我导入了/etc/httpd/conf/httpd.conf  apache的配置文件。

,处理完了数据之后在本地编辑器看了下:

图片19

果然是该了虚拟目录,得到网站目录为/home/web/ 然后再导入这个ZBdeploy.php 文件

Replace(load_file(0x2F686F6D652F7765622F5A426465706C6F792E706870),0x3c,0x20)

 

得到内容:

图片20

到这里目标网站的基本结构也就出来了。

然后我们拿着前面的抓包的url 进行导出看下管理员是如何来处理的。

 

/wzadmin/flash_upload/wzrsc_upload.php

图片21

发现做了判断,然后我们就找其他的上传地方吧。

在看到他的user.class.php 文件有如下一段代码:

图片22

这里他new一个upload 的类代码如下:

图片23

由此可知在其用户注册的地方存在漏洞。虽然在表面上的注册表单没有图片上传。但是我们可以post数据包

在他的upload类里面先copy的文件,然后在去做缩略图的,所以可以猜解文件名

先传一张图片取得 其保存路径 需要猜解的就是 time().100-999 的文件名 这里的time()取得的是uinux的时间轴,它是一秒一秒的增加的。

先上传一张图片看一下生成的格式,所以我们猜解的文件名就只有3位而已。

这里我们可以用

http://www.wzecloud.com/uploads/files/20150106/1420550009915.png

在上传之后数秒 用php在本地echo time(); ,这个页面事先写,打开就行。

得到 1420550763 说明前7位是相同的1420550

一般来说24*60*60=86400 有5位,而 后面只有3位不同也就是说肯定在同一天,你服务器的时间轴与目标服务器时间轴,只差20分钟以内。

猜解目标为:

http://www.wzecloud.com/uploads/files/20150106/1420550009915.png

去掉time()的3位和随机的3位总共去掉后面6位

前缀也就是

http://www.wzecloud.com/uploads/files/20150106/1420550 + 6位纯数字随机数 + .php

好了,猜解的目标确定好了之后,根据前面的漏洞,先来写个post表单

图片24

然后post到漏洞页面

图片25

没事,虽然没法生成小图,但是php文件却已经上传成功了。

 

现在来生成字典,

然后写一个php文件来生成吧。

图片26

图片27

字典已经生成了把御剑拿出来: 先把字典cpoy到御剑目录下面

图片28

图片29

尼玛

图片30

貌似不给力。

好吧,文本分割一下:

图片31

上菜刀。

稳稳的。

 

我在他的另外一个地方发现了一个上传并且没有使用随机名字。

图片32

先查看后台的源代码  搜索form表单

图片33

然后我就load_file来看源代码:

图片34

看到这个地方我就嘿嘿的笑了。,其实apache的解析漏洞,一版式不识别的后缀扩展就好解析前面的既然他这里可以让我上传ppt的文件那么我就.php.ppt ok

图片35

图片36

默默的上了菜刀了。

转载请注明来自Cracer,本文标题:《手工SQL注入+代码审计然后getshell》

喜欢 (3) 发布评论
发表评论


Top