注入攻击的本质:web应用程序没有过滤用户输入或过滤不严谨,直接把用户输入的恶意数据当做代码执行
两个条件:
1.用户能够控制输入
2.原本程序要执行的代码,拼接了用户输入的数据

注入类型
SQL注入
把SQL命令插入到web表单的输入域或页面请求的查询字符串,欺骗数据库服务器执行恶意的SQL命令
命令注入
后端未过滤掉恶意数据,代码当做系统命令执行
代码注入
文件包含
反序列化漏洞
LDAP注入
XML注入
XXE:引用外部实体时,构造恶意内容,导致读取任意文件,执行系统命令,探测内网端口,攻击内网网站等危害
Xpath:与SQL注入类似,XPath解析器本身对URL,表单中提交的代码内容未做严格限制,导致恶意代码可以直接解析执行
Xquery
JSON注入:轻量级的数据交换格式,主要利用特殊字符注入JSON中造成解析失败
JSONP注入:回调函数未作严格的检测和过滤

危害:
绕过登录验证:登录网站后台
获取敏感数据:获取管理员账号与密码
文件系统操作:列目录,读取,写入文件
注册表操作:读取,写入,删除注册表
执行系统命令:远程执行命令
判断一个HTTP请求是否存在SQL注入的方式存在
经典: and 1=1 | and 2>1 | or 1=1 | or 1<1
数据库函数 and sleep(4)=1 | and length(user())>3
特殊符号 单引号或双引号

注入分类
数字型注入
输入的参数为整数,如果存在注入型漏洞,则为数字型注入
测试方法:
And 1=1 运行正常 And 1=2 运行异常
字符型注入
输入的参数为字符串
与数字型的区别在于:字符型注入一般要使用单引号来闭合
测试方法:
' and '1' = '1 运行正常
' and '1' = '2 运行异常
搜索型注入
主要是指在进行数据搜索时没过滤搜索参数
一般在连接地址中有"keyword=关键字" 有的不显示连接地址,而是直接通过搜索框表单提交

    此类注入点提交的SQL语句,其原型大致为:
    Select * from 表名 where 字段 like '%关键字%'
    

造成SQL注入的原因
1.动态字符串构建引起
不正确地处理转义字符(宽字节注入)
不正确地处理类型(报错泄露信息)
不正确地联合查询
不正确地错误(报错泄露信息)
不正确地多次提交(二次注入)
2.后台存在的问题
后台无过滤或者编码用户数据
数据库可以拼接用户传递的恶意代码
3.错误处理不当
详细的内部错误消息显示给用户或攻击者
错误信息可以直接给攻击者提供下一步攻击帮助
4.不安全的数据库配置
默认账户:
1.SQL Server "sa"作为数据库系统管理员账户
2.MySQL使用"root"和"anonymous"用户账户
3.Oracle则在创建数据库时通常会默认创建SYS/SYSTEMS/DBSNMP/OUTLN账户
手工注入过程
1.判断是否存在注入点
2.判断字符长度
3.判断字段回显位置
4.判断数据库信息
5.查找数据库名
6.查找数据库表
7.查找数据库表中所有字段及字段值
8.猜解账号密码
9.登录管理员后台

寻找SQL注入
GET注入
POST注入
Cookie注入
Host注入
User-Agent注入
****

挖掘SQL注入

使用逻辑进行确认

OR 1=1
OR 1=2
AND 1=1
AND 1=2
测试字符串 变种 预期结果
' 触发错误,如果成功,数据库将返回一个错误
1' or '1'='1 1') or('1'='1 永真条件,如果成功,将返回表中所有的行
value' or '1'='2 value') or ('1'='2 空条件,如果成功,将返回与原来的值相同的结果
1' or 'ab'='a'+'b 1') or ('ab'='a'+'b SQL Server字符串连接。如果成功将返回永真条件相同的信息
1' or 'ab'='a' 'b 1') or ('ab'='a' 'b Mysql字符串连接,如果成功,将返回与永真条件相同的信息
1' or 'ab'='a'丨丨'b 1') or ('ab'='a'丨丨'b Oracle字符串连接,如果成功,将返回与永真条件相同的信息

