注入攻击的本质: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. java 对小数位的处理 BigDecimal DecimalFormat 常用操作 浅解

    [博客园cnblogs笔者m-yb原创, 转载请加本文博客链接,笔者github: https://github.com/mayangbo666,公众号aandb7,QQ群927113708] htt ...

  2. 在当前TestSuite/TestCase run之前先run另一个TestSuite/TestCase

    在当前的TestSuite/TestCase的Setup Script里面写上这段代码: import com.eviware.soapui.model.support.PropertiesMap l ...

  3. python ---split()函数讲解

    python ---split()函数讲解 split中文翻译为分裂. 在python用于分割字符串使用. split()就是将一个字符串分裂成多个字符串组成的列表. split()可以传入参数,也可 ...

  4. bootstrap中的.container类定义

    bootstrap中的.container类定义 .container{ padding-right:15px; padding-left:15px; margin-right:auto; margi ...

  5. 团队作业3——alpha阶段冲刺

    1.博客链接集合 敏捷冲刺1 敏捷冲刺2 敏捷冲刺3 敏捷冲刺4 敏捷冲刺5 敏捷冲刺6 敏捷冲刺7 测试随笔 冲刺总结随笔 2.项目git地址 git地址 3.项目成员贡献比例 成员 比例 张艺琳( ...

  6. cv2.findContours

    Layout of the output array image is incompatible with cv::Mat (step[ndims-1] != elemsize or step[1] ...

  7. selenium的三种等待方式

    selenium有三种等待方式 1.time.sleep() 设置等待最简单的方法就是强制等待,但一般不建议使用,可以在调试的时候进行使用 2.隐性等待 driver.implictily_wait( ...

  8. nc/netcat命令

    nc/netcat命令 语法 nc/netcat(选项)(参数) 选项 -g<网关>:设置路由器跃程通信网关,最多设置8个: -G<指向器数目>:设置来源路由指向器,其数值为4 ...

  9. CSS多行文字超出隐藏加省略号

    overflow: hidden; text-overflow:ellipsis; white-space: nowrap; 限制行数 overflow: hidden; text-overflow: ...

  10. mysql 性能监控

    1.监控thread_cache命中率admin@localhost : (none) 07:51:20> show variables like '%thread%';+----------- ...