命令执行

本文讲述了作者通过$_GET参数,利用preg_match和正则表达式理解网站的安全机制,逐步通过system命令执行和eval函数执行字符串,最终获取CTF旗标的过程。
摘要由CSDN通过智能技术生成

$_get[‘ ’]在harkber的网址后加上?加参数名=什么,即可输入参数

system()是将命令传给主机运行、

preg_match() 函数用于进行正则表达式匹配

正则表达式看不懂,所以我先访问url?c=system("ls");查看目录里有什么文件,发现可以运行且有flag.php和index.php。

但是不知道怎么把flag弄出来,所以看了wp

wp说直接访问这个url?c=system("tac%20fla*")

经过调查发现tac是个命令符,作用是将文件显示出来

我试着访问?c=system("tac flag.php");失败

再看*和?查询是通配符用来模糊搜索文件,当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。

我猜测 if(!preg_match("/flag/i", $c))的意思是c变量中不能出现flag这个词,所以用通配符模糊

我再访问?c=system("tac fla?.php");失败

又看了其他wp,发现

eval() 函数把字符串按照 PHP 代码来计算。

该字符串必须是合法的 PHP 代码,且必须以分号结尾。

那么要输出flag还需要输出语句于是

我访问?c=echo system("tac fla?.php");得到flag

ctfshow{62036f7c-6c8f-4db0-b7f2-3fc1ec83b7d2}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值