sql注入的原理:
通过恶意的SQL语句插入到应用的输入参数中,再在后台数据库服务器上解析执行的攻击。
 
Web程序的三层结构:
  • 界面层( User Interface layer )
  • 业务逻辑层( Business Logic Layer )
  • 数据访问层( Data access layer )
在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构被应用于众多类型的软件开发。
 
有数据驱动的Web应用程序也已从三层架构的思想,也分为三层。
  • 表示层
  • 业务逻辑层(又叫领域层)
  • 数据访问层(又叫储存层)

我们在浏览器中输入我们想要输入的网址,然后业务逻辑层会从本地储存中加载php脚本,然后脚本会连接我们的数据库并且执行SQL语句,数据访问层的数据库管理系统会返回SQL语句并执行结果给web服务器,然后我们的业务逻辑层的web服务器会解析html文件,然后展示给用户。
三层架构是一定要经过中间层的,也可以说是,三层结构是一个线性关系。
 
SQL注入产生的原因及其威胁:
在上面的三层架构中,我们讲到了web服务器毁形象数据访问层发起SQL查询请求,如果全选验证通过的话,就会执行SQL语句。
但是这种代码里的SQL语句执行不会有危险,但是很多情况还是要介个永和的输入数据动态构造SQL语句,如果用户输入的数据构造成恶意的SQL代码的,web应用又未对动态构造的SQL语句使用的参数进行审查,则会带来一项不到的文献。
 
SQL注入带来的危险:
 
  • 猜解后台数据库,这是利用最多的方式,盗取网站的敏感信息。
  • 绕过认证,列如绕过验证登录网站后台。
  • 注入可以借助数据库的存储过程进行提权等操作。
SQL语句攻击步骤:
  • 寻找注入点
  • 判断注入类型/数据库类型
  • 猜解数据库名
  • 猜解数据表名
  • 猜解数据字段名
1.寻找注入点:
意思为我们要找到存在的SQL注入的参数,SQL注入多发生GET或者POST请求的参数中。也有可能在其他地方。eg:UserAgent,Cookie
 
2.判断注入类型/数据库类型:
SQL注入按照不同的分类标准,可以分为
  • 按照参数类型可分为两种:数字型和字符型。
  • 根据数据库返回的结果,可分为回显注入、报错注入、盲注。
  • 按照注入方法,还可以分为联合注入、堆叠注入、宽字节注入、延时注入等。
 
3.猜解数据库名:
猜后台数据库的库名
 
4.猜解数据表名:
成功猜解到数据库名称后,进一步猜解某一个特定数据库中数据表的名称
 
5.猜解数据字段名:
最后是某个特定数据库中特定数据表中的字段,因为获取到字段才能查询数据
 
SQL注入之使用SQL注入进行爆库:
curl命令:
利用URL规则在命令行下工作的文件传输工。
curl命令 是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具,但按传统,习惯称curl为下载工具。
 
我们这边直接实践吧:

在这个地方,我们选择这个东西进行注入。
我们看到了要我们输入ID的题目,我们首先随便输入一个数,比如我现在输入一个1,然后他会返回

