[BUUCTF]-Web:[GXYCTF2019]Ping Ping Ping解析

2024-01-31 16:52

本文主要是介绍[BUUCTF]-Web:[GXYCTF2019]Ping Ping Ping解析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先看网页

按照正常流程,先ip+ls,可以看到flag

但是不能直接得flag,他应该是过滤掉了一点东西。

这里考虑过滤掉了空格

空格过滤绕过:

%20
%09
${IFS}
$IFS$1
{IFS}
<
<>

空格绕过之后发现还是打不开flag.php,但报错语句变了

尝试打开index.php,成功了。

从这里我们可以看出打不开flag.php的原因

代码审计:

preg_match函数:一般形式是preg_match("/xxxx/",$b,$c),其中$c用于储存结果,可以省略preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)
这里结合下面的die函数,过滤掉了&、/、?、*等字符,由[\x{00}-\x{20}]还过滤掉ascll码为0~32的字符,其中\x为正则表达式中的十六进制转义字符preg_match("/ /", $ip)
这里就是过滤掉空格的地方了,但是由于刚刚那个函数还过滤掉了一点字符,所以有些空格绕过没法生效preg_match("/bash/", $ip)
这里过滤掉bash字符串preg_match("/.*f.*l.*a.*g.*/", $ip)
带有形如.*等字符是正则表达式贪婪匹配的特征,我在下面再详细讲讲$a = shell_exec("ping -c 4 ".$ip);
shell_exec函数跟system之类的差不多,是执行系统命令的函数,这里是用shell_exec函数执行一个ping命令 ,而-c 4表示了回显请求数量为4

贪婪匹配:

正则表达式中,含有形如.*或.+等字符则代表正则表达式采用贪婪匹配

例子:

设$key='aaacccbbb'
preg_match("a.*b",$key)
则会匹配到aaacccbbb,贪婪匹配就是往字符串越多的方向匹配

这道题中的贪婪匹配的正则表达式为:

preg_match("/.*f.*l.*a.*g.*/", $ip)

这就表明他会按flag的依次顺序匹配字符串,即使是ffflaggg也会被匹配,但flag这四个字符是依次的,如果是形如gfla就没法匹配。当然正常情况下正则表达式是区分大小写的,也就是小写只能匹配小写,大写只能匹配大写,加上/i才不区分大小写。

回到解题,我们之所以空格过滤后没有办法打开flag.php的原因是我们的payload是/?id=127.0.0.1;cat$IFS$1flag.php,很显然第三次正则表达式过滤掉了flag这个字符串,那我们就没有办法直接输入flag了,但文件名摆在那里,一定要用flag,要绕过这个过滤,有以下方法。

方法一:

由于下面的代码时是

$a = shell_exec("ping -c 4 ".$ip)

这里注意,他用的是“ ”而不是‘ ’。双引号会对字符串中的变量进行解析,单引号则不会,而前面的正则表达式过滤flag也只是从字符串上检查是否有flag的字样而已,并没有解析变量,而下面解析了。

payload:

然后就可以在这里找到flag了

方法二:

这个方法需要getshell以及将字符串转化为base64编码。

先提一个知识点

在执行系统命令中,|号有个作用
它可以将前一个命令的输出作为下一个命令输入的参数
例如:echo cat flag|sh就会执行cat flag

payload:

注意这里的base64 -d会输出解码后的base64编码

flag还在这里找

方法三(内联执行):

payload:

?ip=127.0.0.1;cat$IFS$1`ls`

这里的作用是cat用ls命令出来的文件。或者说将``里的输出作为参数传给cat

flag还在那里

这篇关于[BUUCTF]-Web:[GXYCTF2019]Ping Ping Ping解析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

SpringCloud动态配置注解@RefreshScope与@Component的深度解析

《SpringCloud动态配置注解@RefreshScope与@Component的深度解析》在现代微服务架构中,动态配置管理是一个关键需求,本文将为大家介绍SpringCloud中相关的注解@Re... 目录引言1. @RefreshScope 的作用与原理1.1 什么是 @RefreshScope1.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

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

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

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Spring MVC使用视图解析的问题解读

《SpringMVC使用视图解析的问题解读》:本文主要介绍SpringMVC使用视图解析的问题解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC使用视图解析1. 会使用视图解析的情况2. 不会使用视图解析的情况总结Spring MVC使用视图