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

相关文章

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Go标准库常见错误分析和解决办法

《Go标准库常见错误分析和解决办法》Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

Spring Boot + MyBatis Plus 高效开发实战从入门到进阶优化(推荐)

《SpringBoot+MyBatisPlus高效开发实战从入门到进阶优化(推荐)》本文将详细介绍SpringBoot+MyBatisPlus的完整开发流程,并深入剖析分页查询、批量操作、动... 目录Spring Boot + MyBATis Plus 高效开发实战:从入门到进阶优化1. MyBatis

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S

macOS无效Launchpad图标轻松删除的4 种实用方法

《macOS无效Launchpad图标轻松删除的4种实用方法》mac中不在appstore上下载的应用经常在删除后它的图标还残留在launchpad中,并且长按图标也不会出现删除符号,下面解决这个问... 在 MACOS 上,Launchpad(也就是「启动台」)是一个便捷的 App 启动工具。但有时候,应

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一