0x00 题目概述


题目地址:http://web2.sniperoj.cn:10004/

拿到题,尝试注入,发现有过滤。

进行fuzz,发现过滤了 左右括号,分号,等号 ,还有一些查询关键字 。

在username有盲注。

为true时候返回 ‘admin’

同时题目提示flag就为admin的密码。

0X01 自己解题思路流程


尝试联合查询   :   union select 1,2,3 #

发现有回显。

但是发现过滤了 'like' '=' 'where' 'username' 'password' 等一些关键字。

无果。

尝试盲注。

1. 不含有左右括号的函数。 在网上只找到两个 @@datadir ,@@user

没什么用。

2. 尝试绕过过滤。编码绕过等等。无效。

尝试把username构造成数组,看是否有有用的信息显示。得到如下。

Warning:  strtolower() expects parameter 1 to be string, array given in/var/www/html/index.phpon line13

Notice:  Array to string conversion in/var/www/html/index.phpon line22

Flag is the password of admin!

可知有一个 strtolower函数。但这些信息还是没有什么用。

卡壳。

想了挺久的,无果。

0x02 正确的思路


先按个人理解通俗介绍一下 order by 这个东西

select bulabulabula 什么的 接一个 order by , order by 1 表示在查询这个表返回多行结果的时候,按第一列的字段开头的值进行排序。数字在前,然后过了是小写,再过了就是大写字母。

order by 2 表示按第二列进行排序,从acsii小的值往上排序。如果只有两列,order by 3 则会报错,所以order by 也可以用来判断列的数量。

贴图如下:

表:

order by 2 查询结果如下(即按照username开头的第一个值进行排序,如果第一个相同则比较第二个):

好,上面的介绍只是对新手而言,对很多人来说都是废话。回到题目。

这题我看了源码。相关的语句如下:

过滤:

function  filter($str){

$filterlist = "/\(|\)|username|password|where|case|when|like|regexp|into|limit|=|for|;/";

if(preg_match($filterlist,strtolower($str))){

die("Go away!");

}

return $str;

}

查询部分:

$sql = "select * from admin where  username ='$username' and password = '$password'";

$res = $conn -> query($sql);

返回结果的部分:

if($res->num_rows>0){

$row = $res -> fetch_assoc();

if($row['id']){

echo $row['username'];

}

}else{

echo "The content in the password column is the flag!";

}

分析如下:

进行查询,返回结果中 ‘username’ 这一列的值。

paryload思路如下:

我们先看一个在数据库中的查询的例子:

这个查询,我们order by 3, 让查询结果 按照 password 进行排序。

可以看到,admin1 的password 为 'admin1' ,是 ‘a’开头,然而我们union select 是 1,2,'0'  ,‘0’ 这个在‘a’ 的前面 ,这个返回  username 就是 我们的 2 了。

改一下。

‘b’ 比 'a'大 ,在他后面,这个时候返回第一行 username 的值就为 'admin1'。

那这题思路就很明显了。

我们 order by 3 ,让他按照password 进行排列。 union 1,2,3  在3的位置进行爆破。返回值会有一个临界变化状态。

一位一位来。

大概意思是这样。

0x03 脚本


直接粘贴格式会乱。截图如下。

运行结果截图:

0x04 总结


这题真挺有意思的 不看源码真写不出来

出题人思路很有新意,都没写过这种,点赞。(手动@王一航 大佬)

怎么说,对order by 有了挺深刻的印象,收获颇丰。

还是要好好看,好好学。

