[SWPUCTF 2021 新生赛]finalrce

我们要做的就两点:

1、绕过正则表达式

2、由于exec不返回命令执行结果,所以要进行输出重定向


介绍一下exec()函数:

exec(string $command, array &$output = null, int &$result_code = null): string|false

exec() 执行 command 参数所指定的命令。如果提供了 output 参数, 那么会用命令执行的输出填充此数组, 每行输出填充数组中的一个元素。如果同时提供 output 和 result_code 参数,命令执行后的返回状态会被写入到result_code。

返回命令执行结果的最后一行内容。


这里需要用到一个tee命令

tee命令用于读取标准输入的数据,并将其内容输出成文件。

tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。


查看正则表达式,不难发现反斜杠(/)和单引号(')都没有被注释掉,构造payload:

/?url=l\s / | tee 1.txt或/?url=l's' / | tree 1.txt

将根目录/的内容输出到1.txt中


再访问1.txt的内容:

/1.txt

可以看到flag文件名了,得知flag的文件路径是/flllllaaaaaaggggggg


由于正则表达式中有la,所以文件名也是需要绕过一下,否则会访问失败

(改成/flllll\aaaaaaggggggg)

cat可以用tac替代,也可以ca\t或c\at或c'at或ca't绕过


构造payload:

/?url=tac /flllll\aaaaaaggggggg | tee 2.txt

将flllllaaaaaaggggggg的文件内容输出到2.txt中

再访问2.txt查看flag内容:

得知flag为:

NSSCTF{2bc53718-fe72-404c-b137-b0dbfe9511d1}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值