創(chuàng)業(yè)做網(wǎng)站需要哪些必備條件小程序seo
1.[LitCTF 2023]Follow me and hack me
1)進入題目環(huán)境,提示get傳參,post傳參
2)看看源碼,也沒啥
3)直接用hackbar,傳入對應(yīng)參數(shù)即可得到FLAG
3)但是掃描出來它后端還有東西,
4)打開原來是彩蛋
2.[BJDCTF 2020]easy_md5
1)進入環(huán)境后不管輸入什么
他只會修改passward?頁面沒有回顯 沒反應(yīng)
2)一頓輸入操作后無果 只能通過url看到是get傳參 用burp抓包看看
這里學(xué)一下關(guān)于md5($pass,true)的注入
關(guān)于這題
發(fā)現(xiàn)了這里它提示 select * from `admin` where password=md5($pass,true)
也就是通過注入來進行繞過 ? ?這里先看下php MD5函數(shù)的用法
32位16進制字符串的意思是:將MD5加密得到的128 位長度的"指紋信息",以每4位為一組,分為32組,每組以轉(zhuǎn)換為16進制,進行轉(zhuǎn)換得到一個32位的字符串。
總的來說就是我們平時看到的MD5加密的結(jié)果
16位原始二進制格式的字符串的意思是:將128 位長度的"指紋信息"分組轉(zhuǎn)化為16位的一個字符串,然后兩個字符為一組,依照ACILL碼轉(zhuǎn)化為字符串。
也就是說,就是當md5函數(shù)的第二個參數(shù)為true時,該函數(shù)的輸出是原始二進制格式,會被作為字符串處理。
這里進行繞過就是需要構(gòu)造一個語句使得sql語句永恒為真?
像這樣的話 select * from `admin` where password=’’or’xxx??? 當or后面的值為true時即可完成注入
如此:要達到注入。首先要有一個字符串,這個字符串經(jīng)過md5得到的16位原始二進制的字符串能幫我們實現(xiàn)sql注入。首先or這個字符串是必要的,因為需要構(gòu)造永恒為真的語句。同時為了配對原先sql語句里面有的單引號進行閉合
這里再看下ffifdyop的效果
<?php
$str = "ffifdyop";
echo "The string: ".$str."<br>";
echo "TRUE - Raw 16 character binary format:如下所示: ".md5($str, TRUE)."<br>";
echo "FALSE - 32 character hex number: ".md5($str)."<br>";
?>
運行后如下
使用ASCII碼在線轉(zhuǎn)換器看效果
3)然后查看頁面源代碼發(fā)現(xiàn)需要傳入兩個參數(shù)?
滿足a與b的參數(shù)不同且兩者的MD5相同就會返回正確的值
注意這里是弱比較==
這里有兩種方法 第一種采用數(shù)組傳參 數(shù)組傳參方式格式為num[]=w ?num為參數(shù)(例如本題的a) w為傳入的值 最終傳入的值如下
?a[]=1&b[]=2 ?因為md5不能處理數(shù)組,md5 函數(shù)哈希數(shù)組會返回 NULL。從而達到兩者相等進行繞過。
4)這里只能使用數(shù)組傳參了 之前的那個頁面由于是弱比較 所以有兩種方法可以進行MD5繞過
這里是強比較所以只能使用數(shù)組 不過這道題 ?數(shù)組可以通殺繞過這兩層的MD5
Payload如下 ?post傳參
param1[]=2?m2[]=3
3.[ZJCTF 2019]NiZhuanSiWei
1)
file_get_contents()函數(shù)用于讀取文件中的內(nèi)容,并將其作為字符串返回。它通常用于讀取文本文件或從遠程URL獲取內(nèi)容。在本文中,我們將介紹使用file_get_contents()函數(shù)來讀取文件的基本方法。
語法
file_get_contents(filename, include_path, context, start, max_length)
參數(shù)
filename:必需,指定要讀取的文件名稱,也可以是一個URL,支持絕對路徑和相對路徑。
include_path:可選,如果設(shè)置了這個參數(shù),PHP將在include_path(設(shè)置在php.ini中)中查找文件。如果沒有設(shè)置,PHP將在當前腳本目錄中查找文件。
context:可選,是一個HTTP請求的上下文選項數(shù)組,通常在與文件讀取和遠程URL訪問相關(guān)的情況下使用。
start:可選,規(guī)定從文件中的哪個位置開始讀取,以字節(jié)數(shù)表示。
max_length:可選,規(guī)定從文件中讀取的最大字節(jié)數(shù)。
preg_match()函數(shù)、
語法
-
$pattern:要搜索的模式,字符串類型。
-
$subject:輸入字符串。
-
$matches:如果提供了參數(shù)matches,它將被填充為搜索結(jié)果。 $matches[0]將包含完整模式匹配到的文本, $matches[1] 將包含第一個捕獲子組匹配到的文本,以此類推。
-
$flags:可以被設(shè)置為以下標記值的組合:PREG_UNMATCHED_AS_NULL、PREG_OFFSET_CAPTURE
-
$offset:可選參數(shù) offset 用于 指定從目標字符串的某個位置開始搜索(單位是字節(jié))。
-
返回值:匹配次數(shù)。 它的值將是0次(不匹配)或1次,因為preg_match()在第一次匹配后 將會停止匹配。發(fā)生錯誤preg_match()返回 FALSE。
2)
$text是一個變量,file_get_contents不能讀取一個變量
3)分析一下:
有三個傳入的變量名,猜測最后進入else可以出flag;
首先我們輸入的t要滿足t=welcome to the zjctf
嘗試使用data偽協(xié)議去給他賦值,在一個文件里面。payload:/?text=data://text/plain,welcome to the zjctf
成功進入
4)然后需要用url語句讀取文件內(nèi)容
5)里面是一串basse64編碼,讀取之后是一篇新的php文本
得到如下代碼
<?php class Flag{ //flag.php public $file; public function __tostring(){ if(isset($this->file)){ echo file_get_contents($this->file); echo "<br>";return ("U R SO CLOSE !///COME ON PLZ");} }
}
?>
6)useless.php里寫的file_get_contents直接去讀flag.php,構(gòu)造反序列化,poc:
<?php
class Flag
{ //flag.phppublic $file = 'flag.php';
}
$a = new Flag();
echo urlencode(serialize($a));
7)然后將得到的序列化語句傳入,查看源碼即可得到flag
4.[LitCTF 2023]Ping
1)進入環(huán)境,就是一個只能ping ip地址的文本框,這里也是直接ping一下127.0.0.1這個地址
2)ping出來一堆東西,沒太看懂,還是選擇抓包試試
3)直接修改command=|cat /flag,然后發(fā)包即可得到flag
4)其他解法
源碼里有一個用于過濾的函數(shù),這是一段插在 html 中的 js 代碼。
函數(shù)的大致作用是嚴格匹配 ipv4 地址,比如 127.0.0.1 這種格式,所以域名都不可以。被禁了
對于這種寫在前端的驗證函數(shù),不需要去研究如何繞過,直接禁掉 js 代碼的調(diào)用就好了,瀏覽器應(yīng)該都有這個功能。我是用火狐上的一個插件來禁用 js 代碼:
打開后,此時再去輸入命令,發(fā)現(xiàn)沒有任何過濾。
flag 在根目錄下,用 ls 不斷查找每一級目錄下的文件,最后發(fā)現(xiàn) flag 在根目錄下。
直接查看根目錄下的 flag :
|cat /flag
就能得到flag
5.[NSSCTF 2022 Spring Recruit]ezgame
1)打開環(huán)境后是一個游戲界面
2)看看源碼,沒多大用,掃出來幾個網(wǎng)頁,也沒多大用
3)f12查看源碼,到j(luò)s出進行操作
4)打開覆蓋新建一個空文件放進去,然后點擊目標文件,點擊覆蓋,右下角變紫色就成功,然后修改分數(shù)
5)改好后隨便玩一下,救出flag了