https://www.ctfer.vip/problem
知识点:html基础,md5绕过,命令执行,正则匹配绕过
写在前面:
这是我第一次出题,虽然是借鉴了一下别人的源码改的,但是还是一次比较有意义的体验,这是团队新生赛题目,目前比赛已经结束,不然你们也看不到我的wp= =,以后应该能通过链接到nss平台搜索到吧,希望这一次出题能让你有所收获,那么我们正式开始回顾本题:

首先是:F12+md5变量绕过:
首先是觉悟之考验,我知道你们最喜欢f12了,当然f12在后面也会经常用到,所以这次f12直接看到源码:

if (isset($_GET['web'])) { $first=$_GET['web']; if ($first==md5($first))
这里只复制了一截,欸嘿当然这一截你也知道该干嘛了,其实这个考点出自:
当然能直接嫖自己以前说过的话肯定就嫖了:
弱比较情况下(即你看到的"=="):
一般这种情况下的md5绕过是传入0e开头的md5值或者数组,因为在弱比较时,会把非同类型类型转换为同类型进行比较,在字符串类型下弱比较中会截取一个字符串前面的数字,直到遇到字符截止,对于0e+数字的值只会截取e之前的0,当然你用什么123a=123b也是可以绕过
所以等号两边同传0e开头时,在弱比较时候就变成了0=0
数组绕过原理是因为两边都是数组,在转换时候为false,false=false所以绕过,当然这里强比较也可以用数组绕过,大家可以思考一下0e开头和123a这种方式在什么时候能绕过强比较或者根本不能绕过。
话说回来,这里即便是令传入的md5值等于$md5后还需要等于其自身进行md5的值,这里就是gank数组绕过和123a的。
所以我们选取0e或者加密后仍为0e开头的数就行例如:0e215962017、以及这些纯字符串转化后为0e+数字的数:QNKCDZO、s878926199a
payload=?web=0e215962017
下一关,其实是嫖了队里师傅博客主页代码,minus就是他的id,但是他的css我没加上去,欸嘿= =,这关其实很简单,大伙喜欢f12就f12翻翻

在一个相对隐秘的角落:

bot一般就是robots.txt,在以后你们做题时候会偶尔遇到泄露robots.txt从而得到提示的情况

这里alt 然后点击查看然后点击修复文字编码就可以解决乱码问题了:

欸,还是没有flag,flag在哪呢,一般这个时候大伙是不是就回去看了,但是我是那种骗人的人吗。

一般有三种方法,第一种,有的能看到,在工具中,点击网络(此处是火狐):

第二个:curl -v + 地址

第三个抓包:欸嘿,抓包肯定看到的,你们抓吧我懒了。
终于到了最后一步:
<?php error_reporting(0); highlight_file(__FILE__); if (isset($_GET['get'])){ $get=$_GET['get']; if(!strstr($get," ")){ $get = str_ireplace("flag", " ", $get); if (strlen($get)>18){ die("This is too long."); } else{ eval($get); } }else { die("nonono"); } } ?>
这里进行一手源码分析:$get=$_GET['get'];以get方式传入get参数
f(!strstr($get," ")){ $get = str_ireplace("flag", " ", $get);
传入参数不能存在空格,如果有flag,把flag变成空格
if (strlen($get)>18)
字符串要小于等于18
eval($get);
满足一切后执行get参数
问题在于:首先你要会构造命令,如果是看过命令执行一课的小伙伴可能更熟悉一点,没看过自己也能去学其实,其次你要知道怎么绕过空格和flag字符,
绕过空格的方式很多,这里讲一下经常用到的两个<重定向符,和间隔符$IFS:
因为IFS为系统变量,默认值为空格,又因为变量的优先级要比命令高,所以可以使用命令+$IFS+参数的方式绕过空格过滤
但是我们并不能直接使用命令+$IFS+参数的方法进行绕过,比如cat$IFSflag.txt,这样是不可以的,因为linux系统或将$IFSflag看做一个整体,从而不能正常的被解析为空格。所以需要在$IFS后面进行截断,以保证$IFS被成功解析有几种方式:
1. 利用绝对路径前面的"/"分隔 Cat$IFS/flag.php 2. 利用通配符“?”分隔 ???在linux里面可以进行代替字母
*在linux里面可以进行模糊匹配 Cat$IFS?lag.php
3.利用“${}”分隔Cat${IFS}flag.php
4.可以创建自定义变量 a=参数;命令$IFS$a Cat$IFS$aflag.php 5.未过滤"0~9"、"@"、"*"命令$IFS$[上述的任意一个数字/字符]参数
通过文件重定向来绕过空格的原理就是文件重定向符号执行优先级大于命令
格式:cat<fileName cat<>flag.txt
对于文件重定向操作符绕过空格过滤,只能用于文件查看的相关命令,比如cat,head,tail,more等。
其他绕过方式:制表符"%09"、“%0a” 制表符\t 如果你还能在群里找到文件,那你可以去翻来看看
至于绕过flag,这里也很简单,我看到基本都是用刚才讲到的*进行模糊匹配
而且因为长度原因,你最好使用一些比较短的绕过方式,比如cat就可以换成nl这种
最终payload:?get=system("nl%09/*"); or ?get=system("nl\t/*");
当然其他能绕过方式也行,这里只是一个参考。
希望我们下一题再见= =