RCE&代码执行漏洞
1、RCE执行-代码执行&命令执行
2、CTF考点-漏洞配合&绕过手法
首先RCE他通常指的是两个漏洞
一个是代码执行漏洞另一个是命令执行漏洞
RCE代码执行漏洞–指的就是引用脚本代码并解析执行
RCE命令执行漏洞–调查系统操作的命令并执行
我们简单的来演示一下这个
RCE代码执行漏洞
<?php
eval ('phpinfo();');
?>
好那么这代码是什么意思呢
其实他的意思就是执行phpinfo()这个函数
那么为什么要这样写呢
首先解析一下这个代码
eval 就是执行函数吗
那么为什么要把phpinfo()用单引号括起来呢
那么用单引号括起来就是将phpinfo()以字符串的形式去执行了
那么当我们直接去访问这个含义phpinfo()这个以上代码的时候他会自动执行并打印出phpinfo()函数执行效果
好,那么我们说一下为什么要这样去写这个phpinfo();
原因是这样的,
就是将这个字符串形式的phpinfo(); 数据以当前网站上存在的脚本代码解析器去解析执行
这就是RCE代码执行漏洞
那么他呢就是会把这个字符串以这个代码的形式去解析去执行
另外一个
RCE命令执行漏洞
命令执行漏洞
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口。比如我们常见的路由器、防火墙、入侵检测等设备的web管理界面上。一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。 如果,设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器。
系统命令执行函数
system()
passthru()
exec()
shell_exec()
popen()
proc_open()
pcntl_exec()
<?php
system('var');
?>
<?php
$a = $_POST['a'];
system($a);
?>
两种都可以
访问存在RCE命令执行漏洞的页面
http://xxx.xxx.xxx/1.php?a=ipconfig
[ipconfig是windows系统查看当前IP的命令linux的是ifconfig]
秀儿开始
web29
<?php
error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag/i", $c)){
eval($c);
}
}else{
highlight_file(__FILE__);
}
如果说你没有学过php获取其他的编程语言
没关系
你只需要记住几个关键词
POST
GET
有很多传输方式
但是呢常用的有两个
一个是post和get
$_GET[‘c’]
看到这个代码首先做比喻把c当中是一个空间或者说一个位置,那么
G
E
T
是
获
取
这
种
空
间
的
东
西
,
一
旦
有
东
西
传
输
到
c
这
个
位
置
上
,
_GET是获取这种空间的东西,一旦有东西传输到c这个位置上,
G?ET是获取这种空间的东西,一旦有东西传输到c这个位置上, _ GET就是会获取c这个位置上的东西了,他只会获取不会去执行
if(!preg_match(“/flag/i”, KaTeX parse error: Expected '}', got 'EOF' at end of input: …{ eval(c); }
那么这个代码又是什么呢
我们先看这个函数!preg_match
preg_match 函数用于执行一个正则表达式匹配。
正则表达式简单的来说就是过滤东西,他过滤了什么呢过滤了flag这个词
?c=system(‘ls’);
先通过ls查看当前目录下的文件
有一个flag.php
我们想他就是我们要的flag值
但是呢我们直接读取
c=system(‘cat flag.php’);
读取不了这个文件
为什么呢
因为代码中已经过滤掉了flag这个词
那么我们怎么才能读取到flag.php
这个时候就要会通配符拉
system(‘tac fla*.php’);
我们用*这个通配符
这个通配符就是所有的意思
如果当前目录下有
flaz.php
flag.php
flal.php
用到了
system(‘tac fla*.php’);
去读取
会把三个文件都读取了
为什么
因为*代表所有
你没有指定那文件
好那么他就是自己判断
只要fla是匹配的后缀php是匹配的,那个*不管是什么都可以
|