前言:

在之前校招面试中,sql被问到频率是真的高,当初为了能够在sql这块加分,看了不少书籍,在网上也找了不少资料,走了不少弯路,庆幸的是,每次面试官问到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
  • 8080
  • 3306
  • 6379

域名(domain name)

  •  顶级域名.com .net .org
  •  国别域名.cn (中国).us (美国)jp (日本)

子域名:

www.baidu.com、 map.baidu.com、 tieba.baidu.com

(Domain Name System)

 

DNS解析流程

 

端口和文件

 

项目

 

SQL注入的发生

 

 如何获取数据库信息

  • show命令
  • select + 函数
  • 系统库

MySQL系统库(5.7)

 


 


 

GET请求

http://localhost/school/url.?id = 1

参数会如何处理?

user=admin&pass=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采集

胜象大百科