Pikachu-Sql Inject
Pikachu-Sql Inject
在owasp发布的top10排行榜里,注入漏洞一直是危害排名第一的漏洞,其中注入漏洞里面首当其冲的就是数据库注入漏洞。
一个严重的SQL注入漏洞,可能会直接导致一家公司破产!
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。
从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
SQL注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄漏的一种漏洞。
第一步:注入点探测
- 自动方式:使用web漏洞扫描工具,自动进行注入点发现
- 手动方式:手工构造SQL注入测试语句进行注入点发现
第二步:信息获取
通过注入点取得期望得到的数据
- 1.环境信息:数据库类型,数据库版本,操作系统版本,用户信息等
- 2.数据库信息:数据库蜜罐,数据库表,表字段,字段内容等(加密内容破解)
第三步:获取权限
- 获取操作系统权限:通过数据库执行shell,上传木马
1.数字型注入(POST)
最简单的注入。
这里可以根据我们选择的 userid 返回用户名和邮箱
正常来说,我们的数据是放在数据库里的,当我们提交了这个id的,后台会带这个参数到数据库里查询。
构造注入,因为是数字型
1 or 1 = 1
发到 Repeater ,修改id参数的值,取出了数据库中全部数据
2.字符型注入(GET)
可以看出这是一个get型注入
构造闭合,闭合后台查询语句中的第一个单引号,然后注释掉第二个单引号
111' or 1 = 1#
这时候我们也能看到这个表中的全部信息了
3.搜索型注入
这个功能运行我们输入用户名的一部分来查找,可以猜想后台使用了数据库中的搜索这个逻辑,比如用了 LIKE 。
构造对应的闭合,留下单引号和百分号,注释后面的部分。
aaa% 'or 1=1#
4.XX型注入
后台存在各种方式拼接我们的SQL语句,所以我们需要尝试构造各种各样的闭合。
构造如下
111') or 1=1#

