前言:
在之前校招面試中,sql被問到頻率是真的高,當初為了能夠在sql這塊加分,看了不少書籍,在網上也找了不少資料,走了不少彎路,慶幸的是,每次面試官問到sql相關知識,我基本都能對答如流,而且還能從一個小的知識點扯出一大堆的那種,所以呢,今天我想詳細給大家分享一下我都學習了啥,文中會給出書籍 + 看過的資料。
SQL入門
sql 入門隨便找一個教程就可以了,我看的是《SQL Server 從入門到精通》《SQL注入攻擊與防御》這兩本書,跟著書敲代碼即可,感覺一兩周周時間就可以快速刷完了,反正命令不用死記硬背,需要用的時候,翻開書本會用就行了,后面去刷一刷 sql 的練習題,
入門階段最重要的就是要大致知道 sql 有哪些關鍵字,還有就是關鍵字直接的執行順序,例如像 join,have,order by,聚合函數等等,知道個大概就行,之后要多練習,否則很容易一問三不知,至于那里練習,我上面已經跟大家說了。
SQL注入
什么是SQL注入
SQL注入即是指web應用程序對用戶輸入數據的合法性沒有判斷或過濾不嚴,攻擊者可以在web應用程序中事先定義好的查詢語句的結尾上添加額外的SQL語句,在管理員不知情的情況下實現非法操作,以此來實現欺騙數據庫服務器執行非授權的任意查詢,從而進一步得到相應的數據信息
SQL的類型 Structured Query Language
- DQL: Query, select
- DML: Manual, insert update delete
- DDL: Define, create drop alter
- DCL: Control, grant revoke commit rollback
- 函數數:字符串函數、數字函數、日期函數
- 運算符:算術運算符、比較運算符、邏輯運算符、位運算符
IPv4地址
192.168.1.110
1100 0000 1010 1000 0000 0001
端口
- FTP 21
- SSH 22
- Tomcat 8080
- MySQL 3306
- redis 6379
域名(domain name)
- 頂級域名.com .net .org
- 國別域名.cn (中國).us (美國)jp (日本)
子域名:
www.baidu.com、 map.baidu.com、 tieba.baidu.com
DNS (Domain Name System)
DNS解析流程
端口和文件
項目架構
SQL注入的發生
如何獲取數據庫信息
- show命令
- select + 函數
- 系統庫
MySQL系統庫(5.7)
GET請求
http://localhost/school/url.php?id = 1
參數會如何處理?
user=admin&password=123456
"select * from test where user = ” + user + " and password = ” + password
怎么傳入SQL?
如何結束一個SQL?
點查詢分析器上的紅方塊,或者直接終止進程.不過,SQL2000這樣做,語句就丟失了,但是2005在打開查詢分析器時會提示是否恢復.
如何忽略后續語句?
void Func(int _flag)
{
try
{
if (_flag & 1> 0)
{
_falg &= ~1;
statement1
}
if (_flag & 2> 0)
{
_falg &= ~2;
statement2
}
if (_flag & 4> 0)
{
_falg &= ~4;
statement3
}
...
}
catch (Exception ex)
{
//如何返回使繼續下意語句的執行
//即:如果statement1出錯,不理會,繼續執行statement2...
Func(_falg);
}
}
什么語句可以包含兩個以上的select?
1.
select * from test where class = 1 or class = 2 order by id desc
2.
const String strconn = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=Z:\test.mdb";
OleDbConnection conn=new OleDbConnection(strconn);
DataSet ds=new DataSet();
conn.Open();
string sql="select * from test where class = 1 order by id desc";
OleDbCommand cmd=new OleDbCommand(sql,conn);
OleDbDataAdapter adapter1=new OleDbDataAdapter(cmd);
adapter1.Fill(ds,"class1");
sql="select * from test where class = 2 order by id desc";
adapter1.SelectCommand.CommandText = sql;
adapter1.Fill(ds,"class2");
conn.Close();
SQL注入的完整流程
- 判斷是否可以注入
- 獲得數據庫名
- 獲得集名
- 獲取列名
- 獲得數據
其他知識
哈希破解
哈希算法可以檢驗信息是否是相同的,這樣的優勢可以節省重復文件傳送的時間。
舉一個生活中很平常的例子,我們在生活工作中會使用一些軟件給別人傳送文件數據,如果有人傳送了一份文件給一個人,然后又有一個人傳送了相同的文件給了另外一個人,那么這個社交軟件在第二次傳送文件的時候會對比兩次傳送的哈希值,發現是相同的,該軟件就不會再次上傳文件給服務器了。
除此之外,哈希算法還可以檢驗信息的擁有者是否真實。
比如,我們在一個網站注冊一個賬號,如果網站把密碼保存起來,那這個網站不論有多安全,也會有被盜取的風險。但是如果用保存密碼的哈希值代替保存密碼,就沒有這個風險了,因為哈希值加密過程是不不可逆的
子域名挖掘
URL采集