首页 > 数据库 >一点关于sql注入的学习记录

一点关于sql注入的学习记录

时间:2024-02-19 18:56:47浏览次数:33  
标签:web 记录 数据库 sql 数据 id 注入

一 一句话理解sql注入
SQL注入其实就是恶意用户通过在表单中填写包含SQL关键字的数据来使数据库执行非常规代码的过程。
1

来自小迪师傅的一图流路线
2 sql注入的产生过程及常见原因
2.1产生过程
大多数的web应用都需要与数据库进行交互,并且大多数web应用编程语言(如ASP、C##、.NET、Java和PHP)均提供了可编程的方法来与数据库连接并进行交互。如果web应用开发人员无法确保在将从web表单,cookie及输入参数等收到的值传递给sql查询(该查询在数据库服务器上执行)之前已经对其进行过验证,那么通常会出现sql注入漏洞,如果攻击者能够控制发送给sql查询的输入,并且能够操纵该输入将其解析为代码而非数据,那么攻击者就很有可能有能力在后台数据库执行该代码。

2.2常见的sql注入产生原因
基于此,SQL注入的产生原因通常表现在以下几方面:①转义字符处理不合适;②不安全的数据库配置;③不合理的查询集处理;④不当的错误处理;⑤多个提交处理不当。

2.2.1不当的处理类型
Sql数据库将单引号字符(’)解析成代码与数据间的分界线:单引号外面的内容军事需要运行的代码,而用单引号引起来的内容均是数据。因为只需要简单的在URL或WEB页面的字段中输入一个单引号,就能很快速的识别出web站点是否会受到sql注入攻击。

2.2.2不安全的数据库配置
数据库带有很多默认的用户预安装内容。SQL Server使用声名狼藉的“sa”作为数据库系统管理员账户,MySQL使用“root”和“anonymous”用户账户,Oracle则在创建数据库时通常会创建SYS、SYSTEM、DBSNMP和OUTLN账户。这些并非是全部的账号,知识比较出名的账户中的一部分,还有很多其他的账户。其他账户同样按默认方式进行预设,口令总所周知。

这就带来了很大的安全风险,攻击者利用sql注入漏洞时,通常会常识访问数据库的元数据,比如内部的数据库和表的名称、列的数据类型和访问权限,例如MySQL服务器的元数据位于information_schema虚拟数据库中,可通过show databases;和show tables;命令访问。所有的MySQL用户均有权限访问该数据库中的表,但只能查看表中那些与该用户访问权限相对应的对象的行。

2.2.3不合理的查询集处理
有时需要使用动态的sql语句对某些复杂的应用进行编码,因为程序开发阶段可能还不知道要查询的表或字段(或者不存在)。比如与大型数据库交互的应用,这些数据库在定期创建的表中的数据由于应用已经产生了输入,因而开发人员会信任该数据,攻击者可以使用自己的表和字段数据来替换应用产生的值,从而影响系统的返回值。

2.2.4不当的错误处理
错误处理不当会为web站点带来很多安全方面的问题。最常见的问题是将详细的内部错误消息(如错误代码,数据库转存储)显示给用户或攻击。这些错误消息会泄露实现细节,为攻击者提供与网站潜在缺陷相关的重要线索。

二 sql注入类型

2.1 mysql注入

2.2 access注入
参考https://www.fujieace.com/penetration-test/access-offset-injection.html

2.3 msSQL注入
参考https://www.cnblogs.com/xishaonian/p/6173644.html

2.4、postgresql注入
参考https://www.cnblogs.com/KevinGeorge/p/8446874.html

2.5Oracle注入
参考https://www.cnblogs.com/peterpan0707007/p/8242119.html

2.6mongoDB注入
参考https://www.cnblogs.com/wefeng/p/11503102.html

可使用sqlmap进行识别

三 SQL语句应用
select查询数据
在网站应用中进行数据显示查询操作
例: select * from news where id=$id

insert插入数据
在网站应用中进行用户注册添加等操作
例: insert into news (id, url,text) values ( 2,'x','$t')

delete删除数据
后台管理里面删除文章删除用户等操作
例: delete from news where id=$id

update更新数据
会员或后台中心数据同步或缓存等操作
例: update user set pwd='$p' where id=2 and username=' admin'

order by排序数据
一般结合表名或列名进行数据排序操作
例: select * from news order by $id
例: select id , name , price from news order by $order

3.1 报错注入应用
1、基于布尔的sQL盲注-逻辑判断 regexp, like , ascii,left, ord , mid
2、基于时间的sQL盲注-延时判断 if ,sleep
3、基于报错的sQL盲注-报错回显 floor, updatexml, extractvalue
参考https://www.jianshu.com/p/bc35f8dd4f7c

标签:web,记录,数据库,sql,数据,id,注入
From: https://www.cnblogs.com/nours/p/18020010

相关文章

  • python实战:用SQLAlchemy作orm
    一,安装SQLAlchemy1,用pip安装(venv)[liuhongdi@imgnews]$pip3installsqlalchemy2,安装完成后查看已安装的版本:(venv)[liuhongdi@imgnews]$pip3showsqlalchemyName:SQLAlchemyVersion:2.0.27Summary:DatabaseAbstractionLibraryHome-page:https://www......
  • 记录事业编考试提供的照片审核工具引发对其原理的探究
    记录事业编考试提供的照片审核工具引发对其原理的探究考研结束之后,对于结果已经知其一二了,这半年多并没有准备的那么充分,所以需要有一个过渡,为接下来的工作计划做打算,针对应届生,事业编制就是一个不错的选择。早上九点,事业编制开始报名,进入报名页面,就是常见的报名信息填写,其中......
  • 基于python+mysql的宠物领养网站系统
    功能介绍平台采用B/S结构,后端采用主流的Python语言进行开发,前端采用主流的Vue.js进行开发。整个平台包括前台和后台两个部分。前台功能包括:首页、宠物详情页、用户中心模块。后台功能包括:总览、领养管理、宠物管理、分类管理、标签管理、评论管理、用户管理、运营管理、日志......
  • MySQL死锁日志
    MySQL死锁日志MySQL的死锁可以通过showengineinnodbstatus\G;来查看,最近的死锁信息在LATESTDETECTEDDEADLOCK下面。但是这种方式只能显示最新的一条死锁信息,该方式无法完全捕获到系统发生的死锁信息。MySQL系统内部提供一个innodb_print_all_deadlocks参数,该参数默......
  • MySQL死锁日志的查看和分析
    MySQL死锁日志的查看和分析 目录一,关于MySQL的死锁二,人造一个死锁的场景三,查看最近一次死锁的日志四,死锁日志的内容1,事务1信息2,事务1持有的锁3,事务1正在等待的锁4,事务2信息5,事务2正在持有的锁6,事务2正在等待的锁7,死锁处理结果五,关于mysql的八种锁1,行锁(RecordL......
  • 服务器终端命令记录
    1.查看文件大小#默认显示[Linux]$du#以人类可读的方式显示[Linux]$du-h#按大小排列[Linux]$du-h|sort-nr#只显示Images文件夹的大小[Linux]$du-hImages/#只显示当前文件夹的总大小[Linux]$du-hs2.查看服务器节点数:sinfo3.提交运行命令:sbatch......
  • CSS学习记录
    块级元素block总是在新行上开始;高度,行高以及顶和底边距都可控制;宽度缺省是它的容器的100%,除非设定一个宽度;<div>,<p>,<h1>,<form>,<ul>和<li>是block元素。display:inline-block将对象呈递为内联对象,但是对象的内容作为块对象呈递。旁边的内联对象会被呈递在同一行内,......
  • 解决MyBatis Mapper 的XML文件SQL语句无法自动提示问题
    一、问题1.问题场景IDEA中MyBatis编写mapper的SQL语句的时候无法提示SQL和数据库2.问题描述无法正常方便的使用IDEA的提示功能,更准确无误的编写代码3.本解决方案优势亲测可用,一劳永逸(IDEA版本IntelliJIDEA2021.1.3 )目的在于对Mybatis的Mapper.XML中sql语句进行提示......
  • MySQL学习之存储过程
    存储过程-介绍介绍存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。存储过程思想上很简单,就是数据库SQL语言层面的代码封装与重用。特点......
  • 存储过程分页以及参数拼接sql语句
    1.C#调用存储过程,带参数返回的功能,而且是参数化拼接,这样就可以防止sql注入System.Data.SqlClient.SqlParameter[]parameters={newSystem.Data.SqlClient.SqlParameter("@i",100),......