其他分享
首页 > 其他分享> > ctfshow[摆烂杯]----一行代码

ctfshow[摆烂杯]----一行代码

作者:互联网

 

代码写的确实丑,echo !()?xxx:yyy,首先这是一个三目运算符问号前面是一个判断语句,若为true则用echo xxx,若为false则echo yyy.

很明显xxx就是flag所在的位置,所以要使得`!()`为真括号内的要为假,即每个数据为假

在绕之前需要了解几个函数:

stripos()

eregi()

file_get_contents()
stripos(string,find,start)

有三个参数,string(必须)是需要操作的字符串,find(必须)是需要查找的字符,start(可选)是开始查找的位置,若start不选即默认从零号位开始查找find数据在string第一次出现的位置

eregi(string,string)   作用:用后一个字符串匹配前一个字符串,若后一个字符串存在前一个则返回true反之返回false。这个函数有个特殊的点就是匹配不区分大小写==>划重点,等会要用

file_get_contents()就不说了,很常见的函数,读取文件内容的

因为是||连接各个条件,因此要将所有的置为false

$_GET['id']!=0  ====》令id=0

substr($_GET['content'],0,1)=='w' ===》不能让content=w

!eregi("ctfsho".substr($_GET['content'],0,1),"ctfshow")===》所以令content=W(因为不区分大小写)

(strlen($_GET['content'])<=7) ===》 让content长度大于7 在content=W基础上随便加若干个字符大于7就行

stripos($_GET['filename'],'.') 字符串中不存在”.“或不操作就是空即为假

 

 

最后要绕过的是file_get_contents()

这里因为我对php伪协议不熟,问了我团队的大牛才知道原来可以用php://input绕过

data协议没试有兴趣的可以自己去试试

最后payload为:GET: ?id=0&content=W1111111&filename=php://input

POST:welcome2ctfshow

 

 

标签:content,string,GET,----,ctfshow,字符串,摆烂杯,find,eregi
来源: https://blog.csdn.net/qq_51295677/article/details/122136808