注入攻击的本质: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入门(五)

    一.函数返回值 1.函数如果返回多个值,他会把这几个值放到一个元组里面 2.也可以用多个变量来接收 返回多个值放到元组里面 def say(): num1=1 num2=2 num3=3 return ...

  2. MySQL【文本处理函数】的使用方法

    文本处理函数 名称 调用示例 示例结果 描述 LEFT LEFT('abc123', 3) abc 返回从左边取指定长度的子串 RIGHT RIGHT('abc123', 3) 123 返回从右边取指 ...

  3. Visitor 模式心得

    最近读到Visitor模式,还是一知半解的.偶然翻到Uncle Bob对该模式的推导过程,有所心得,和大家分享一下. Uncle Bob 的链接是: http://butunclebob.com/Ar ...

  4. Python第三章(北理国家精品课 嵩天等)

    一.数字类型及其操作 整数:pow(x,y),想算多大,就算多大:以0b或0B开头表示二进制:以0o或0O开头表示八进制:以0x或0X开头表示十六进制. 浮点数:取值范围-10^308至10^308, ...

  5. PHP类自动加载技术

    在我们平时用框架比如laravel时,只要在app目录下的任意路基文件中,如下使用就可以实例化一个对象. $u = new App\Model\User() 我们知道,原生PHP要想实例化一个其他文件 ...

  6. 四:客服端防护HTTP发送请求类

    一.源代码: public class swtDefendOperate{private BackgroundWorker backgroundWorker;//DefendType的值 Verify ...

  7. SmartBinding与kbmMW#1

    即将发布的kbmMW,实现了SmartBinding,SmartBinding的设计目标是: 必须易于使用 必须最小化或完全删除锅炉板代码.(你看到这里的趋势了吗?... kbmMW从那时开始就是为了 ...

  8. ip代理简单方法

    requests.post(url-url,headers=headers,data=data,proxies={'https':'192.165.1.56:8000'}

  9. 强大的css3库

    http://www.html5tricks.com/demo/css3-animate-css/index.html 关注微信小程序

  10. 台达VFD-B变频器调试

    一.变频器上电调试 变频器安装完成后,断开变频器的输出,在没通电前先使用数字表的二极管档对变频器的输入输出进行测量,确保无短路情况,然后接通变频器工作电源,(注意变频器标定的工作电源电压与外部输入电压 ...