5.insert/update注入
先输入一个单引号,提交后后台报错,说SQL语句错误,说明存在注入点。
先注册
可以登录
所谓 insert 注入是指我们前端注册的信息,后台会通过 insert 这个操作插入到数据库中。如果后台没对我们的输入做防 SQL 注入处理,我们就能在注册时通过拼接 SQL 注入。
看一下报错:
我们继续利用 SQL注入漏洞,获取基础信息
基于 insert 下的报错来进行注入
111' or updatexml(1, concat(0x7e,database()), 0) or '
结果如下:
构造sql注入语句
111' and 1=(updatexml(1,concat(0x3a,(select user())),1)))#
6、delete注入
这里有一个留言板,点删除可以把对应的留言删掉
我们点删除并用 BurpSuite 抓包,实际上就是传递了一个留言的 id,后台根据这个 id 去删除
后台可能的 SQL 语句如下
delete from message where id=
我们发送到 Repeater 中继续进行实验,由于参数的值是数字型,所以后台可能存在数字型注入漏洞,构造:
1 or updatexml(1, concat(0x7e,database()), 0)
结果如下:
7.http header注入
有些时候,后台开发人员为了验证客户端头信息(比如cookie验证),或者通过http header获取客户端的一些信息,比如useragent,accept字段等,会对客户端的http header信息进行获取并使用SQL进行处理,如果此时并没有足够的安全考虑,则可能会导致基于 http header 的 SQL 注入漏洞
先登录:
既然他获取了我的http头信息,所以应该是在http头构造sql语句。
把 User-Agent 改为一个单引号,发包看看后台处理的结果,发现直接报了 SQL 语法错误
这说明存在 SQL 注入漏洞,后台可能会 insert 到数据库中
1 ' or updatexml(1,+concat(0x7e,database()), 0) or '
8.盲注(based on boolian)
可以看出能输出相关值
再试试:
报告错误,说明有过滤
直接注释掉是有显示的
一个一个测试后,发现注册用户表单应该有两行
那就直接注入好了
-1' union select group_concat(id,username,pw,sex,phonenum,address,email),2 from member#
读出数据库
9.盲注(based on time)
数据可能没有传入后台,或者前端无论后端传回什么信息都不显示。
测试一下传入时间的测试:
五秒后传入,才显示了结果
于是构造payload
111' and if((substr(database(), 1, 1))='p', sleep(5), null)#
五秒之后成功查询,猜测成功
10.宽字节注入
当我们输入有单引号时被转义为\’,无法构造 SQL 语句的时候,可以尝试宽字节注入。
在皮卡丘平台中,将利用 BurpSuite 截获数据包,发送到 Repeater 中,在里面写入 payload
测试失败。
强行闭合一下:
也不行。
抓包上传试试看
成功爆出。
Pikachu-Sql Inject的更多相关文章
- 【sql inject】sql盲注技巧
SAMPLE 知识点 使用 AND 1 = 1 / 1 或者 1 = 1 / 0 判断是否存在注入,如果正确就会返回页面,如果错误就是1/0语法错误使得页面报错: queueID = 743994 A ...
- 【Mysql sql inject】【入门篇】sqli-labs使用 part 4【18-20】
这几关的注入点产生位置大多在HTTP头位置处 常见的HTTP注入点产生位置为[Referer].[X-Forwarded-For].[Cookie].[X-Real-IP].[Accept-Langu ...
- 【Mysql sql inject】【入门篇】sqli-labs使用 part 3【15-17】
Less-15- Blind- Boolian Based- String 1)工具用法: sqlmap -u --batch --technique BEST 2)手工注入 时间盲注放弃用手工了 ...
- 【Mysql sql inject】【入门篇】SQLi-Labs使用 part 2【12-14】
这几关主要是考察POST形式的SQLi注入闭合 ## Less-12 - POST - Error Based- Double quotes- String ### 1)知识点 主要考察报错注入中的双 ...
- 【Mysql sql inject】【入门篇】SQLi-Labs使用 part 1【01-11】
人员流动性过大一直是乙方公司痛点.虽然试用期间都有岗前学习,但老员工忙于项目无暇带新人成长,入职新人的学习基本靠自己不断摸索.期望看相关文档就可以一蹴而是不现实的.而按部就班的学习又很难短期内将知识有 ...
- 【Mysql sql inject】POST方法BASE64编码注入write-up
翻到群里的小伙伴发出一道POST型SQL注入题,简单抓包判断出题目需要base64编码后才执行sql语句,为学习下SQL注入出题与闯关的思路+工作不是很忙,所以花点时间玩了一下,哈哈哈哈哈哈哈哈哈 ...
- Pikachu漏洞练习平台实验——SQL注入(四)
1.概述 1.1发生原因 SQL注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄 ...
- Cacti /graphs_new.php SQL Injection Vulnerability
catalogue . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 other SQL injection vulnerability ...
- DEDECMS数据库执行原理、CMS代码层SQL注入防御思路
我们在上一篇文章中学习了DEDECMS的模板标签.模板解析原理,以及通过对模板核心类的Hook Patch来对模板的解析流量的攻击模式检测,达到修复模板类代码执行漏洞的目的 http://www.cn ...
- Java Filter防止sql注入攻击
原理,过滤所有请求中含有非法的字符,例如:, & < select delete 等关键字,黑客可以利用这些字符进行注入攻击,原理是后台实现使用拼接字符串,案例:某个网站的登入验证的SQ ...
随机推荐
- Java 添加Word形状或图形
本文将介绍通过java编程在Word文档中添加形状(图形),包括添加单个图形.组合图形,以及格式化图形样式,如设置形状填充色.大小.位置.边框样式.边框颜色.边框粗细.图形旋转角度.图形文本环绕方式等 ...
- 【前端】之JavaScript基础知识
JS 基础知识 JS中,简单类型的数据存储在栈中,复杂类型的数据存储在堆中,其引用存储在栈中 JS中的深拷贝和浅拷贝: 浅拷贝:将对象中的所有简单类型的属性拷贝出来,引用类型属性直接赋值null 深拷 ...
- Chapter 04—Basic Data Management
1. 创建新的变量 variable<-expression expression:包含一组大量的操作符和函数.常用的算术操作符如下表: 例1:根据已知变量,创建新变量的三种途径 > my ...
- 在vue中使用基于d3为基础的dagre-d3.js搞定一个流程图组件
项目中想搞定一个流程图,开始使用了阿里的G6,但是G6目前不支持手势,这样就很郁闷了,因为公司的领导都是使用iPad看的,你不支持手势是不行的,后来又想到了百度的echarts,试了试,感觉还不错,手 ...
- 程序员常用markdown语法记忆小结
0.toc被中括号包围,实现自动提取标题生成目录 [TOC] 1.*的用法 * 一星:黑点 *二星:斜体* 三星:分割线 * * * **四星:粗体** 2.#的用法 # 1级标题 ## 2j ...
- activate-power-mode,让你在Python编码中,感受炫酷的书写特效!
Atom Atom 是github专门为程序员推出的一个跨平台文本编辑器,具有简洁和直观的图形用户界面,并有很多有趣的特点:支持CSS,HTML,JavaScript等网页编程语言.说到这里大家以为我 ...
- 洛谷 题解 2165 [AHOI2009]飞行棋
本蒟蒻又来发题解了, 看到这个题目,本蒟蒻直接开始推公式.. 嗯,可以通过弧长,推出弦长(l = 2 * r * cos(90 * l / (r * Π)); 然后对比各条弦长的平方和与直径的平方. ...
- border-radius:50%和100%的区别
border-radius 值类型-百分比 border-radius的值是百分比的话,就相当于盒子的宽度和高度的百分比. 我们知道在一个正方形内做一个面积最大的圆形,这个圆的半径就为正方形边长的一半 ...
- asp.net core 拦击器制作的权限管理系统DEMO
效果图 没有登陆不会执行请求日期的方法,不管是否登陆都不允许访问请求时间方法 验证不通过是会进行转发到Home/error方法中, 代码附上: [Route("[controller]/[a ...
- 【Flutter】348- 写给前端工程师的 Flutter 教程
点击上方"前端自习课"关注,学习起来~ | 导语 最爱折腾的就是前端工程师了,从 jQuery 折腾到 AngularJs,再折腾到 Vue.React.最爱跨屏的也是前端工程师, ...