SQL注入基础宝典(原理+详解)[每天更新]

简介:

        开局先叠甲:新手上路,内容多有纰漏,仅供学习和参考,欢迎在评论区留言,同步更新。

       因为自己是自学,没有很系统的知识体系,大半个月来,刷了一些sql注入的题目,包括封神榜,ctfshow,墨者学院等等中的sql注入相关的题目,有了一些经验哈,所以写一篇总结一下,分享给大家。希望大家点点关注,对我真的很重要。


一、提交方式

        当我们访问web的时候会提交一个request,request有多种提交方式,例:get、post、put、delete等,每个请求方法都会都有不同作用,web返回的response格式也有差异。

(一)GET请求

get请求一般用来应答式返回页面,我发一个request,web只需要返回页面资源就可。通常用来查询、搜索、读取。

GET /newtab/as/activity-stream.html HTTP/1.1
Host: newtab.firefoxchina.cn
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Connection: keep-alive
Cookie: Hm_lvt_dd4738b5fb302cb062ef19107df5d2e4=1702026479,1702037963,1702099829,1702099865; Hm_lpvt_dd4738b5fb302cb062ef19107df5d2e4=1702099865

这是一个get请求,目前我们主要关心是的是第一行,GET请求访问,/newtab/as/activity-stream.html访问文件,HTTP/1.1协议为http版本为1.1。(request:咚咚咚,喂服务器,给我那个文件我看看,我用http1.1访问。respond:好的,包发给你了,你看下。)

1.GET提交方式的数据特点

①GET请求提交数据方式是在url后面拼接参数,只能以发文本。例:

GET /qq_50916191/article/details/128673956?ops_request_misc=&request_id=&biz_id=102&utm_term=request%E6%8F%90%E4%BA%A4%E6%96%B9%E5%BC%8F&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-128673956.142^v96^pc_search_result_base7&spm=1018.2226.3001.4187 HTTP/1.1

②根据不同浏览器以及浏览器内核版本,GET传递的数据量在4kb左右(很小)

③会将信息显示在地址栏,对安全性影响不大(因为如果是其他请求的话,照样可以通过抓包、F12看到请求参数)

④因为短小,所以快,而且是单应答,我回答完我就跑。(面壁思过.jpg)

2.使用GET请求规范

①发送GET请求时,注意自己请求头的内容规范,错一个字符就没有respond。

②GET请求特性存在,我们可以批量发送GET请求,来遍历整个web的目录结构(但很容易被蓝队识别特征码,小心被反杀哦~)

③请求头内输入的字段名称总长不超过1024个字符(应该没有人请求这么长的,除非宽字节注入)


(二)POST请求

post请求像是交互式访问,比如去商店,我:我要买这些,商家:请说“异世相遇,尽享美味”再加上你的会员卡号,我:异世相遇,尽享美味,996.996.996.996。

POST /collect/init HTTP/2
Host: passportdatacollect.58.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:120.0) Gecko/20100101 Firefox/120.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Content-Type: application/x-www-form-urlencoded
Origin: https://passport.58.com
Connection: keep-alive
Referer: https://passport.58.com/
Cookie: myLat=""; myLon=""; id58=1fKRMGV0CF469nXVlC0QGA==; spm=u-Lj4SZGxa1luDubj.psy_jiugongge; utm_source=link; mcity=zz; city=zz; 58home=zz; 58tj_uuid=46ee99a4-c1bb-4e0e-9351-5604eac34e7c; new_session=1; new_uv=1; init_refer=; als=0; xxzl_cid=b5d2b82789574e799ab2aac72a79820f; xxzl_deviceid=wpLmj5VaBZnRW5P70zOhRDSTLm7RUHa7cIZzWGpTC89V+vQbg1vhrikgyJuBixmv; wmda_uuid=50a4f70a263a199efeb4b2bd2dc9ea08; wmda_new_uuid=1; wmda_session_id_10104579731767=1702103142504-3c0fe95c-16ef-11c2; wmda_visited_projects=%3B10104579731767
Sec-Fetch-Dest: empty
Sec-Fetch-Mode: cors
Sec-Fetch-Site: same-site
Content-Length: 0

这是一个POST请求,POST请求通常用来提交信息或者传输大文件,通过交互式来形成稳定连接。(⊙﹏⊙)一句话后门可以用post请求来操作。

1.POST提交方式的数据特点

①post提交方式比get安全性高一点点点点,因为可以进行加密post内容(非公开加密的算法都有其破解方法),而且请求不会被缓存(不会保留在浏览器和客户端)

②请求对数据长度没有限制,所以可以传输大文件

③POST方式方式有默认提交上限,默认为8M(php配置中post_max_size可以修改)

