web安全学习(sql注入1)
web安全学习(sql注入1)
一.简介
sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句。sql注入可能造成信息泄露以及服务器被控制等危害。
二.产生原因(数据拼接)
大多数web应用或者web服务需要与数据库进行交互,比如根据用户输入名字返回相应的搜索结果,如果没有对用户的输入进行无害处理,web应用程序对用户输入的数据的合法性判断或者过滤不严格,用户输入数据与sql请求拼接,直接操作数据库,那么就容易形成安全漏洞。
漏洞产生位置(用户可以提交数据的地方) get post user-agent cookie x-forward-for
分类:联合注入 报错注入 时间盲注 布尔盲注 二次注入 增删改注入
三.详细介绍
1.mysql数据库系统
该数据库系统里面又包含以下几个数据库,第一个是自己创建的数据库,存储我们需要的信息,第二个是performance_schema,这个里面存储的是mysql数据库的一些性能指标,一些参数信息,sys是以一种更容易让人理解的方式展示mysql数据库的性能指标,sql注入经常使用的是这个information_schema 数据库,这个是对于数据库所有元数据信息的一个视图,因此可以很方便的浏览数据库的全部信息,然后information_schema这个数据库中也存在很多表,比如schema表中的就是所有数据库名称,tables表中存储的是所有的表信息,包括这个表属于哪个数据库以及表的类型等等,columns存储的是列信息,USER_PRIVILEGES是用户权限表。
2.具体的查询思路
首先判断是否存在注入点,基本的方法就是给可能存在注入点的参数传值为单引号,如果存在sql注入那么页面会出现sql相关的错误信息,下面是个sql查询的例子,$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"; 一般来说,报错显示near '''就是数字型注入,也就是传入的参数没有被引号闭合的,如果报错信息中有near "3'"包含数字那就是字符型注入,
3.在判断出是否存在sql注入之后就可以进行下一步查询操作,首先我们会用到联合查询,这样可以查找其他数据库或者其他表中的数据,而不是仅限于存在漏洞的参数所在的表。联合查询有一个要求就是前后的查询结果的数量要一样,比如"select username,email from member where id=$id"; 联合查询就是?id=1 union select 1,2。因为原本的结果有两个数据,所以union select后面也跟着两个数据。我们首先判断数据库名,语句为?id=-1 union select 1,group_concat(schema_name) from information_schema.schemata,这里用到-1是为了只显示我们需要查询的后面的数据,后面的group_concat是为了将所有的数据库名在同一个数据点显示出来,起到连接的作用,得到了所有数据库名我们就选其中一个去查询表,语句为id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='exp',查列名,union select 1,group_concat(column_name) from information_schema.columns where table_name='exp' and table_schema='exp',在得到这些信息后就可以查数据了,语句为select 列名,列名 from 数据库名.表名。
任何用户可以控制输入并且和sql语句进行了拼接的地方都可能存在sql注入
4.无回显
前面说到的联合查询是在页面有回显信息,显示你的查询到的信息的情况下可以使用,那如果页面没有回显我们就会使用布尔盲注,时间盲注以及报错注入,布尔盲注就是使用or语句进行猜测,猜对了和猜错了的页面显示不同,时间盲注差不多,根据猜测的结果是否正确决定页面响应的时间,猜长度:' or length(database()) > 8 --+ ,猜名字:'or ORD(mid(database(),1,1)) > 100 --+,猜表的数量'or (select count(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()) = 2 --+ ,猜表名的长度'or (select length(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database() limit 0,1) = 5 --+,运用limit进行限制,'Or ORD(mid(select TABLE_NAME from information_schema.TABLES where
TABLE_SCHEMA = database() limit 0,1),1,1)) >100 --+,'or (select count(column_name) from information_schema.COLUMNS where TABLE_NAME='表名') > 5 --+,'or (select length(column_name) from information_schema.COLUMNS where TABLE_NAME='表名' limit 0,1) = 10 --+,'or ORD(mid((select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME = '表名' limit 0,1),1,1)) > 100 --+,'or (select Length(concat(username,"---",password)) from admin limit 0,1) = 16 --+,'or ORD(mid((select concat(username,"-----",password) from admin limit 0,1),1,1)) > 100 --+ ,以上就是会使用到的盲注查询语句,时间盲注就是用sleep函数以及if函数替换掉or函数,报错就是页面会显示错误信息,我们用updatexml函数,并且将徐要查询的信息作为参数传给这个函数。
5.二次注入
我们为了防止sql注入攻击有时会对数据进行转义,比如输入的是1',转义后变成了1\',但是存入数据库的还是原数据1',而我们在另一个位置再次将数据库中的数据取出使用的时候取出的就是1'这个危险数据了,比如我们注册一个用户名称为admin'#,虽然进行了转义但存在数据库的可能是原数据,我们在登陆的时候利用这个就能登录admin的账号,因为此时在登陆这个功能这里并未对特殊符号进行转义。
6.堆叠注入
堆叠注入就是同时执行多条sql语句,因为我们在使用sql查询的时候总是用分号把每条语句隔开,因此我们也可以像?id=1';select * from table;这样来查询。
web安全学习(sql注入1)的更多相关文章
- WEB 安全之 SQL注入 < 三 > 提权
SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...
- WEB 安全之 SQL注入 < 二 > 暴库
SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...
- WebGoat学习——SQL注入(SQL Injection)
SQL注入(SQL Injection) 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.攻击者通过web请求提交带有影响正 ...
- Web安全 之 SQL注入
随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据 ...
- 【渗透攻防WEB篇】SQL注入攻击初级
前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...
- 【渗透攻防Web篇】SQL注入攻击高级
前言 前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御.有攻必有防,当然还要来探讨一下SQL注入防御技巧. 目录 第五节 避开过滤方法总结 ...
- 通过sqli-labs学习sql注入——基础挑战之less1
环境准备: Phpstudy (PHP+Apache+Mysql) Sql-lab 首先了解下基础知识: URL编码: 因为在浏览器中,当我们访问一个网址的时候,浏览器会自动将用户输入的网址进行UR ...
- [超级基础]Web安全之SQL注入由浅入深(?)
前言 断断续续看Web安全到现在了,感觉对很多基础知识还是一知半解,停留在模糊的层次.所以准备系统总结一下. Sql注入我以前一直不以为然,一是现在能sql的站确实很少,二是有像sqlmap的工具可以 ...
- 学习SQL注入---1
开始接触SQL注入了,最开始根据网上的思路做了两道注入的题,但对于SQL注入如何实现,怎么一个流程还是不理解.后来,在网上查找了很多资料,现在一点点去理解. 1.利用sqlmap注入的时候,不是所有页 ...
随机推荐
- PerfView专题 (第八篇):洞察 C# 内存泄漏之寻找静态变量名和GC模式
一:背景 这篇我们来聊一下 PerfView 在协助 WinDbg 分析 Dump 过程中的两个超实用技巧,可能会帮助我们快速定位最后的问题,主要有如下两块: 洞察内存泄漏中的静态大集合变量名. 验证 ...
- window桌面背景图片
通过修改注册表项: \HKEY_CURRENT_USER\Control Panel\Desktop下的几个值,及可以将我们想要的图片设置成桌面的背景图 TileWallpaper Wallpap ...
- MQ系列4:NameServer 原理解析
MQ系列1:消息中间件执行原理 MQ系列2:消息中间件的技术选型 MQ系列3:RocketMQ 架构分析 1 关于NameServer 上一节的 MQ系列3:RocketMQ 架构分析,我们大致介绍了 ...
- 第七十一篇:Vue组件的私有和全局注册
好家伙, 1.组件的父子关系 我们封装三个组件,分别为left组件,right组件和App组件 在封装时: 在封装时,彼此的关系是独立的,并不存在父子关系 在使用时: 在使用时,根据彼此的嵌套关系,形 ...
- 第十一篇:vue.js监听属性(大作业进行时)
这个知识点急着用所以就跳过<计算属性>先学了 首先理解一下什么是监听:对事件进行监控,也就是当我进行操作(按了按钮之类的事件)时,会有相应的事情发生 上代码 <div id = &q ...
- 从云AK泄露利用看企业特权管理
从云AK泄露利用看企业特权管理 目录 - 缘起 - 当前主流AK泄露检测方式 - 防止AK滥用的关键要素? - 哪些算特权账号管理? - 如何做特权账号管理? - 特权管理与堡垒机.IAM.零信任的关 ...
- aspnetcore6.0源代码编译调试
虽然编译源码折腾了几个时间(卡在restore),最后还是跑起来了aspnetcore6.0mvc源码项目,下面说步骤,前提是网络能连外,对于不能连外的懒得折腾. 第一步 电脑找个地克隆下GitHub ...
- service服务使用CoreDNS提供的域名地址访问
普通的 Service:会生成 servicename.namespace.svc.cluster.local 的域名,会解析到 Service 对应的 ClusterIP 上,在 Pod 之间的调用 ...
- Elasticsearch:IK中文分词器
Elasticsearch内置的分词器对中文不友好,只会一个字一个字的分,无法形成词语,比如: POST /_analyze { "text": "我爱北京天安门&quo ...
- 通过堡垒机上传文件报错ssh:没有权限的问题
背景描述 一台有公网IP的主机安装的有jumpserver,假设为A主机,另外几台没有公网ip的主机,假设其中一个为B主机. 操作 1.通过主机A的公网IP和端口等登录到jumpserver的管理员用 ...