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注入的时候,不是所有页 ...
随机推荐
- C# winfrom ListView控件实现自由设置每一行字体及背景色等
背景:公司经常会需要将日志信息,输出到一个对话框中显示出来.之前一直采用的listbox控件,操作简单,使用方便,但是遗憾的是,不能自由控制每一行的状态. 于是想了如下几个方案: (1)重绘listb ...
- [SDR] GNU Radio 系列教程(二) —— 绘制第一个信号分析流程图
目录 1.前言 2.启动 GNU Radio 3.新增块 4.运行 本文视频 参考链接 1.前言 本文将介绍如何在 GNU Radio 中创建和运行第一个流程图. 2.启动 GNU Radio GNU ...
- Enable_hint_table 使用
KingbaseES enable_hint_table 可以看成类似 oracle outline 工具,可以在不修改SQL 的情况下,通过hint 改变SQL 的执行计划. 一.启用enable_ ...
- vue3中defineComponent 的作用
vue3中,新增了 defineComponent ,它并没有实现任何的逻辑,只是把接收的 Object 直接返回,它的存在是完全让传入的整个对象获得对应的类型,它的存在就是完全为了服务 TypeSc ...
- 我的Go gRPC之旅、01 初识gRPC,感受gRPC的强大魅力
微服务架构 微服务是一种开发软件的架构和组织方法,其中软件由通过明确定义的API 进行通信的小型独立服务组成. 这些服务由各个小型独立团队负责. 微服务架构使应用程序更易于扩展和更快地开发,从而加速创 ...
- Python数据科学手册-Pandas:层级索引
一维数据 和 二维数据 分别使用Series 和 DataFrame 对象存储. 多维数据:数据索引 超过一俩个 键. Pandas提供了Panel 和 Panel4D对象 解决三维数据和四维数据. ...
- 阿里云OSS存储前端API上传(签名上传)
一.创建用户 在阿里云创建用户https://ram.console.aliyun.com/users,并勾选Open API 保存好信息,很重要,返回后就再也找不到了 新增授权(这里视个人情况,需要 ...
- PHP函数小工具
PHP检测IP是否内网地址.保留地址 /** * @param string $ip 被检测的IP * @return bool 是否内网或者保留IP */ public function isInt ...
- v-contextmenujs 右键菜单点击
忙碌了一晚上的"枫师傅"用上了新插件v-contextmenujs,这个插件就按照他的文档来就行 我的使用: <!-- 这里是demo.vue,之所以选择html是为了代码高 ...
- 关于“No loop matching the specified signature and casting was found for ufunc lstsq_n”问题的解决
下面这段代码是使用MatPlotLib绘制数据随时间变化的趋势. import datetime as dt import numpy as np import pandas as pd import ...