[SniperOJ](web) Inject again 注入 过滤左右括号 order by
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的更多相关文章
- [SniperOJ](web)图书管理系统 注入 源码泄露
0x00 题目概况 题目地址:http://www.sniperoj.cn:10000/ 这是一道注入题,存在git源码泄露,使用githack(freebuf有工具介绍)把源码脱下来,进行审计,然后 ...
- SQL注入(过滤空格和--+等注释符)
1.地址:http://ctf5.shiyanbar.com/web/index_2.php(过滤了空格和--+等注释符) 思路:确定注入参数值类型,直接输入单引号,根据报错信息确定参数值类型为字符型 ...
- sql注入过滤的公共方法
/// <summary> ///SQL注入过滤 /// </summary> /// <param name="InText">要过滤的字符串 ...
- 【web渗透技术】渗透攻防Web篇-SQL注入攻击初级
[web渗透技术]渗透攻防Web篇-SQL注入攻击初级 前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的S ...
- 【转载】C#防SQL注入过滤危险字符信息
不过是java开发还是C#开发或者PHP的开发中,都需要关注SQL注入攻击的安全性问题,为了保证客户端提交过来的数据不会产生SQL注入的风险,我们需要对接收的数据进行危险字符过滤来防范SQL注入攻击的 ...
- 好习惯: 用controller as 语法和$inject数组注入
angular好习惯1: 用controller as 语法和$inject数组注入 1) 像普通的JS类一样实现controller,摆脱$scope 2) 用.$inject数组注入相关模块,便于 ...
- 051_末晨曦Vue技术_处理边界情况之provide和inject依赖注入
provide和inject依赖注入 点击打开视频讲解更详细 在此之前,在我们描述访问父级组件实例的时候,展示过一个类似这样的例子: <google-map> <google-map ...
- CTFHub web技能树之RCE初步 命令注入+过滤cat
在一个大佬的突然丢了个题过来,于是去玩了玩rce的两道题 大佬的博客跳转链接在此->>>大佬召唤机 叫 命令注入 一上来就是源码出现,上面有个ping的地方 <?php $re ...
- Web API 依赖注入与扩展
与 MVC 类似, Web API 提供了System.Web.Http.Services.IDependencyResolver 接口来实现依赖注入, 我们可以很容易的用 Unity 来实现这个接口 ...
随机推荐
- windows gdi+ Bitmap 总结
windows gdi+ 是对 windows gdi 的一个c++封装,同时增加了一些扩展功能,如反走样,样条曲线,变换矩阵,图像编解码等. gdi+ 相对于 gdi 也存在一些不足之处,如 执行效 ...
- Solution -「NWRRC 2017」「洛谷 P7024」Fygon 2.0
\(\mathcal{Description}\) Link. 给定一个无并列语句的多重循环,每个变量取值的左端点只能是 \(1\) 或已定义的变量:右端点只能是 \(n\) 或已定义的变量. ...
- Solution -「JOISC 2019」「LOJ #3036」指定城市
\(\mathcal{Description}\) Link. 给定一棵含 \(n\) 个结点的树,双向边权不相同.\(q\) 次询问,每次询问在树上标记 \(e\) 个点,标记的价值为所有趋 ...
- 用 Beep 函数让主板“唱”《生日歌》
用 Beep 函数,让你的主板也会"唱歌".Beep 可以通过控制主板扬声器的发声频率和节拍来演奏美妙的旋律.本文就通过C#演示,调用Beep函数,演奏生日快乐歌.首先我们来看下 ...
- [LeetCode]9.回文数(Java)
原题地址: palindrome-number 题目描述: 给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数是指正序(从左向右)和倒序(从右向左)读都 ...
- suse 12 二进制部署 Kubernetets 1.19.7 - 第02章 - 部署etcd集群
文章目录 1.2.部署etcd集群 1.2.0.下载etcd二进制文件 1.2.1.创建etcd证书和私钥 1.2.2.生成etcd证书和私钥 1.2.3.配置etcd为systemctl管理 1.2 ...
- 利用 pip download 打包软件来提供离线安装
文章目录 1.通过 pip download 下载安装包 2.利用 pip install --no-index 离线安装 1.通过 pip download 下载安装包 linux-oz6w:~ # ...
- 【FAQ】接入HMS Core应用内支付服务过程中一些常见问题总结
HMS Core应用内支付服务(In-App Purchases,IAP)为应用提供便捷的应用内支付体验和简便的接入流程.开发者的应用集成IAP SDK后,调用IAP SDK接口,启动IAP收银台,即 ...
- Django框架路由分发-名称空间
目录 一:路由分发 1.路由分发简介 2.总路由分发配置 3.总路由终极配置(不需要导应用路由,直接点应用即可) 4.子路由配置 二:名称空间 1.名称空间应用场景 3.解决方式二>>&g ...
- jmeter分布式导致重复登录的问题、以及写txt、csv、统计行数
经常收到微信好友的各种问题咨询,今天分享一个比较有代表性的,希望对大家有所帮助. 一位微信好友的提问 问题如下: 问题分析 先简单介绍下服务端的处理逻辑,关于登录,服务端的逻辑一般是:校验用户名.密码 ...