SQL注入学习「建议收藏」

SQL注入学习「建议收藏」SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。学习目的:能找到注入点能判断数据库是什么类型能绕过各种过滤SQL注入平台层注入原因:数据库平台漏洞或数据库配置不安全代码层注入原因:程序员对输入未进行细致地过滤,从而执行了非法的数据查询SQL注入漏洞的方法数字注入字符串注入SQL注入方法有很多种,按数据类型可以分为

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

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#,查到数据说明是字符型注入。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号