首页 > 其他分享 >NSS 1

NSS 1

时间:2024-01-17 21:47:49浏览次数:16  
标签:NSS IFS cat 空格 flag 绕过 txt

[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

$9 是一个位置参数变量,表示传递给脚本或函数的第九个参数,比如cat$IFS$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编码的空格,将变量赋值,再使用命令进行执行

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

标签:NSS,IFS,cat,空格,flag,绕过,txt
From: https://www.cnblogs.com/Crayon-Blog/p/17971220

相关文章

  • 解决openssh无法登录的问题
    背景在安装完openssh之后,还是不能解决登录的问题。报错信息如下:ITISPOSSIBLETHATSOMEONEISDOINGSOMETHINGNASTY!Someonecouldbeeavesdroppingonyourightnow(man-in-the-middleattack)!Itisalsopossiblethatahostkeyhasjustbeenchanged.Thefinge......
  • docker mysql8使用SSL及使用openssl生成自定义证书
    修改my.cnfvi/docker_data/mysql/conf/my.cnf[client]default-character-set=utf8mb4[mysql]default-character-set=utf8mb4[mysqld]character-set-server=utf8mb4default_authentication_plugin=mysql_native_password#增加sslssl保存,重启mysql容器dockerrestartmysql-8.0.23......
  • NSSCTF Round#16 Basic crypto misc-wp
    CRYPTOpr题目CRTfromCrypto.Util.numberimport*importrandomflag=plaintext='NSSCTF{****************}'charset='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'padding_length=100-len(plaintext)for_inr......
  • NSSCTF Round#16 Basic -Web wp
    RCE但是没有完全RCE<?phperror_reporting(0);highlight_file(__file__);include('level2.php');if(isset($_GET['md5_1'])&&isset($_GET['md5_2'])){if((string)$_GET['md5_1']!==(string)$_GET['md5_2�......
  • NSSCTF Round#16 Basic WriteUp
    NSSCTFRound#16Basicwp目录NSSCTFRound#16Basicwp一.pwn1.nc_pwnre2.ret_text一.pwn1.nc_pwnrenc连接得到题目,给了一段汇编代码以及40个十六进制数字分析代码可知,将一个字符串与10h即16进行异或运算,二次异或运算得到字符串TlNTQ1RGe1dFTGMwTV9UMF9wV25fdzByMWQhfQ......
  • openssl生成自签名证书
    1.key的生成opensslgenrsa-des3-outserver.key2048这样是生成rsa私钥,des3算法,openssl格式,2048位强度。server.key是密钥文件名。为了生成这样的密钥,需要一个至少四位的密码。可以通过以下方法生成没有密码的key:opensslrsa-inserver.key-outserver.keyserver.key......
  • Linux使用OpenSSL生成SSL证书
    实现本地nginxip+ssl的访问注意openssl和ssh-keygen的区别生成私钥文件opensslgenrsa-des3-outlocalhost.key2048去除口令,否则启动nginx时需要密码opensslrsa-inlocalhost.key-outlocalhost.key创建请求证书opensslreq-new-keylocalhost.key-outlocalhost......
  • ubuntu 20.04.6 LTS (Focal Fossa) 升级openssh9.6p1,zlib1.3,openssl3.2.0
    #卸载opensshapt-getremoveopenssh-serveropenssh-client-y #更新APT软件包列表apt-getupdate-y #安装libpam0g-dev和gccapt-getinstalllibpam0g-devbuild-essential-y #安装zlibtar-zxvfzlib-1.3tar.gz./configure--sharedmake&&mak......
  • 麒麟系统升级openssh至9.5p1
    当前环境:升级openssh需要三个包zlib-1.2.13.tar.gz、openssl-1.1.1t.tar.gz、openssh-9.5p1.tar.gz下载地址:zlib-1.2.13.tar.gzhttp://zlib.net/fossils/zlib-1.2.13.tar.gz  openssl-1.1.1t.tar.gzhttps://www.openssl.org/source/old/1.1.1/openssl-1.1.1t.tar.gzopen......
  • openssh升级对应问题解决方案
    问题1:./openssl:errorwhileloadingsharedlibraries:libssl.so.1.1:cannotopensharedobjectfile:Nosuchfileordirectory解决方案:cp/usr/local/openssl1.1.1/lib/libssl.so.1.1/lib64/cp/home/tydl/openssl-1.1.1u/libcrypto.so.1.1/lib64/ 问题2:/etc/ssh/s......