一、題目


一進來先看看能否用構造單引號閉合:

發現提示報錯,可以操作了
二、解題
方法一:handler命令打開


先查列數,這里是輸入2沒報錯,但輸入3報錯了,所以是2列
試試聯合查詢:

回顯資訊是
return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
$inject是我們在輸入框中提交的變數名,preg_match()在這里的作用是檢測關鍵字,猜測會被過濾掉,其中聯合查詢要用的select,where都不行,換個思路
這個時候想到堆疊注入
sql命令中,我們通常用 ; 來表示一句命令的結束,那么在多個命令陳述句中間插入 ; ,這些命令就可以一起執行,而聯合查詢中無論是union 還是union all ,能執行的陳述句型別都是有限的
直接查表
1';show tables;#

這一長串數字非常可疑,把里面的列show出來看看

果然有flag
現在我們只需要打開這個flag
在MySQL中有一種命令叫 handler
通過HANDLER tbl_name OPEN打開一張表,無回傳結果,實際上我們在這里宣告了一個名為tb1_name的句柄,
通過HANDLER tbl_name READ FIRST獲取句柄的第一行,通過READ NEXT依次獲取其它行,最后一行執行之后再執行NEXT會回傳一個空的結果,
handler命令與select命令區別在于,前者一次只回傳一行,而后者會回傳所有相關結果
那么在這里直接構造payload
?
1';handler `1919810931114514` open;handler `1919810931114514` read first;#

直接爆出flag
方法二:用alert和rename命令改名后查詢
rename 用于修改 table 的名稱
alter 用于修改表中欄位的屬性
參考:SQL Injection8(堆疊注入)——強網杯2019隨便注_kid的博客-CSDN博客SQL Injection8(堆疊注入)——強網杯2019隨便注前言前面參加強網杯線上賽,親身體驗了一把ctf從入門到入土,從打ctf變成被ctf打…這里結合里面的題來對里面的知識點進行一個學習總結隨便注是一道sql注入題,因為過濾規則十分強大,所以很難…這里會用到堆疊注入的知識,堆疊注入前面有所了解,覺得并不難,所以也沒練習過,但做這道題的時候就又些懵了,堆疊注入原理在SQL中,...https://blog.csdn.net/qq_26406447/article/details/90643951
1. 將已有的表words改名為words1
2. 表1919810931114514改名為words
3. 將新的表words中的列flag改為id
構造payload
1';RENAME TABLE `words` TO `words1`;RENAME TABLE `1919810931114514` TO `words`;ALTER TABLE `words` CHANGE `flag` `id` VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;show columns from words;#
最后用1’ or 1=1 #查詢就得到flag
三、總結
1. 注入陳述句中的關鍵字被形如preg_match()、mb_substr()、mb_subpos()等函式檢測過濾后需要考慮其他方法,如堆疊注入,布爾盲注,時間盲注等
2. 注入大致步驟:檢測能否注入->檢測注入型別->order by查列數->show databases查庫->show tables查表->show columns from TABLE_NAME查欄位->select或handler開檔案
3. 多看大佬的文章!!!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/319630.html
標籤:其他
上一篇:CISP 考試教材《第 7 章 知識域:資訊安全支撐技術》知識整理
下一篇:第一周學習計劃
