mysql数据库sql注入原理_web安全原理(sql注入学习心得)

sql注入原理:web应用程序对用户的输入没有进行合法性的判断,前端传入后端的参数是攻击者可控的,并且带入了数据库查询,导致攻击者可以构造不同的sql语句实现对数据库的任意操作。

两个必要条件:1.参数用户可控

2.参数带入数据库查询

mysql与sql注入漏洞相关知识点:

mysql5.0版本后,mysql默认在数据库有一个information_schema库,其中有三张表需要记住,

1.schemata   存放了所有数据库的库名 schema_name

2.tables  存放了所有数据库的库名及相对应的表名 table_schema,table_name

3.columns 存放了所有数据库的库名及相对应的表名和字段名 table_schema,table_name,column_name

mysql查询语句

select 要查询的字段名 from 库名.表名    (不知道任何条件情况下)

select 要查询的字段名 from 库名.表名 where 已知条件的字段名=‘已知条件的值’ (知道一条已知条件)

select 要查询的字段名 from 库名.表名 where 已知条件1的字段名=‘已知条件1的值’ and 已知条件2的字段名=‘已知条件2的值’

limit的使用格式为 limit m,n

m为起始位置,n为取n条记录,如limit 0,1,即从第一条记录开始,取一条记录。

三个重要函数 database(),version(),user()

注释符,#     --空格     /**/

内联注释/*!code*/

攻击方式:

1.给可控参数添加单引号,and 1=1,and 1=2.试过后基本就存在sql注入,之后可采取order by 1-99语句查询该数据表的字段数量。

如该数据表字段数量为3,输入id=1 order by 3 反馈结果和id=1 order by 4反馈一样的结果而id=1 order by 4反馈结果不同,则字段数为3

2.union注入攻击:进行1步骤后,union select 1,2,3 判断在1,2,3中可以输入sql语句的位置,然后即可插入sql语句进行查询

3.boolean注入攻击:针对只反馈yes或no结果的页面,即返回的结果不会存在数据库的数据,只是特定的正确或错误

那么可以试图判断数据库名的长度

‘ and length(database())>=1 --+

类推,可以根据页面反馈的正确和错误来判断是否猜对数据库名长度

当猜对长度后,可以试图猜数据库名的名字

如用

' and substr(database(),1,1)='t' --+ 意思是截取database()的值,从第一个字符开始,每次只返回一个。这个和limt不一样,这里从1开始排序

可以采取burp爆破的方式

也可以采用ascii的字符查询,假如database()数据库名第一个为s,s对应ascii码值为115那么

' and ord(substr(database(),1,1))=115 --+即可判断是否正确,ord是将字符转换为ascii码值

4.报错注入攻击,没看懂,暂时略,页面报错之后用的查询语句看不懂

5.时间注入攻击:即利用sleep()或benchmark()等函数让MySQL的执行时间变长,从而通过判断反馈时间来判断是否存在注入。

通常与if语句结合使用,IF(expr1,expr2,expr3) 含义为如果expr1为真,则返回expr2;否则返回expr3.

如判断数据库库名长度的语句为:

if (length(database())>1,sleep(5),1)   意思是如果数据库长度大于1,则mysql查询休眠5秒,否则查询1.

6.堆叠查询注入攻击:多语句之间以分号隔开,如

';select if(substr(user(),1,1)='r',sleep(3),1)%23

7.二次注入攻击:两个不同页面结合起来,通过注册页面注册用户如将test'注册到数据库里,虽然开始转义了,但是后来通过参数id页面读取时,读取到数据库里的

用户test',带入sql语句查询导致多了一个单引号出错。

8.宽字节注入攻击:当传入1'时,单引号被转移符(反斜线)转义,一般情况下是不存在sql注入漏洞的,但是有一个特例,当数据库编码为GBK时,可以使用宽字节注入

即用%df和反斜线的编码%5c结合起来为繁体字连。则单引号成功逃逸,报出数据库错误

而后可以进一步判断注入,

1%df' and 1=1%23

1%df and 1=2%23

接着用order by查数据库表字段数量,再结合union注入

9.cookie注入攻击:修改cookie中的参数尝试攻击

10.base64注入攻击:base64编码尝试绕过waf

11.XFF注入攻击:通过burp抓包后可以看到http请求头中有一个头部参数X-Forwarded-for,简称XFF头,它代表客户端真实的ip地址,通过修改它的值来进行攻击

如将它设置为127.0.0.1' and 1=1#

sql注入绕过技术

1.大小写绕过

2.双写绕过

3.编码绕过,如base64,url全编码(和url普通编码不一样)而且是编码两次

4.内联注释绕过注入:

如id=1 /*!and*/ 1=1

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值