ctfshow摆烂杯(卑微wp日记)

博客探讨了一段复杂的PHP代码,涉及安全过滤用户输入、错误报告、字符串匹配和文件内容验证等多个方面。通过?id=0&content=W1111111&filename=data://text/plain,welcome2ctfshow的示例输入,解释了如何使代码返回预期结果。内容涵盖网络安全和PHP编程技巧。
摘要由CSDN通过智能技术生成

一、一行代码

首先审题:

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 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值