URL中的ID=1,说明PHP页面通过了get方法传递参数,我们现在看看他的源代码是什么
<?php
if(isset($_REQUEST['Submit'))
//Get input
sid $_REQUEST['id']
//Check database
$query "SELECT first_name,last_name FROM users WHERE user_id '$id';"
sresuit mysqli_query($GLOBALS["___mysqli_ston"],Squery )or die('<pre>'.((is_object(SGLOBALS["___mysqli_ston"]))mysqli_error
($GLOBALS["___mysqli_ston"]):(($___mysqli_res mysqli_connect_error())?$___mysqli_res false)).'</pre>');
//Get results
while(Srow mysqli_fetch_assoc($result ))
//Get values
$first Srow["first_name"];
Slast Srow["last_name"];
//Feedback for end user
echo "<pre>ID:{Sid)<br />First name:{$first}<br />Surname:{$last}</pre>";
mysqli_close($GLOBALS["___mysqli_ston"]);
?>

  这段代码就是我们刚刚那个html的源代码,我们可以看见

$query "SELECT first_name,last_name FROM users WHERE user_id '$id';"
这个就是我们实际执行的SQL语句,如果我们在id的后面加了一个'的话
会出现这个情况

他返回了数据库报错信息,说明此处是存在SQL漏洞的。
然后我们就要确定注入的类型了:
我们决定使用联合查询语句,是这样的,举个例子
select column_name(s) from table1
UNION
select column_name(s) from table2;
类似于这种格式的语句,我们称之为联合查询语句,其中union运算符可以将两个或者两个以上的select 语句的查询结果合并为一个结果来显示。
 
这个笔记是在我学习蓝桥杯的时候做的一些笔记,希望你们可以学到你们需要的东西,不敢说是原创,其中很多都是课上的东西。也许我做的笔记是又问题的,请一定要在评论区发出来,一边牢固了你们的记忆,而且还帮我纠正了错误(手动狗头),最后谢谢你们看到最后。
 

关于我这周学习SQL注入的一些笔记:的更多相关文章

  1. 2017-2018-2 20179205《网络攻防技术与实践》第十一周作业 SQL注入攻击与实践

    <网络攻防技术与实践>第十一周作业 SQL注入攻击与实践 1.研究缓冲区溢出的原理,至少针对两种数据库进行差异化研究 缓冲区溢出原理   在计算机内部,输入数据通常被存放在一个临时空间内, ...

  2. web安全学习(sql注入1)

    web安全学习(sql注入1) 一.简介 sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句.sql注入可能造成信息泄露以及服务器被控制等危害. ...

  3. WebGoat学习——SQL注入(SQL Injection)

    SQL注入(SQL Injection) 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.攻击者通过web请求提交带有影响正 ...

  4. 通过sqli-labs学习sql注入——基础挑战之less1

    环境准备: Phpstudy  (PHP+Apache+Mysql) Sql-lab 首先了解下基础知识: URL编码: 因为在浏览器中,当我们访问一个网址的时候,浏览器会自动将用户输入的网址进行UR ...

  5. 学习SQL注入---1

    开始接触SQL注入了,最开始根据网上的思路做了两道注入的题,但对于SQL注入如何实现,怎么一个流程还是不理解.后来,在网上查找了很多资料,现在一点点去理解. 1.利用sqlmap注入的时候,不是所有页 ...

  6. 通过sqli-labs学习sql注入——基础挑战之less1-3

    首先,先看一些基础知识吧!!!!本人只是初学者,记录一下自己的学习过程,有什么错误之处请指出,谢谢!大佬请绕过!!!! url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加 ...

  7. 20169214 2016-2017-2 《网络攻防实践》第十一周实验 SQL注入

    20169214 2016-2017-2 <网络攻防实践>SQL注入实验 SQL注入技术是利用web应用程序和数据库服务器之间的接口来篡改网站内容的攻击技术.通过把SQL命令插入到Web表 ...

  8. 《网络攻防》 第十二周作业 SQL注入

    SQL注入实践 1.打开seed虚拟机,使用命令sudo service apache2 start启动apache,发现一条提示,意思就是不能可靠地确定域名,如图 即使右下角标着OK,但我还是不放心 ...

  9. 2019-9-10:渗透测试,基础学习,sql注入笔记

    sql注入1,万能密码,自己写的网站,找到登录窗口,必须和数据库交互,往里插入构造的恶意代码,最后可以直接登录进去,不需要账号和密码,输入的恶意代码成为万能密码,后端拼接的sql语句,SELECT * ...

  10. 再次学习sql注入

    爆所有数据库 select schema_name from information_schema.schemata 先爆出多少个字段 id = 1 order by ?; mysql5.0及以上 都 ...

随机推荐

  1. shell判断字符串结尾

    下面围绕"判断字符串是否以.txt结尾"展开.转变一下也同样适用于"判断字符串是否以.txt开头". 通用的方法 # 方法一.使用grep命令 #!/bin/s ...

  2. 执行docker-compose up -d时出现ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule

    原因是因为防火墙关闭之后需要重启docker服务. 执行: service docker restart 即可.

  3. 在linu系统安装apache全过程(httpd、apr、apr-util、pcre)以及进行相应配置

    1.下载安装包,需要下面3个安装包[root@bes2 apache]# ll总用量 8520-rw-r--r--. 1 root root 1020833 9月 18 17:47 apr-1.5.1 ...

  4. Netty 那些事儿 ——— 关于 “Netty 发送大数据包时 触发写空闲超时” 的一些思考

    作者:tomas家的小拨浪鼓链接:https://www.jianshu.com/p/8fe70d313d78来源:简书 本文是笔者和朋友(笔名:oojeek)一起讨论该问题的一个记录.文章以讨论过程 ...

  5. Qt开源作品12-硬盘容量控件

    一.前言 磁盘容量统计控件,说白了,就是用来统计本地盘符占用的容量,包括但不限于已用空间.剩余空间.总大小.已用百分比等,其中对应的百分比采用进度条显示,该进度条的前景色和背景色及文字颜色可以设置,在 ...

  6. Qt音视频开发15-mpv事件订阅

    一.前言 在使用libmpv的过程中,通过对mpv事件订阅,可以更准确和准时的得知一些事件,比如文件打开成功,播放状态的改变等,而不需要定时器去读取状态,尤其是打开成功这个事件,如果不采用事件订阅,有 ...

  7. [转]OpenLayer4地图全屏的实现

    第一种方式:自实现 1.首先将地图容器的长宽设置成100%. 2.对form 和body标签长宽设置成100%. 3.对浏览器进行全屏设置. 具体代码如下所示(fullextent 为全屏安全ID.) ...

  8. 基于Netty,从零开发IM(二):编码实践篇(im单聊功能)

    本文由作者"大白菜"分享,个人博客 cmsblogs.cn,有较多修订和改动.注意:本系列是给IM初学者的文章,IM老油条们还望海涵,勿喷! 1.引言 接上篇<IM系统设计篇 ...

  9. 老生常谈——分布式限流:部分Sentinal源码解读

    基础知识 HTTP CODE = 429 "请求过多" A. 限流的类型 服务端 客户端 限流的标的 IP 用户 ... 基本要求 准确限制过量的请求. 低延时.限流器不能拖慢HT ...

  10. 【源码】ByteToMessageDecoder对比自定义实现

    前言 在上一篇随笔中,我们探讨了如何实现一套自定义通信协议,其中涉及到的粘包和拆包处理最初是完全自定义实现的,后来则改为了继承 ByteToMessageDecoder 来简化处理. 本篇将重点讨论这 ...