Java教程

关于我这周学习SQL注入的一些笔记:

本文主要是介绍关于我这周学习SQL注入的一些笔记:,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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注入的一些笔记:的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!