sql注入学习笔记

1、sql注入原理

通过构造(拼接到原本语句之后)不同的sql语句来实现对数据库的操作。

2、sql注入的种类

联合注入、POST注入/HEAD注入、盲注、宽字节注入、

Access注入——cookie注入、Access注入——偏移注入、

Mysql注入——Dns注入、Mysql注入——反弹注入、

Oracle注入——报错注入

3、sql注入一般流程

判断注入点

判断字段数

判断回显点

查询相关内容

(1)判断注入点

与数据库产生交互的地方,是否有漏洞可以进行sql注入,如异常语句(and 1=2 或 and sleep(3)),导致页面显示出错

注入点类型:

数字型【传的参数直接是数字】,id=1 and  1=2报错,id=1 and 1=1正常,则说明存在数字型注入点;

字符型【传的参数被'XXX'包起来了,一般拼接 and 1=2 后,页面依旧显示正常】,id=1' 报错,id=1' -- zhushi 正常,则说明存在字符型注入点;

逃脱'':

构造出成对的'';

添加注释 -- abc、--+;

%23(mysql中的注释符是#,编码问题,需要使用%23代替#);

在url访问中 + 会被转义为空格,即可用+代替空格;

(2)判断字段数

order by 10——表示按第10个字段排序,若没有这么多字段会报错,可以根据是否报错,判断出字段数。

联合查询(union select)是将前后2张表的内容合并到一起后输出,所以需要保证前后表的查询字段数一致,所以要判断字段数,且查询结果正常情况下是多行,所以要构造查询出自己想要显示的内容(如union前面查询结果出为空,或limit 0,1限制)

select a,b,c from table_A union select *,1 from table_B【B表有2个字段,字段数不足时,可以补足】

(3)判断回显点

显示数据库内容的地方,能显示出自己需要查找的信息,如账号密码信息

(4)查询相关内容

如查询数据库名、表名、字段名、账号、密码。

可能使用到的mysql函数、语句:

database()

version()

sleep()

exists()

ordery by 2

union select 1,2

limit 0,1

limit 1,1

select schema_name from information_schema.schemata limit 0,1

select table_name from information_schema.tables where table_schema=database() limit 1,1

select column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1

limit n,m--》即显示从第n+1行开始及其以后的m行查询出的结果【查询结果行数从0开始计】

4、access联合注入及判断回显点

在mysql中and 1=2 union select 1,2

【为了让union后面查询的内容显示出来——只能显示一行结果】

在access中 union select * from table_name【access数据库语法要求添加表名】

判断是不是猜测表、猜测字段,exists(select username,password from user)进行判断,若显示正常,则猜测的表名、字段名正确———可以整理一些常用的表名及其字段名

5、判断是否可cookie传参

常用get/post方法传参,对于一些敏感字符进行了过滤,如and、union、select、limit、order by等;但有时也可以使用cookie传参,有时cookie传参未过滤/拦截敏感字符。

删除url中的参数,刷新页面访问时报错;但将url的参数放置到cookie中,刷新没有url参数的页面,访问正常,说明可以使用cookie传参,可以将敏感字符拼接到cookie中查询数据库信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值