识别数据库
1.盲跟踪 -->web应用技术、不同数据库SQL语句差异
2.非盲跟踪 -->报错、直接查询
数据库|注释 |描述 |
|--|--|--|
|SQL Server与Oracle |--(double dash) |用于单行注释
| |/* /|用于多行注释
|MySQL|--(double dash)|用于单行注释。要求第二个dash后跟一个空格或控制字符(如制表符、换行符等)
||#|用于单行注释
||/
/|用于多行注释
*
关于数据库版本的查询**
|数据库|参数 |
|--|--|
|MSSQL |select @@version |
|MySQL|select version()/select @@version|
|Oracle| select banner from $version|
|Postgresql|select version()|


从两个不同的表中提取数据

SELECT column-1,column-2,...column-N FROM table-1
UNION
SELECT column-1,column-2,...column-N FROM table-2

如果允许重复的值,就要使用UNION ALL

SELECT column-1,column-2,...column-N FROM table-1
UNION ALL
SELECT column-1,column-2,...column-N FROM table-2

匹配列

UNION SELECT NULL,NULL,NULL,... //直到匹配对应列时返回为真
ORDER BY 3,ORDER BY 4,ORDER BY 5,... //当列数小于或者等于当前列的时候返回正常
例如:
http://test/?id=' union select 1,2,3--
http://test/?id=1 ' order by 1--
http://test/?id=1 ' order by 2--
http://test/?id=1 ' order by 3--

常见手工注入SQL语句
查看数据库

union select 1,(select group_concat(schema_name)from information_schema.schemate),'3

查看security库数据表

union select 1,(select group_concat(table_name) from information_schema.tables where table_schema='security'),'3

使用条件语句

IF condition THEN do something ELSE do something else
数据库服务器 查询
Microsoft SQL Server IF ('a'='a') SELECT丨ELSE SELECT 2
MySQL SELECT IF('a',1,2)
Oracle SELECT CASE WHEN 'a'='a' THEN 1 ELSE 2 END FROM DUAL SELECT decode(substr(user,1,1),'A',1,2) FROM DUAL
PostgreSQL SELECT CASE WHEN(1=1) THEN 'a' else 'b' END

SQL注入学习(一)的更多相关文章

  1. SQL注入学习资料总结

    转载自:https://bbs.ichunqiu.com/thread-12105-1-1.html  什么是SQL注入 SQL注入基本介绍 结构化查询语言(Structured Query Lang ...

  2. sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)

    (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...

  3. SQL学习之SQL注入学习总结

    所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 测试数据库 我们本文就以如下数据库作为测试数据库,完成我们的注入分析 ...

  4. sql注入学习笔记 详解篇

    sql注入的原理以及怎么预防sql注入(请参考上一篇文章) https://www.cnblogs.com/KHZ521/p/12128364.html (本章主要针对MySQL数据库进行注入) sq ...

  5. SQL注入学习-Dnslog盲注

    1.基础知识 1.DNS DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的 ...

  6. 从零开始的sql注入学习(挖坑不填)

    首先,本人是小白,这篇文章也只是总结了一下大佬们的sql注入方法,要是有错,请各位大佬指出,以便学习. 虽然我是菜鸡,但是太过基础的sql注入问题也就不再重复的解释了.直接从常用的说起. 实战中常用的 ...

  7. 简单sql注入学习

    sql注入是什么? 所谓SQL注入,就是通过把SQL命令插入到Web表单提 交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQ ...

  8. Java SQL注入学习笔记

    1 简介 文章主要内容包括: Java 持久层技术/框架简单介绍 不同场景/框架下易导致 SQL 注入的写法 如何避免和修复 SQL 注入 2 JDBC 介绍 JDBC: 全称 Java Databa ...

  9. sql注入学习心得与sqlmap使用心得

    做题是最好的老师 首先先来分享一下我用来练手的题目,实验吧中的简单的sql注入1,2,3 不得不说,sql注入真是一个神奇的东西,至少我以前看起来一点头绪都没有的题目能入手了 首先是简单的sql注入3 ...

随机推荐

  1. Python读取xlsx文件

    Python读取xlsx文件 脚本如下: from openpyxl import load_workbook workbook = load_workbook(u'/tmp/test.xlsx') ...

  2. react Hooks

    useEffect 1.useEffect是didMount和didUpdate和willUnmount三个函数的集合 2.useEffec(fun):fun会在每次组件render之后执行,而fun ...

  3. 第一个jQuery

    第一个jQuery <script src = "jquery.js"> $(document).ready(function){ alert("Hello ...

  4. java完整并发知识结构图

    一张大的java并发知识结构图,梳理清楚知识的脉络,知识不再零散

  5. cscope和ctags自动更新

    1.写一个shell脚本,定时更新数据库文件,命名为auto_load_cscope.sh,在/usr/local/bin里设置软链接为autocs #!/bin/bash cd $1 while : ...

  6. C语法简单测试

    1.未初始化的枚举变量 /* uninitialized-enum.c */ #include <stdio.h> , black, blue}; int main(void) { enu ...

  7. VFS 上传文件到sftp 报错 包含中文路径 或者中文文件名称

    之前用Apache commons-vfs工具进行ftp操作(FTP服务器是 FileZilla Server) 上传本地文件 到 ftp服务器上,如果文件名称 包含 中文 报错 org.apache ...

  8. SharePoint Framework 在web部件中使用已存在的JavaScript库 - JavaScript库的格式

    博客地址:http://blog.csdn.net/FoxDave JavaScript库格式 不同的JavaScript库的编译和打包方式各不相同.一些是以模块的方式打包的,而另一些是以纯脚本运行在 ...

  9. python基础17_列表推导式 vs 生成器表达式

    [ ] 列表推导式,是用简单的语法来生成列表, ( ) 生成器表达式,是用简单的语法创建个生成器. 外观上仅括号不一样. 虽然写起来方便,但是读起来稍显费力,另外,不易调试. # 列表推导式 prin ...

  10. WPF自定义用户控件不显示

    1,Themes\Generic.xaml最好不要更名 "Generic.xaml"这个名称并非偶然通过上面的叙述,你可能会有冲动将Generic.xaml中的Style代码剪切出 ...