写点什么

SQL 入门到入魔(SQL 注入原因和流程)

用户头像
Machine Gun
关注
发布于: 3 小时前


前言:

 在之前校招面试中,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)



POST 请求



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采集

【配套资料源码】



用户头像

Machine Gun

关注

还未添加个人签名 2021.03.28 加入

需要获取网络安全/渗透测试学习资料工具的朋友可联系V:machinegunjoe666 免费索取

评论

发布
暂无评论
SQL 入门到入魔(SQL注入原因和流程)