2.使用POST请求规范

①因为post请求没有缓存,所以使用post对服务器端进行数据更改的时候是即时的。(注册好用户后不用刷新,直接就能登陆)

②post请求体在请求头的最后

POST weoption/index.php http1.1

UA=WIN10-WIN64 FIRFOX/120.0

Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br

Content-Length: 0

username=admin&&password=123456   #请求体(跟请求头中间有个空行)


(三)GET请求和POST请求的区别

①GET在浏览器回退时是无害的,而POST会再次提交请求
②GET产生的URL地址可以被Bookmark,而POST不可以
③GET请求会被浏览器主动cache,而POST不会,除非手动设置
④GET请求只能进行url编码,而POST支持多种编码方式
⑤GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
⑥GET请求在URL中传送的参数是有长度限制的,而POST没有
⑦对参数的数据类型,GET只接受ASCII字符,而POST没有限制
⑧GET参数通过URL传递,POST放在Request body中
⑨GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
 


二、注入方式

        我们在进行sql注入的时候,可以选取多种多种注入方式。而且每个数据库能使用的注入方式不一样,到数据库时候再说,这里讲解时,先讲每个注入方式。

  

(一)联合注入(union)

        原理:前方参数报错,执行联合语句。

原:http://weoptionsblogs.com/index.php?id=1

改:http://weoptionsblogs.com/index.php?id=1 and 1=2 union select 1,2,3,4

改:http://weoptionsblogs.com/index.php?id=1 and 1=2 order by 4

(二)二次注入

(三)堆叠注入

(四)盲注

        1.延时盲注

        2.布尔盲注

        3.报错盲注

(五)宽字节注入

 

更新至12/10,文章结构及预告:

联合注入、二次注入、堆叠注入、盲注:时间盲注、布尔盲注、报错盲注

注入思路

过程中找过滤的字符

找注入点、猜列(int,chr)、测回显、选择思路(有回显直接嗦,无回显就盲注)、获取数据基本信息、查数据库。

数据库类型

高权限还是低权限

每个数据库特性以及关键注入示例

关系型数据库与非关系型数据库

mysql mssql mongodb access Oracle postgresql pangolin 、、、

sql过滤绕过

魔术引号,垃圾堆叠(写一万个)

内置函数(实际情况,大概率直接跑路)

自定义关键字(直接跑路)

waf防护(大部分功能就是过滤关键字命令,找字典库看看)

常用工具

burpsuite

最好用中文

sqlmap

大杀器,没有菜的工具,只有菜的人。

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

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

相关文章

慢SQL诊断

最近经常遇到技术开发跑来问我慢SQL优化相关工作,所以干脆出几篇SQL相关优化技术月报,我这里就以公司mysql一致的5.7版本来说明下。 在企业中慢SQL问题进场会遇到,尤其像我们这种ERP行业。 成熟的公司企业都会有晚上的慢SQL监控和预警机制。…

思福迪运维安全管理系统 test_qrcode_b RCE漏洞复现

0x01 产品简介 思福迪运维安全管理系统是思福迪开发的一款运维安全管理堡垒机。 0x02 漏洞概述 由于思福迪运维安全管理系统 test_qrcode_b路由存在命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限&#…

【Docker】vxlan的原理与实验

VXLAN(Virtual eXtensible Local Area Network,虚拟可扩展局域网),是一种虚拟化隧道通信技术。它是一种Overlay(覆盖网络)技术,通过三层的网络来搭建虚拟的二层网络。 VXLAN介绍 VXLAN是在底层…

【智能家居】八、监控摄像采集、人脸识别比对进行开门功能点

一、使用 fswebcam 测试 USB 摄像头 二、根据demo来实现功能点 三、功能点编写编译运行实现 四、mjpg实现监控识别 五、V4L2 视频设备 Linux 内核模块的一部分 一、使用 fswebcam 测试 USB 摄像头 a. 安装 fswebcam orangepiorangepi:~$ sudo apt update orangepiorangepi:~…

SSL证书可以有效避免劫持和钓鱼攻击

SSL证书对抗劫持和钓鱼攻击起到重要作用。通过使用SSL证书,网站可以防止黑客篡改网站内容或欺骗用户,确保用户所看到的是真实的网站信息,而不是被篡改的内容或诱导性的信息。这有助于保护用户的隐私和安全,并建立用户对网站的信任…

LeetCode008之字符串转换整数 (相关话题:状态机)

