ctfshow-web入门-命令执行(web42知识铺垫与四种常见截断方法)

本文主要是介绍ctfshow-web入门-命令执行(web42知识铺垫与四种常见截断方法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1、知识铺垫

(1)文件描述符 

(2)/dev/null

2、代码审计

3、命令分隔

(1)使用分号 ;

(2)使用逻辑或 ||

(3)使用 && 或者 &

4、%0a 换行符截断


 命令执行,需要严格的过滤

 

1、知识铺垫

(1)文件描述符 

标准输入(stdin):文件描述符为 0,用于读取输入数据。
标准输出(stdout):文件描述符为 1,用于输出普通的结果或信息。
标准错误(stderr):文件描述符为 2,用于输出错误信息。

(2)/dev/null

/dev/null 是类 Unix 操作系统中的一个特殊文件,被称为“空设备”或“黑洞”,它是一个字符设备文件,其主要作用是丢弃所有写入它的数据,同时任何从它读取的操作都会立即返回EOF(文件结束符)。

2、代码审计

system($c." >/dev/null 2>&1");

将 get 请求传递的 c 的内容与后面内容进行拼接后作为 system 函数的参数;

>/dev/null 是一个重定向操作符,用于将标准输出(stdout)重定向到 /dev/null,这意味着命令的标准输出将不会显示在终端或网页上,也不会写入任何文件;

2>&1 是另一个重定向操作符,它将标准错误(stderr)重定向到标准输出(stdout),>&1 表示将标准错误重定向到标准输出所指向的地方(即 /dev/null),这意味着命令的所有错误信息也会被丢弃。

直接传入系统命令没有回显:

针对这种回显被重定向到了黑洞的情况,下面给出一些处理方法。

3、命令分隔

使用管道符,这里又有四种方法

(1)使用分号 ;

对于命令分隔,分号只适用于 Linux 系统,不适用于 Windows 系统。

构造 payload:

?c=ls;

执行成功 

 

(2)使用逻辑或 ||

关于管道符的详细介绍和用法可以参考我之前写的 DVWA 靶场的命令注入:

DVWA 靶场之 Command Injection(命令执行)原理介绍、分隔符测试、后门写入与源码分析、修复建议_dvwa command injection-CSDN博客icon-default.png?t=N7T8https://myon6.blog.csdn.net/article/details/136291307对于两个或,前面为真,只执行前面的,后面命令不会执行;而对于一个或, 无论第一个命令执行为真还是假,都是直接执行第二个命令。

这里我们只希望执行 ls 而不希望执行重定向的效果,构造 payload:

其实无论后面重定向的命令执行与否对我们前面命令的执行都不影响,我们只需要确保第一个命令执行了就行。

?c=ls||

执行成功 

 (3)使用 && 或者 &

对于两个与,当第一个命令执行失败(为假),那么第二个命令也不会被执行;

对于一个与,前面的语句为假则直接执行后面的,前面可真可假,后面命令都会执行;

我们也不用管后面的,确保前面命令被执行即可。

但是这里与符号传入前需要先 URL 编码,我也不知道为啥,虽然说是在 url 里面传的,但是为啥或符号不需要呢?不懂,有知道的可以解释下谢谢。

直接传与符号没有回显:

编码后传入,构造 payload:

?c=ls%26

 

或者:

?c=ls%26%26

 

4、%0a 换行符截断

构造 payload:

?c=ls%0a

最后就直接拿 flag 吧,反向显示 flag.php:

?c=tac flag.php%0a

拿到 flag:ctfshow{77a306ca-d797-4143-a52e-bbc73ca89b22} 

这篇关于ctfshow-web入门-命令执行(web42知识铺垫与四种常见截断方法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1045422

相关文章

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,