CTF解題筆記(1)
1.因缺思汀的繞過
開啟後是一個登入框類似的東西,檢視頁面原始碼可以看到有source:source.txt的字樣
開啟連線:http://ctf5.shiyanbar.com/web/pcat/source.txt
可以看到登入的php邏輯:
<?php
error_reporting(0);
if (!isset($_POST['uname']) || !isset($_POST['pwd'])) {
echo '<form action="" method="post">'."<br/>";
echo '<input name="uname" type="text"/>'."<br/>";
echo '<input name="pwd" type="text"/>'."<br/>";
echo '<input type="submit" />'."<br/>";
echo '</form>'."<br/>";
echo '<!--source: source.txt-->'."<br/>";
die;
}
function AttackFilter($StrKey,$StrValue,$ArrReq){
if (is_array($StrValue)){
$StrValue=implode($StrValue);
}
if (preg_match("/".$ArrReq."/is",$StrValue)==1){
print "姘村彲杞借垷錛屼害鍙禌鑹囷紒";
exit();
}
}
$filter = "and|select|from|where|union|join|sleep|benchmark|,|\(|\)";
foreach($_POST as $key=>$value){
AttackFilter($key,$value,$filter);
}
$con = mysql_connect("XXXXXX","XXXXXX","XXXXXX");
if (!$con){
die('Could not connect: ' . mysql_error());
}
$db="XXXXXX";
mysql_select_db($db, $con);
$sql="SELECT * FROM interest WHERE uname = '{$_POST['uname']}'";
$query = mysql_query($sql);
if (mysql_num_rows($query) == 1) {
$key = mysql_fetch_array($query);
if($key['pwd'] == $_POST['pwd']) {
print "CTF{XXXXXX}";
}else{
print "浜﹀彲璧涜墖錛�";
}
}else{
print "涓€棰楄禌鑹囷紒";
}
mysql_close($con);
?>
可以看到,這裡面有SQL的一個過濾器,把一些sql的關鍵字例如benchmark,join等都過濾了
而且sql查詢語句是:
SELECT * FROM interest WHERE uname = '{$_POST['uname']}
又由:mysql_num_rows($query) == 1
這個判斷可以得知資料庫中的記錄就只有一條,這部分邏輯大概就是然後通過提交的uname查詢出結果,如果結果只有一條則繼續,如果查詢結果中的pwd欄位和post過去的key值相同,則給出flag。這時就要用到注入的一個小技巧,我們使用group by pwd with rollup 來在查詢結果後加一行,並且這一行pwd欄位的值為NULL
在mysql官方文件中是這樣描述rollup函式的:
大概的意思就是在GROUP BY子句中使用WITH ROLLUP會在資料庫中加入一行用來計算總數,ROLLUP子句的更加詳細的用法,可以參考mysql的官方文件,此處就不多做贅述了。
再結合limit和offset就可以寫出一個payload
即:輸入的使用者名稱為:' or 1=1 group by pwd with rollup limit 1 offset 2 #
這裡解釋一下此時執行的SQL:
SELECT * FROM interest where uname=' ' or 1=1
group by pwd with rollup (在資料庫中新增一行使得pwd=NULL)
limit 1 (只查詢一行)
offset 2 (從第二行開始查詢)
#註釋
此時密碼只要為空即可查詢成功
2.登陸一下好嗎??
解題路徑:http://ctf5.shiyanbar.com/web/wonderkun/web/index.html
題目說這個過濾了很多敏感符號,於是先構造一下常用的payload:' or 1=1 #
發現or 和 #都被過濾掉了,通過測試發現--也被過濾了,看起來是很嚇人,但是不過幸好'沒有被過濾,於是構造payload:
username = travis'='
password=travis'='
這個時候成果獲得flag
為什麼這樣可以繞過呢?
當提交username=travis'='&password=travis'='
語句會變成如下:
select * from user where username='travis'='' and password='travis'=''
這時候還不夠清晰,我提取前一段判斷出來(後面的同樣道理)
username='travis'=''
這是有2個等號,然後計算順序從左到右,
先計算username='travis' 一般資料庫裡不可能有我這個小名(若有,你就換一個字串),所以這裡返回值為0(相當於false)
然後0='' 這個結果呢?看到這裡估計你也懂了,就是返回1(相當於true)
所以這樣的注入相當於
select * from user where 1 and 1
也等於 select * from user
(這題只有篩選出來的結果有3個以上才會顯示flag,沒有就一直說“對不起,沒有此使用者!!”)
面那個比較是弱型別的比較,
以下情況都會為true
1='1'
1='1.0'
1='1後接字母(再後面有數字也可以)'
0='除了非0數字開頭的字串'
(總體上只要前面達成0的話,要使語句為true很簡單,所以這題的萬能密碼只要按照我上面的法子去寫一大把)
相關推薦
CTF解題筆記(1)
1.因缺思汀的繞過 開啟後是一個登入框類似的東西,檢視頁面原始碼可以看到有source:source.txt的字樣 開啟連線:http://ctf5.shiyanbar.com/web/pcat/
CTF解題筆記(2)
簡單的sql注入: 這三道題目主要是檢測繞過過濾的功底: 1.解題路徑:http://ctf5.shiyanbar.com/423/web/ 先提交1試試看: 發現顯示是正常的,然後再提交id=1'
CTF解題筆記(3)
題目連結:http://ctf5.shiyanbar.com/web/index_3.php 還是一個SQL注入的題目,以下使用SQLMAP爆破的方式以及手工注入的方式來解決這道題目: (1)sqlm
解題筆記(31)——從數列1,2...n中隨意取幾個數,使其和等於m
問題描述:輸入兩個整數n和m,從數列1,2.......n中隨意取幾個數,使其和等於m,要求將其中所有的可能組合列出來。 思路:這個問題其實揹包問題的變形,本文給出兩種解法。 解法一:用遞迴,效率可能低了點。假設問題的解為F(n, m),
Angular 4 - The Basics 筆記(1): Install
install rst logs nod first log 筆記 npm app Install Node.js Install Angular CLI sudo npm install -g @angular/cli Set-up new app
JAVA學習筆記(1)——a++與++a的區別
col int 演示 opera 解析 代碼 數據 ++i div 需求:此博客用於解釋i++與++i的區別。 過程: 1、名稱解釋 ++:自增,即在原有數據基礎上+1,再賦給原有數據。 2、程序演示 (1)代碼: 1 class OperateDemo 2 { 3
vray學習筆記(1)
com .cn 過程 分組 是把 皮膚 mon image 基本 vray是個什麽東西? 它是個渲染器。 渲染器是個什麽東西? 渲染器就是3d軟件裏面把模型畫成一張圖片的東西,渲染的過程就是把3D物體變成2D畫面的過程。 模型是個什麽東西? 模型就是模型,它由兩部分組成,第
Python學習手冊筆記(1):Python對象類型
python 在Python中一切皆對象,Python程序可以分解為模塊、語句、表達式及對象。如下所示:1 程序由模塊組成2 模塊包含語句3 語句包含表達式4 表達式建立並處理對象 內置對象(核心類型):1)數字:>>> 2+2 #整數加法4>>&g
《深入理解C指針》學習筆記(1)--- 指針之外
結構 def form 學習 編程 stdlib.h struct 一個 char C語言從誕生之初就非常善於和硬件打交道,經過這麽多年的發展之後,其靈活性和超強的特征是受到幾乎所有程序員的肯定。C語言的這種靈活性很大一部分程度來源與C指針,指針為C語言動態操控內存提供
CS231n 學習筆記(1) Image CLassification
eight function 分享 便是 數據驅動 rain 分類問題 很難 特征 圖像分類是計算機視覺中的一項核心任務,那麽什麽是圖像分類? 例如,給你一個標簽集,其中包括(貓、狗、鳥、卡車、飛機...等) 然後給你一張圖片,那麽這張圖片屬於哪個類別呢?這就是一個分類
數據結構與算法(刺猬書)讀書筆記(1)----數組
split() ring 此外 結果 shift 即使 cnblogs 操作符 main 在JavaScript中,數組其實是一種特殊的對象,用來表示偏移量的索引是該對象的屬性,所以JavaScript的數組本質上是對象。同時這些數字索引在內部會被轉換成為字符串類型,因為J
bootstrap 學習筆記(1)---介紹bootstrap和柵格系統
優先 cal 圖片 應用 尺寸 文件中 lin png ice 學習前端許久,對於布置框架和響應瀏覽器用html 和javascript 寫的有點繁瑣,無意間看到這個框架,覺得挺好用的就開始學習了,但是這個框架上面有很多知識,不是所有的都要學的,故將學習筆記和覺得重點的
《挑戰程序設計競賽》學習筆記 (1)
設計 allow 而且 硬幣 ack ket 程序設計 all 不能 2.2 貪心法 貪心法是遵循某種規則,不斷貪心選取當前最優策略的算法設計方法。 貪心法的求解思想是通過叠代地選取當前問題的局部最優解法來達成總體最優解,在叠代的過程中不斷地產生局部最優解和下一個與之前
AngularJs學習筆記(1)——ng-app
oot you ctrl span fun 代碼 問題 筆記 doctype 眾所周知: ng-app 指令用於告訴 AngularJS 應用當前這個元素是根元素。 所有 AngularJS 應用都必須要要一個根元素。 HTML 文檔中只允許有一個 ng-app 指令,如果
Nordic nRF52832 學習筆記(1) 介紹,入門,與準備工作
例程 盜版 path pdf 規範 準備 但是 依然 可能 近來,物聯網已成為大勢所趨,VR與AR正方興未艾,各種手環、遙控、智能家居也在粉墨登場。技術前沿的領航者們已經快馬加鞭,各種意誌與暗示也在上傳下達。物聯網,無線通訊,移動互聯,將成為新的目標與寵兒。最近開的電賽
javascript 高級程序設計學習筆記(1)
元素 新的 logs html light begin 知識 gin nbsp 知識補充: var box = document.querySelector(‘#box‘); //"beforebegin" ,在當前元素之前插入一個緊鄰的同輩元素; box.ins
Python3入門筆記(1) —— windows安裝與運行
python安裝 color 聲明 返回值 down 如果 ++ 這一 ges Python的設計哲學是“優雅”、“明確”、“簡單”。這也是我喜歡Python的理由之一 Python的安裝: 1.進入Python官方網站下載安裝包 點擊導航欄的 Downloads 會自動
Postgresql 學習筆記(1)
sql postgre 一、環境#配置遠程連接 su postgres vim /var/lib/pgsql/9.4/data/postgresql.conf 編輯配置文件 listen_address=’localhost’ 前面的註釋#去掉,並把’localhost’該為’*’;
android BSP與硬件相關子系統讀書筆記(1)android BSP移植綜述
tin 不用 googl csdn splay 編寫 app開發 意圖過濾器 trac 從linux驅動轉行至Android驅動開發大半年了,一開始就產生了一個很糾結目標和問題,就是不停的google如何porting android!這個問題得到的結果對於初出茅廬的我,感
node指南開發練習筆記(1)-- express
ann 意思 mic err -- 執行 res 代碼 install 邊看《node.js開發指南》邊編寫書中代碼,發現很多都跟書上的套路不一致。遇到express開發的一些問題,當發現報‘express‘ 不是內部或外部命令時,查看npm install express