【攻防世界】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博客

相关推荐
剑神一笑15 小时前
Linux ls 命令深度解析:从目录遍历到颜色输出的实现原理
linux·服务器·数据库
Nayxxu17 小时前
Claude API 生产稳定性设计:超时、降级、备用模型和告警怎么做
开发语言·php
Jinkxs18 小时前
Python基础 - 文件的写入操作 write与writelines方法
android·服务器·python
狗凯之家源码网19 小时前
三角洲行动护航系统源码部署与运营指南
开源·php
兮动人19 小时前
服务器流量监控与性能优化实战
服务器·网络·性能优化·服务器流量监控与性能优化实战
持敬chijing20 小时前
Web渗透之SQL注入-堆叠注入(Stacked Queries Injection)
sql·安全·web安全·网络安全·网络攻击模型·安全威胁分析
caimouse20 小时前
Reactos 第 4 章 对象管理 — 4.1 对象与对象目录
服务器·c语言·开发语言·windows·架构
Dxy123931021620 小时前
BAT 窗口不输出日志:三种静默方案,从半隐藏到完全消失
linux·运维·服务器
Tian_Hang20 小时前
Linux基础知识(一)
linux·运维·服务器
189228048611 天前
NV086固态MT29F16T08EWLCHD8-TES:C
大数据·服务器·人工智能·科技·缓存