什么是SQL注入

不论是学习后端开发/数据库/网络安全,SQL注入安全隐患反复被提起
到底什么是SQL?

维基百科的定义:

(1)什么是SQL?
SQL是用来操控数据库的语言

(2)举一个例子,现在我们要查询电影“长津湖”的票房数据:


先想象一下开发人员是如何书写代码从数据库中拿到数据的:

作为一名黑客如何思考?

SQL注入靶场练习- DVWA(1)

【1】首先将security调为low:

(记住要点击“submit”)

【2】然后挑战模块SQL Injection

首先尝试正常的

【3】尝试查看源码:


我将源码粘贴到了下面:


SQL Injection Source
vulnerabilities/sqli/source/low.php
<?phpif( isset( $_REQUEST[ 'Submit' ] ) ) {// Get input$id = $_REQUEST[ 'id' ];switch ($_DVWA['SQLI_DB']) {case MYSQL:// Check database$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";$result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );// Get resultswhile( $row = mysqli_fetch_assoc( $result ) ) {// Get values$first = $row["first_name"];$last  = $row["last_name"];// Feedback for end userecho "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}mysqli_close($GLOBALS["___mysqli_ston"]);break;case SQLITE:global $sqlite_db_connection;#$sqlite_db_connection = new SQLite3($_DVWA['SQLITE_DB']);#$sqlite_db_connection->enableExceptions(true);$query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";#print $query;try {$results = $sqlite_db_connection->query($query);} catch (Exception $e) {echo 'Caught exception: ' . $e->getMessage();exit();}if ($results) {while ($row = $results->fetchArray()) {// Get values$first = $row["first_name"];$last  = $row["last_name"];// Feedback for end userecho "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";}} else {echo "Error in fetch ".$sqlite_db->lastErrorMsg();}break;}
}?>

内容非常多,但是只需要关注SQL语句select

  $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";

关注:
SELECT first_name, last_name FROM users WHERE user_id = ‘$id’;

$id就是用户输入的 内容。

判断有没有SQL注入漏洞:

用户输入的数据为1’ and 1=1 #
这时候SQL语句发生了变化,在原有查询完成的 基础上会判断1 = 1(这显然是正确的),如果判断正确则才会有输出
#作用是注释(移除)后续SQL语句,去掉后面可能会造成影响的 SQL语句


用户输入的数据为1’ and 1=2 #
这时候SQL语句在原有查询完成后会有判断 1=2(这明显是错误的),如果判断正确才会有输出

这时候没有任何回显了,说明判断是错误的,这时候确定存在SQL注入漏洞

总结:
两次尝试1=1正常输出,1=2错误输出,证明SQL语句生效,存在SQL注入漏洞

SQL注入(1)--判断是否存在SQL注入漏洞相关推荐

  1. php注入点判断,PHPEMS一处SQL注入漏洞

    ### 简要描述: PHPEMS一处SQL注入漏洞 ### 详细说明: 8.PHPEMS某处SQL注入漏洞 存在注入漏洞的代码位置是/app/exam/phone.php的exercise()函数中 ...

  2. SQL注入基础--判断闭合形式

    这里写自定义目录标题 ** **SQL注入基础--判断闭合形式** ## 1.整形闭合 2.单引号闭合 3.双引号闭合 总结 ** SQL注入基础–判断闭合形式 SQL语句的闭合形式大概如下几种: S ...

  3. groovy怎样从sql语句中截取表名_sql注入mysql篇

    SQL注入 __0x01 ♛Sql注入原理 Sql注入顾名思义是没有对用户输入的参数进行过滤导致测试者可以将一段非正常语句插入到查询语句中,由web应用带入到数据库中执行,从而读取数据库中的数据. _ ...

  4. SQL注入 1-3_基于post报错注入

    ** SQL注入 1-3_基于post报错注入 ** 一.概念 客户端提交参数基于post 1.基于post注入不会拼接到url 2.相对get提交参数更加安全 3.但是依然可以使用代理(中间人)截断 ...

  5. sql注入 1-1_基于报错的注入

    sql注入 1-1_ 基于报错注入 1.判断是否存在报错注入 通过 id =1 可以看到服务器返回正常页面 通过 id=1 and 1=1 通过 id=1 and 1=2 服务器也返回正常 通过 id ...

  6. 使用jdbc执行SQL实现登录查询2-避免SQL注入版

    配置文件及工具类参考1 package com.jdsc;import javax.rmi.CORBA.Util; import java.sql.*; import java.util.Scanne ...

  7. sql注释符注入防御_读《SQL注入***与防御》笔记

    ' //单引号报错,转义 %bf%5c%27 //宽字节注入,数据库编码为GBK时,%bf%5c认为是一个字节,绕过PHP正则 UNION ALL SELECT LOAD_FILE('/etc/pas ...

  8. 【转】基于SQL的Web系统安全防范——SQL注入漏洞

    攻击研究及防范措施 SQL-Based Web System Security--Structured Query Language InjectionLeak Attack Study And De ...

  9. sql 整改措施 注入_记一次Sql注入 解决方案

    老大反馈代码里面存在sql注入,这个漏洞会导致系统遭受攻击,定位到对应的代码,如下图所示 image like 进行了一个字符串拼接,正常的情况下,前端传一个 cxk 过来,那么执行的sql就是 se ...

最新文章

  1. Python开发【第三篇】:Python基本数据类型
  2. 客户端验证:JQuery Validation Plugin
  3. java读写锁降级_java的读写锁中锁降级的问题
  4. DWZ中Tree树形菜单的treeCheck如何获取返回值解决方案
  5. 1021. 个位数统计 (15)
  6. 《天天数学》连载28:一月二十八日
  7. python判断密码强度并输出_Python实现的密码强度检测器示例
  8. CentOS 6.4 安装 media wiki 1.23.6(转)
  9. C#中Abstract和Virtual
  10. sqltext的参数化处理
  11. 实习踩坑之路:parallelStream并发流+快速失败导致线上CPU300%的血泪史
  12. 5个小众视频素材网站,你知道吗?
  13. 联想ThinkPad E431禁用触摸板功能
  14. 【VMware】NAT模式、桥接模式、仅主机模式
  15. NR SRB and message transfer
  16. Spring XML 注入
  17. 数据库索引的分类,类型,索引的优缺点,索引的优化
  18. 互联网金融学习总结(4)——大数据风控的九种维度
  19. 新学的一个清理C盘垃圾的一个方法,分享给大家
  20. Mock.js 使用

热门文章

  1. an example of Ascii using 问号 as example
  2. 使用代码删除IBASE object component
  3. SAP Revenue Cloud业务综述
  4. SAP CRM和SAP Hybris的action profile
  5. 算法学习:最近公共祖先
  6. find命令过滤 no such_运维老手常用的linux命令操作
  7. 包含重复数字序列的全排列Python解法
  8. Python部署与安装
  9. 在linux运行math_neon库,linux - 仅使用带交叉编译器的本地库 - 堆栈内存溢出
  10. lua运行外部程序_LTUI v2.2 发布, 一个基于lua的跨平台字符终端UI界面库