[Day21] Remote Code Execution

前言

你知道Remote Code Execution很严重,但你知道有哪些可以触发RCE吗?

正文

概念

只要能够Remote Code Execution,通常会被评断为高危漏洞,这是因为攻击者可以藉此在Server上远程执行,当然RCE并非只能透过Web才能够触发,但本篇只专注在Web Application上。

其中一个造成RCE的类型就是动态的程序码执行,这也是大多数触发RCE的方法。动态程序码执行的意思是 - 程序码会从某些地方(例如使用者输入)获取参数并执行它。从攻击者的角度来说,只要你的Web Application存在与使用者互动的地方,就都有可能是一个进入点,这包含一般常见的网站提供的栏位、GET/POST Request中的各种栏位,如Headers,request body等等。

透过撰写能够与Web Application/Web Server沟通的程序码,使应用程序执行这些恶意程序码,获得Initial access。

这种方式可能是直接间接甚至是组合的。


直接

这种方式最好理解,例如Command Injection:

ping.php

<?php

$cmd = "ping ".$GET['ip'];
$result = exec($cmd);

这边的command是由两个部分组成,ping和url参数ip
这就代表将会被执行的命令其实完全取决於用户input。
可以想像假设攻击者发出一个请求:

http://example.com/?ip=127.0.0.1;cat%20%2Fetc%2Fpasswd

就会将Linux Server上的/etc/passwd print出来,也就理所当然可以将它替换成Reverse Shell取得Server的权限。

我也曾经看过一个案例是,利用touch指令,建立一个特殊档案名称的file name,使网站应用程序在读取filename时,也执行了後面的程序码,将当下目录档案资讯的result,在网站页面中呈现

或像是透过之前[Day16]的Arbitrary File Upload上传Web Shell,再进行RCE。

间接/组合

一个简单的例子是从SQL Injection升级到RCE,例如下面这个payload:
SELECT "<?php system($REQUEST['cmd']);?>" INTO OUTFILE "/var/www/html/xxx.php"

就是利用SQL中的一些特殊功能,写入一个Web Shell到Web Server上,造成RCE,或是使用LOAD_FILE去读取特定系统的文件等等,达成部分的程序码执行。

另一个例子就是insecure Deserialization,不安全的反序列化也有可能做到RCE。

Case Study


<<:  卡夫卡的藏书阁【Book22】- Kafka - KafkaJS 消费者 4

>>:  [2021铁人赛 Day21] General Skills 18

RestTemplate实作(一)(Day11)

在串接API之前我们还有一个重要的设定要做,我们必须先汇出证交所网站的SSL证书,并加入到JAVA的...

【Day1】前言X动机X首款宠物约散Android平台APP

前言 人是群居动物,没有家人/伴侣/朋友的陪伴,就会感到很空虚。 但是你/你有没有想过其实宠物也是需...

Day 9 运算宝石:EC2 重点架构

今天我们要来介绍 EC2 的基本架构,那我们开始吧! EC2 Instance由许多重要元件组成,...

Kotlin Android 第6天,从 0 到 ML - null safety ​

Kotlin Android 第6天,从 0 到 ML - null safety 前言: 如果有写...

Day13 HTML三

今天的影片内容为介绍一些常用的元素,像是插入超连结与图片,以及表格的建立等~ 一起来看看让网页变得更...