题目描述 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格检查下一个字符(假设还…

一天搞定jmeter入门到入职全套教程之Jmeter分布式测试

随着并发量的增大,一台机器就不能满足需求了,所以我们采用分布式(Master-Slaver)的方案去执行高并发的测试 注意事项: Master机器一般我们不执测试,所以可以拿一台配置差些的机器,主要用来采集…

linux查看某个时间段的日志(sed -n)

有时候找出某个时间段的日志,如2023-12-09 20:11:00 到 2023-12-09 20:15:59 用grep不太方便直接过滤出来,能够使用sed根据时间去查 sed -n ‘/开始时间日期/,/结束时间日期/p’ 日志文件名称 如 sed -n /2023-12-09 20:11:00/,/2023-12-09 20:15:59/p…

git patch和使用

patch作用:修复了基线的一个bug,在未合并代码的时候,同步到各个版本的发布分支,用于解决问题 1、patch生成方式 # 方法一 # git 上传代码到页面后,git数字编号后去掉.patch刷新页面,复制更改部分&#xf…

c 语言 堆的解析(自我理解)!!!堆排序,建堆

目录 1.堆是什么? 2.堆的实现和接口。(小堆) 1.头文件 2.初始化 3.摧毁 4.向上调整(重点) 5.向下调整(重点) 6.插入(重点) 7.删除(重点) …

Linux---虚拟机软件

1. 虚拟机软件的介绍 它是能够虚拟出来计算机的一个软件。 常用虚拟机软件: VmwareVirtualBox 说明: 只有安装了虚拟机软件才可以创建虚拟机,当然通过虚拟机软件还可以创建多个虚拟机。 2. 虚拟机的介绍 就是模拟一个真实的计算机,好比一个虚拟的…

go学习之反射知识

反射 文章目录 反射1、反射的使用场景1)结构体标签的应用2)使用反射机制编写函数的适配器(桥连接) 2、反射的基本介绍-1.基本介绍-2.反射的图解-3.反射重要的函数和概念 3.反射快速入门-1.请编写一个函数,演示对&#…

【C进阶】C程序是怎么运作的呢?-- 程序环境和预处理(下)

前言: 这是程序环境和预处理的下半篇文章。至此,关于c语言知识点:从编译到运行的过程已讲解完毕。传送🚪,上半篇: http://t.csdnimg.cn/hvxmr 本章涉及的知识点: 宏和函数对比、命名约定、#undef、命令行定…

C语言习题集(029)

//写一个函数&#xff0c;用“起泡法”对输入的10个字符按由小 //到大顺序排列。 /* */ //解答&#xff1a; #include<stdio.h> void sort(char s[]) { int i, j; int lenstrlen(s)-1; char tmp; for(i0;i<len;i)for(j0;j<len-i;j)if(s[j]>s[j1]){ tmps[j]…

工作问题处理的三个境界

文章目录 境界一&#xff1a;快速解决问题境界二&#xff1a;对问题导致存量数据及后续风险进行评估境界三&#xff1a;对问题进行回顾、总结、反思 境界一&#xff1a;快速解决问题 境界二&#xff1a;对问题导致存量数据及后续风险进行评估 境界三&#xff1a;对问题进行回…

C语言—每日选择题—Day46

第一题 1. 下列程序段的输出结果是&#xff08;&#xff09; #include <stdio.h> int main() {int x 1,a 0,b 0;switch(x) {case 0: b;case 1: a;case 2: a;b;}printf("a%d,b%d\n", a, b);return 0; } A&#xff1a;a2,b1 B&#xff1a;a1,b1 C&#xf…

JVM面试

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1.JVM 的整体结构2.类加载做了哪些事情?类加载器有哪些&#xff1f;双亲委派和沙箱安全 3.Java虚拟机栈是什么4.方法区的理解HotSpot 中方法区的演进方法区的内部结…

【Spring教程26】Spring框架实战:从零开始学习SpringMVC 之 bean加载控制

目录 1 问题分析2 思路分析3 环境准备4 设置bean加载控制5 知识点1&#xff1a;ComponentScan 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安装…

文件搜索项目演示

演示功能搜索功能1&#xff1a;根据文件名搜索2&#xff1a;根据文件路径搜索3&#xff1a;根据文件名拼音(全拼、首拼)搜索 选择更新目录功能自动初始化和定时更新功能程序文件项目知识介绍 演示功能 搜索功能 1&#xff1a;根据文件名搜索 2&#xff1a;根据文件路径搜索 3…

Linux--操作系统

1. 常见的操作系统 Windowsmac OSLinuxiOSAndroid 2. 操作系统的定义 操作系统直接运行在计算机上的系统软件&#xff0c; 它是控制硬件和支持软件运行的计算机程序。 3. 操作系统的作用 向下控制硬件向上支持软件的运行&#xff0c;具有承上启下的作用。 4.总结 操作系统…