WEB:ics-07

背景知识

php弱类型

文件上传漏洞

一句话木马

floatval函数

题目

点击项目管理

点击查看源代码,发泄一个view-source.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');
}

如果传入的参数page的值不是index.php,则包含flag.php,否则重定向到?page=flag.php。

isset() 函数:检测变量是否已设置并且非 NULL

show_source()函数:对文件进行语法高亮显示

header() 函数:向客户端发送原始的 HTTP 报头

复制代码
<?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);
  }
}
?>

_SESSION[\'admin\'] = True的情况下,POST提交**con和file** 两个参数,对`filename`进行正则判断 ,如果判断正确文件会被上传到uploaded/backup目录下。正则匹配这里把一些后缀加入了黑名单

preg_match 函数:执行一个正则表达式匹配

chdir() 函数:改变当前的目录,需规定新目录

fopen() 函数:打开文件或者 URL(并伴随权限)

fwrite () 函数:向文件写入字符串,成功返回写入的字符数,否则返回 FALSE

fclose() 函数:关闭文件

复制代码
<?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;
}
?>

流程是:

1、先传入

2、进行正则过滤

3、改变目录

4、打开文件

5、写入文件

6、关闭文件

(这有不就是文件上传漏洞嘛,上传一句话木马,或者图片马)

且上传的路径为/uploaded/backup/

代码3:

floatval():返回变量的浮点值

substr():截取,这里是截取id的最后以为 必须是9

mysql_real_escape_string() :转义 SQL 语句中使用的字符串中的特殊字符

mysql_query() :执行一条 MySQL 查询

mysql_fetch_object() :从结果集(记录集)中取得一行作为对象

这一段可以使$_SESSION[\'admin\'] = True。需要获取一个id参数, 并且id不为1,且最后一位等于9

这里用到了floatval这个函数,floatval 函数用于获取变量的浮点值 ,但是floatval在遇到字符时会截断后面的部分 ,比如-,+,空格等,所以可以构造id=1xx9来满足第一个if条件 ,if条件满足可以使得result变量为TRUE。成功使_SESSION[\'admin\'] = True;

构造payload

复制代码
?page=flag.php&id=1xx9

这里遇到了一个问题

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

参考学习链接:
【攻防世界WEB】难度五星15分进阶题:ics-07_wx617e2c956ef44的技术博客_51CTO博客

【愚公系列】2023年06月 攻防世界-Web(ics-07)_愚公搬代码的博客-CSDN博客

相关推荐
北城笑笑4 分钟前
FPGA 与 市场主流芯片分类详解:SoC/CPU/GPU/DPU 等芯片核心特性与工程应用
前端·单片机·fpga开发·fpga
网安情报局15 分钟前
RSAC 2026深度解析:AI对抗AI成主流,九大安全能力全面升级
人工智能·网络安全
A923A23 分钟前
【从零开始学 React | 第四章】useEffect和自定义Hook
前端·react.js·fetch·useeffect
ZC跨境爬虫27 分钟前
批量爬取小说章节并优化排版(附完整可运行脚本)
前端·爬虫·python·自动化
ZC跨境爬虫29 分钟前
海南大学交友平台登录页开发实战day4(解决python传输并读取登录信息的问题)
开发语言·前端·python·flask·html
来一颗砂糖橘33 分钟前
pnpm:现代前端开发的高效包管理器
前端·pnpm
前端摸鱼匠33 分钟前
Vue 3 的defineProps编译器宏:详解<script setup>中defineProps的使用
前端·javascript·vue.js·前端框架·ecmascript
木斯佳34 分钟前
前端八股文面经大全: 美团财务科技前端一面 (2026-04-09)·面经深度解析
前端·实习面经·前端初级
酿情师35 分钟前
PHP 反序列化漏洞与 POP 链详解:网络安全小白从零入门
android·web安全·php
LIO37 分钟前
React 零基础入门,一篇搞懂核心用法(适合新手)
前端·react.js