[SniperOJ](web) Inject again 注入 过滤左右括号 order by的更多相关文章

  1. [SniperOJ](web)图书管理系统 注入 源码泄露

    0x00 题目概况 题目地址:http://www.sniperoj.cn:10000/ 这是一道注入题,存在git源码泄露,使用githack(freebuf有工具介绍)把源码脱下来,进行审计,然后 ...

  2. SQL注入(过滤空格和--+等注释符)

    1.地址:http://ctf5.shiyanbar.com/web/index_2.php(过滤了空格和--+等注释符) 思路:确定注入参数值类型,直接输入单引号,根据报错信息确定参数值类型为字符型 ...

  3. sql注入过滤的公共方法

    /// <summary> ///SQL注入过滤 /// </summary> /// <param name="InText">要过滤的字符串 ...

  4. 【web渗透技术】渗透攻防Web篇-SQL注入攻击初级

    [web渗透技术]渗透攻防Web篇-SQL注入攻击初级 前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的S ...

  5. 【转载】C#防SQL注入过滤危险字符信息

    不过是java开发还是C#开发或者PHP的开发中,都需要关注SQL注入攻击的安全性问题,为了保证客户端提交过来的数据不会产生SQL注入的风险,我们需要对接收的数据进行危险字符过滤来防范SQL注入攻击的 ...

  6. 好习惯: 用controller as 语法和$inject数组注入

    angular好习惯1: 用controller as 语法和$inject数组注入 1) 像普通的JS类一样实现controller,摆脱$scope 2) 用.$inject数组注入相关模块,便于 ...

  7. 051_末晨曦Vue技术_处理边界情况之provide和inject依赖注入

    provide和inject依赖注入 点击打开视频讲解更详细 在此之前,在我们描述访问父级组件实例的时候,展示过一个类似这样的例子: <google-map> <google-map ...

  8. CTFHub web技能树之RCE初步 命令注入+过滤cat

    在一个大佬的突然丢了个题过来,于是去玩了玩rce的两道题 大佬的博客跳转链接在此->>>大佬召唤机 叫 命令注入 一上来就是源码出现,上面有个ping的地方 <?php $re ...

  9. Web API 依赖注入与扩展

    与 MVC 类似, Web API 提供了System.Web.Http.Services.IDependencyResolver 接口来实现依赖注入, 我们可以很容易的用 Unity 来实现这个接口 ...

随机推荐

  1. Hyperledger Fabric 2.x 自定义智能合约

    一.说明 为了持续地进行信息的更新,以及对账本进行管理(写入交易,进行查询等),区块链网络引入了智能合约来实现对账本的访问和控制:智能合约在 Fabric 中称之为 链码,是区块链应用的业务逻辑. 本 ...

  2. 5、Linux基础--etc(文件系统)、启动模式、单用户模式修改密码、安装目录、日志目录、状态目录

    笔记 1.晨考 1.存放系统配置文件的目录 /etc 2.存储系统实时运行状态的目录 /proc 3.存储系统硬件接口的目录 /dev 4.查看系统挂载情况的命令 df -h 5.系统网卡文件路径 / ...

  3. 手把手教你把 Git 子模块更新到主项目

    本文以 skywalking-rocketbot-ui子模块合并到 skywalking 为例,手把手教你如何把 Git 子模块更新到主项目中去. 首先,把fork的skywalking项目克隆到本地 ...

  4. yum配置及使用命令

    linux yum 命令 yum( Yellow dog Updater, Modified)是一个在Fedora和RedHat以及SUSE中的Shell前端软件包管理器. 基於RPM包管理,能够从指 ...

  5. Telnet拓展测试--在生产测试场景的应用

    本文关键词:流量测试.Telnet拓展测试.TCP/IP.时延 一.Telnet简介 Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式.它为用户提供了在 ...

  6. Smartbi扩展性怎么样,是否方便扩展开发产品已有功能?

    Smartbi大数据分析工具具有很强的扩展性,通过"稳定内核+API扩展"的架构,通过报表插件扩展的方式,能满足很多应用项目的定制化需求,把新功能无缝集成到系统中. Smartbi ...

  7. 📚 选择排序和插入排序区别-DS笔记

    选择排序法 A[i...n)未排序,A[0...i)已排序 A[i...n]中最小值要放到A[i]的位置 复杂度 \(O(n^2)\) 第一层循环n次 第二层循环:i=0,n次:i=1,n-1次... ...

  8. EasyUI Datagrid 数据网格 点击选中行 再次单击取消选中行

    适用于jquery-easyui-1.9.15版本: 在项目中全局搜索: opts.singleSelect==true 或者在jquery.easyui.min.js中搜索: opts.single ...

  9. 【Windows 访问控制】八、安全主体和安全对象

    安全主体(security principal)? 安全主体是任何可通过操作系统进行身份验证的实体,例如用户帐户.计算机帐户.在用户或计算机帐户的安全上下文中运行的线程或进程,或者这些帐户的安全组. ...

  10. WebLogic服务器打补丁(11g/12c)

    转至:https://segmentfault.com/a/1190000019059894 背景 2019年04月17日,Oracle发布新季度安全公告.该安全公告披露WebLogic服务器存在多个 ...