前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL注入学习「建议收藏」

SQL注入学习「建议收藏」

作者头像
全栈程序员站长
发布2022-09-24 11:43:55
6170
发布2022-09-24 11:43:55
举报

大家好,又见面了,我是你们的朋友全栈君。

SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

学习目的: 能找到注入点 能判断数据库是什么类型 能绕过各种过滤

SQL注入 平台层注入 原因:数据库平台漏洞或数据库配置不安全 代码层注入 原因:程序员对输入未进行细致地过滤,从而执行了非法的数据查询 SQL注入漏洞的方法 数字注入 字符串注入

SQL注入方法有很多种, 按数据类型可以分为数字型、字符型和搜索型 按提交方式可分为get型,post型,cookie型和http请求头注入 按执行效果有可以分为报错注入、联合查询注入、盲注和堆查询注入,其中盲注又可分为基于bool的和基于时间的注入。 从查询语句及可看出来这里是字符型的注入同时也是get型注入和表单注入,数字型注入查询语句为:select * from user where id=1,搜索型注入为查询语句为:select * from user where search like ‘%1%’。

ssh连接 用户名: root 密码:123456 打开mysql 的命令行客户端,连接数据库(或者使用靶机连接数据库)(我用的BUUCTF) 语句:mysql -u root -p 用户名:root 密码:root

最基本的sql语句 查增删改 show databases;查看数据库 creat databases test;创建一个名为test 数据库 use test; 切换到(使用)当前数据库 create table users(id int(11),name varchar(255));创建一个名为users的表,其中有两列id和name show tables;展示数据库中已有的表 desc users;展示表结构 insert into users values(1,’lezhun ‘),(2,‘tea’); 插入数据 select * from users; 查询 select * from users order by id desc;id 列降序查询 select * from users limit a offset b;b 起始(从0开始,类比数组)查询 a 行

修改 update update users set name =‘dsy’ where id=1;将id为1的name更改为dsy

删除 delete delete from users where is =1; 删除id为1的记录

sql注入漏洞 漏洞起源:开发者将外来参数拼接到SQL语句中 终结漏洞:1.对输入的参数过滤(基本不用) 2.使用预编译语句,外来参数作为语句的参数传入(常用)

F12 network name headers

.php?id=1’ or ‘1’=’1 .php?id=1 or 1=1 ,说明有SQL注入漏洞存在 测试漏洞是否存在

要从数据库中拉取数据的话,首先要查询语句里面用了多少列数据(用union联合查询)

1.数字注入 在浏览器地址栏输入:/backend/content_detail.php?id=1,这是一个get型接口,发送这个请求相当于调用一个查询语句, 正常情况下,应该返回一个id=1的文章信息,如果输入:/backend/content_detail.php?id=-1 or 1 =1,这就是一个SQL注入攻击了,可能会返回所有文章的相关信息。

这是因为,id = -1永远是false,1=1永远是true,所有整个where语句永远是ture,所以where条件相当于没有加where条件,那么查询的结果相当于整张表的内容

2.字符串注入

用户名: 密码: 提交

出现以上界面的是一个post请求,登录时调用接口study.us/sql/login.html,首先连接数据库,然后后台对post请求参数中携带的用户名、密码进行参数校验,即sql的查询过程。 假设正确的用户名和密码为lezhun和123456,输入正确的用户名和密码、提交,相当于调用了以下的SQL语句: select * from user where username = ‘lezhun’ and password =‘123456’

用户名:lezhun 密码:123456 提交

由于用户名和密码都是字符串,SQL注入方法即把参数携带的数据变成mysql中注释的字符串。mysql中有2种注释的方法: (1) ‘#’ , ‘#’ 后所有的字符串都会被当成注释处理 常用于SQL注入万能语句

用户名输入:lezhun’#(单引号闭合lezhun左边的单引号),密码随意输入,如:111,然后点击提交按钮。等价于SQL语句: select * from user where username = ‘lezhun’#’ and password = ‘111’ ‘#‘后面都被注释掉了,相当于:select * from user where username = ‘lezhun’ (2))’– ’ (–后面有个空格):’– ‘后面的字符串都会被当成注释处理

用户名输入:user’– (–后面有个空格,单引号闭合user左边的单引号),密码随意输入,如:‘111’,然后点击提交按钮。等价于SQL语句: select * from user where username = ‘lezhun’– ‘and password = ‘111’ select * from user where username = ‘lezhun’– ‘and password = ‘1111’ ‘– ‘后面都被注释掉了,相当于: select * from user where username = ‘lezhun’ 这两种可用于不知道正确密码就可以直接登录用户的账号。

SQL注入万能语句 ’ or 1=1# ,绕开登录密码,直接进入。

判断是否存在SQL注入的方法:在url或者表单中输入一个单引号或者其他特殊符号,页面出现错误说明此页面存在SQL注入,如果页面正常显示说明有字符被过滤或者不存在注入。 若存在注入,判断注入类型的方法:在url或者表单中输入0 or 1,如果可以查到数据,说明是数字型注入,如果输入0’or 1#,查到数据说明是字符型注入。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/171518.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档