一道web题

一道web题

六月 04, 2022

一、一行代码

首先审题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
echo !(!(include "flag.php")

||(!error_reporting(0))

||stripos($_GET['filename'],'.')

||($_GET['id']!=0)

||(strlen($_GET['content'])<=7)

||(!eregi("ctfsho".substr($_GET['content'],0,1),"ctfshow"))

||substr($_GET['content'],0,1)=='w'

||(file_get_contents($_GET['filename'],'r') !== "welcome2ctfshow"))?$flag:str_repeat(highlight_file(__FILE__), 0);

点击并拖拽以移动

这个整体是三目运算符,所以需要前面的表达式为真才能返回$flag,但在开头有一个!,所以要使里面的表达式为false,但又都是 | | 连接的,所以要使表达式全为false,逐个观察。

三目运算符:

语法:retvalue = expression ? retvalue1 : retvalue2;

说明:如果表达式 expression 的值为真,那么就返回 retvalue1,否则,就返回 retvalue2。

stripos($_GET[‘filename’],’.’):filename中不能存在小数点;

($_GET[‘id’]!=0):id=0;

(strlen($_GET[‘content’])<=7):content的长度大于7;

(!eregi(“ctfsho”.substr($_GET[‘content’],0,1),”ctfshow”)):没匹配为真,则匹配为假;content=ww

substr($_GET[‘content’],0,1)==’w’:content为W

(file_get_contents($_GET[‘filename’],’r’) !== “welcome2ctfshow”)):用data伪协议绕过;

在网址输入:?id=0&content=W1111111&filename=data://text/plain,welcome2ctfshow

先记录一下,以后阶段性补充,不懂的知识很多,目前只是知其然而不知所以然.