从开发角度理解漏洞成因(02)

文章目录

  • 文件上传类
    • 需求
      • 文件上传漏洞
  • 文件下载类
    • 需求
      • 文件下载漏洞
    • 扩展
  • 留言板类(XSS漏洞)
    • 需求
      • XSS漏洞
  • 登录类
    • 需求
    • cookie伪造漏洞
    • 万能密码登录

持续更新中…

文章中代码资源已上传资源,如需要打包好的请点击PHP开发漏洞环境(SQL注入+文件上传+文件下载+XSS+万能密码+session/cookie的学习等等)

文件上传类

需求

1、在博客文件中生成上传文件的功能
2、只允许上传jpg、jpeg、png文件格式

upload.php

<!DOCTYPE html>  
<html>  
<head>  <title>文件上传</title>  
</head>  
<body>  
<h2>文件上传</h2>  
<form action="" method="POST" enctype="multipart/form-data">  <input type="file" name="upload">  <input type="submit" value="上传">  
</form>  
</body>  
</html>  <?php  
header("Content-Type: text/html; charset=UTF-8"); //设置字符集  
//获取文件名字  
@$name = $_FILES['upload']['name'];  
//获取上传文件的类型  
@$type = $_FILES['upload']['type'];  
//获取上传文件的大小  
@$size = $_FILES['upload']['size'];  
//获取上传文件的错误代码  
@$error = $_FILES['upload']['error'];  
//获取上传文件的临时文件名  
@$tmp_name = $_FILES['upload']['tmp_name'];  echo @$name . "<br>";//打印  
echo @$type . "<br>";  
echo @$size . "<br>";  
echo @$error . "<br>";  
echo @$tmp_name . "<br>";  if ($type == "image/jpeg" || $type == "image/jpg" || $type == "image/png") {  if (!move_uploaded_file($tmp_name, 'upload/' . $name)) {  echo "文件移动失败";  } else {  echo '/upload/' . $name;  echo "文件上传成功";  }  
} else {  echo "文件类型不正确";  
}  
?>

文件上传漏洞

通过代码分析,做了文件类型的判断,只限于jpeg、png、jpg 三种类型进行上传,那么上传php一句话木马会提示文件类型不正确,并且在目录中未发现上传的文件

试想既然知道有限制,那么我们能不能抓包修改文件类型呢?

上传一个一句话木马文件,文件后缀 .php

<?php @eval($_POST['cmd']);?>

修改为: Content-Type:image/png,放包

发现上传成功并获取到了路径

进行漏洞利用

文件下载类

需求

1、创建一个文件下载的功能
2、在soft文件夹中提取所需要的东西
3、需要有选择框,以供选择

download.php

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <title>文件下载</title>  
</head>  
<body>  
<h1>直接下载</h1>  
<?php  
// 获取文件路径  
$filepath = '../soft/';  // 获取文件列表  
$filenames = scandir($filepath);  // 创建下载表单  
echo '<form action="" method="POST">';  
echo '需要下载的文件:<select name="name">';  // 生成文件下拉选项  
foreach ($filenames as $filename) {  if ($filename != '.' && $filename != '..') {  echo '<option value="' . $filename . '">' . $filename . '</option>';  }  
}  // 关闭下载表单  
echo '</select>';  
echo '<input type="submit" value="下载">';  
echo '</form>';  // 处理文件下载  
if (isset($_POST['name'])) {  $name = $_POST['name'];  $file = $filepath . $name;  // 检查文件是否存在  if (file_exists($file)) {  $filesize = filesize($file);  // 设置下载文件的相关头信息  header('Content-Type: application/octet-stream');  header('Content-Disposition: attachment; filename="' . $name . '"');  header('Content-Length: ' . $filesize);  // 读取文件内容并输出给用户  readfile($file);  exit;  } else {  echo '文件不存在!';  }  
}  
?>  
</body>  
</html>

文件下载漏洞

分析代码发现下载文件名由name决定,那么我们就可以尝试构造任意文件名,跳目录,造成任意文件下载

抓包

修改文件名,可以任意读取源代码,造成任意文件下载读取漏洞

扩展

文件类漏洞,还有如下漏洞类型,不一一举例,原理都差不多,如:
1、任意文件删除
2、任意文件写入
3、文件包含等等

WEB漏洞核心
1、可控变量
2、特定函数

留言板类(XSS漏洞)

需求

1、生成留言板功能
2、并写一个留言列表功能,可以看到留言人的姓名和内容

XSS漏洞

message.php

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <title>留言板</title>  
</head>  
<body>  
<h1>留言板</h1>  <?php  
// 处理留言提交  
if (isset($_POST['submit'])) {  $name = $_POST['name'];  $message = $_POST['message'];  $timestamp = date('Y-m-d H:i:s');  // 将留言信息保存到文件  $file = 'messages.txt';  $data = $timestamp . ' - ' . $name . ': ' . $message . "\n";  file_put_contents($file, $data, FILE_APPEND);  
}  
?>  <form action="" method="POST">  <label for="name">姓名:</label>  <input type="text" name="name" id="name" required><br>  <label for="message">留言:</label>  <textarea name="message" id="message" rows="4" required></textarea><br>  <input type="submit" name="submit" value="提交留言">  
</form>  <hr>  <h2>留言列表</h2>  <?php  
// 读取留言列表  
$file = 'messages.txt';  
if (file_exists($file)) {  $messages = file($file);  // 显示留言列表  foreach ($messages as $message) {  echo $message . '<br>';  }  
} else {  echo '暂无留言。';  
}  
?>  
</body>  
</html>

通过代码分析,发现留言的信息都存在message.txt 文件里,然后进行读取放到留言列表中,这里可能造成存储型XSS漏洞,那么我们试试构造JS语句,看是否被执行。

点击提交留言,发现存在xss漏洞,并存储在message.txt 文件里,每次刷新都会调用,说明存在存储型XSS漏洞

登录类

需求

1、生成登录页面
2、使用session或cookie进行验证
3、登录时使用验证码校验
4、必须使用‘user1’账号,才能登录管理员后台

login.php(cookie验证)

<!DOCTYPE html>  
<html lang="en">  
<head>  <meta charset="UTF-8">  <title>登录页面</title>  <link rel="stylesheet" type="text/css" href="../login.css">  
</head>  
<body>  
<div class="container">  <h2>欢迎登录</h2>  <form action="login.php" method="POST">  <div class="form-group">  <label for="username">用户名:</label>  <input type="text" id="username" name="username" required>  </div>        <div class="form-group">  <label for="password">密码:</label>  <input type="password" id="password" name="password" required>  </div>        <div class="form-group">  <label for="captcha">验证码:</label>  <input type="text" id="captcha" name="captcha" required>  <img src="captcha.php" alt="验证码">  </div>        <button type="submit" name="login">登录</button>  </form></div>  
</body>  
</html>  <?php  
session_start();  include('../config/conn.php');  @$username = $_POST['username'];  
@$password = $_POST['password'];  
@$captcha = $_POST['captcha'];  // 验证验证码  if (isset($_POST['login'])) {  if (isset($_SESSION['captcha']) && strtolower($captcha) === strtolower($_SESSION['captcha'])) {  // 验证用户名和密码  $sql = "SELECT * FROM pass WHERE username = '$username' AND password = '$password'";  $result = mysqli_query($conn, $sql);  echo $sql;  
/*  if (mysqli_num_rows($result)) {            echo "登录成功";  header("location:../admin/admin_login.php"); // 验证成功跳转到后台页面  setcookie("username", $username, 0, '/'); // 设置cookie  } else {            echo "用户名或密码错误";  }    } else {        echo "验证码错误";  }}  
//  
*/  
//session验证  while (@$row = mysqli_fetch_array(@$result)) {//成功登录后  $_SESSION['username'] = $row['username'];//将查询结果的数据进行赋值  header("location:../admin/admin_login.php");//验证成功跳转到后台页面  }  }  
}  ?>

admin_login.php(登录校验)

<?php  
include ("../config/login_check.php"); //cookie验证  /*  
session验证  
header("Content-type:text/html;charset=utf-8");//编码  
session_start();  
if (@$_SESSION['username']=='user1'){  echo '登录成功,这里是管理员后台';  
}else{  echo '非法访问';  
}  
?>  
*/  
?>

login_check.php (cookie验证)

<?php  
//1、先验证登录,才进行代码操作  
//2、cookie验证  
//3、session验证  
header("Content-type:text/html;charset=utf-8");//编码  
@$username = $_COOKIE['username'];//接受cookie  
if ($username == 'user1') {//只有当用户名为'user1'时才能登录到管理员后台  echo '登录成功,这里是后台管理界面';  
} elseif ($username != '') {//其他用户验证成功  echo '登录成功';  
} else {  echo "非法访问";  
}  
?>

captcha.php 验证码

<?php  
session_start();  // 生成随机验证码  
$length = 4; // 验证码长度  
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; // 验证码字符集  
$captcha = '';  
for ($i = 0; $i < $length; $i++) {  $captcha .= $characters[rand(0, strlen($characters) - 1)];  
}  // 存储验证码到 Session$_SESSION['captcha'] = $captcha;  // 创建验证码图片  
$imageWidth = 110;  
$imageHeight = 80;  
$image = imagecreatetruecolor($imageWidth, $imageHeight);  
$backgroundColor = imagecolorallocate($image, 255, 255, 255);  
$textColor = imagecolorallocate($image, 0, 0, 0);  // 填充背景色  
imagefilledrectangle($image, 0, 0, $imageWidth, $imageHeight, $backgroundColor);  // 绘制验证码文本  
$textX = ($imageWidth - 50) / 2;  
$textY = $imageHeight / 2 + 10;  
imagestring($image, 5, $textX, $textY, $captcha, $textColor);  // 输出验证码图片  
header('Content-Type: image/png');  
imagepng($image);  
imagedestroy($image);  
?>

验证是否符合需求

user1 管理登录后台

其他用户登录,不前往管理员后台

cookie伪造漏洞

通过代码分析,后端校验用户为 user1 即可登录到管理员后台

修改cookie为 user1,刷新即可登录到管理元后台

万能密码登录

通过代码审计发现对数据库做校验的时候,出现了一些问题,如下:

$sql = "SELECT * FROM pass WHERE username = '$username' AND password = '$password'";

把 $username 替换成 如下:

SELECT * FROM pass WHERE username = '1' or 1=1 -- ' AND password = '$password'

这样就形成了,万能密码登录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/323343.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

缓存相关问题:雪崩、穿透、预热、更新、降级的深度解析

✨✨祝屏幕前的小伙伴们每天都有好运相伴左右✨✨ &#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; 目录 引言 1. 缓存雪崩 1.1 问题描述 1.2 解决方案 1.2.1 加锁防止并发重建缓存 2. 缓存穿透 2.1 问题描述 2.2 解决方案 2.2.1 …

基于TL431和CSA的恒压与负压输出

Hello uu们,51去那里玩了呀?该收心回来上班了,嘿嘿! 为什么会有这个命题,因为我的手头只有这些东西如何去实现呢?让我们一起来看电路图吧.电路图如下图1所示 图1:CSA恒压输出电路 图1中,R1给U2提供偏置,Q1给R1提供电流,当U1-VOUT输出大于2.5V时候,U2内部的三极管CE导通,使得…

Golang | Leetcode Golang题解之第73题矩阵置零

题目&#xff1a; 题解&#xff1a; func setZeroes(matrix [][]int) {n, m : len(matrix), len(matrix[0])col0 : falsefor _, r : range matrix {if r[0] 0 {col0 true}for j : 1; j < m; j {if r[j] 0 {r[0] 0matrix[0][j] 0}}}for i : n - 1; i > 0; i-- {for …

Python的Web框架Flask+Vue生成漂亮的词云图

生成效果图 输入待生成词云图的文本&#xff0c;点击生成词云即可&#xff0c;在词云图生成之后&#xff0c;可以点击下载图片保存词云图。 运行步骤 分别用前端和后端编译器&#xff0c;打开backend和frontend文件夹。前端运行 npm install &#xff0c;安装相应的包。后端…

【prometheus】Pushgateway安装和使用

目录 一、Pushgateway概述 1.1 Pushgateway简介 1.2 Pushgateway优点 1.3 pushgateway缺点 二、测试环境 三、安装测试 3.1 pushgateway安装 3.2 prometheus添加pushgateway 3.3 推送指定的数据格式到pushgateway 1.添加单条数据 2.添加复杂数据 3.SDk-prometheus-…

Python深度学习基于Tensorflow(8)自然语言处理基础

RNN 模型 与前后顺序有关的数据称为序列数据&#xff0c;对于序列数据&#xff0c;我们可以使用循环神经网络进行处理&#xff0c;循环神经网络RNN已经成功的运用于自然语言处理&#xff0c;语音识别&#xff0c;图像标注&#xff0c;机器翻译等众多时序问题&#xff1b;RNN模…

16地标准化企业申请!安徽省工业和信息化领域标准化示范企业申报条件

安徽省工业和信息化领域标准化示范企业申报条件有哪些&#xff1f;合肥市 、黄山市 、芜湖市、马鞍山、安庆市、淮南市、阜阳市、淮北市、铜陵市、亳州市、宣城市、蚌埠市、六安市 、滁州市 、池州市、宿州市企业申报安徽省工业和信息化领域标准化示范企业有不明白的可在下文了…

《TAM》论文笔记(上)

原文链接 [2005.06803] TAM: Temporal Adaptive Module for Video Recognition (arxiv.org) 原文代码 GitHub - liu-zhy/temporal-adaptive-module: TAM: Temporal Adaptive Module for Video Recognition 原文笔记 What&#xff1a; TAM: Temporal Adaptive Module for …

JAVA系列:IO流

JAVA IO流 IO流图解 一、什么是IO流 I/O流是Java中用于执行输入和输出操作的抽象。它们被设计成类似于流水&#xff0c;可以在程序和外部源&#xff08;如文件、网络套接字、键盘、显示器等&#xff09;之间传输数据。按处理数据单位分为&#xff1a; 1字符 2字节 、 1字节(…

阿里发布通义千问2.5:一文带你读懂通义千问!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

【Linux系统编程】31.pthread_detach、线程属性

目录 pthread_detach 参数pthread 返回值 测试代码1 测试结果 pthread_attr_init 参数attr 返回值 pthread_attr_destroy 参数attr 返回值 pthread_attr_setdetachstate 参数attr 参数detachstate 返回值 测试代码2 测试结果 线程使用注意事项 pthread_deta…

AI智能分析高精度烟火算法EasyCVR视频方案助力打造森林防火建设

一、背景 随着夏季的来临&#xff0c;高温、干燥的天气条件使得火灾隐患显著增加&#xff0c;特别是对于广袤的森林地区来说&#xff0c;一旦发生火灾&#xff0c;后果将不堪设想。在这样的背景下&#xff0c;视频汇聚系统EasyCVR视频融合云平台AI智能分析在森林防火中发挥着至…

GeoServer 任意文件上传漏洞分析研究 CVE-2023-51444

目录 前言 漏洞信息 代码审计 漏洞复现 前言 时隔半月&#xff0c;我又再一次地审起了这个漏洞。第一次看到这个漏洞信息时&#xff0c;尝试复现了一下&#xff0c;结果却很不近人意。从官方公布的漏洞信息来看细节还是太少&#xff0c;poc不是一次就能利用成功的。也是当时…

AXI4读时序在AXI Block RAM (BRAM) IP核中的应用

在本文中将展示描述了AXI从设备&#xff08;slave&#xff09;AXI BRAM Controller IP核与Xilinx AXI Interconnect之间的读时序关系。 1 Single Read 图1展示了一个从32位BRAM&#xff08;Block RAM&#xff09;进行AXI单次读取操作的时序示例。 图1 AXI 单次读时序图 在该…

书生浦语训练营第三次课笔记:XTuner 微调 LLM:1.8B、多模态、Agent

Finetune 简介 两种Finetune范式&#xff1a;增量预训练微调、指令跟随微调 微调数据集 上述是我们所期待模型回答的内容&#xff0c;在训练时损失的计算也是基于这个。 训练数据集看起来是这样&#xff0c;但是真正喂给模型的&#xff0c;是经过对话模板组装后的 下图中&…

信息系统项目管理师0097:价值交付系统(6项目管理概论—6.4价值驱动的项目管理知识体系—6.4.6价值交付系统)

点击查看专栏目录 文章目录 6.4.6价值交付系统1.创造价值2.价值交付组件3.信息流6.4.6价值交付系统 价值交付系统描述了项目如何在系统内运作,为组织及其干系人创造价值。价值交付系统包括项目如何创造价值、价值交付组件和信息流。 1.创造价值 项目存在于组织中,包括政府机构…

ICode国际青少年编程竞赛- Python-2级训练场-数独

ICode国际青少年编程竞赛- Python-2级训练场-数独 1、 Spaceship.step(3)2、 Spaceship.step(3)3、 Spaceship.step(1) Spaceship.turnLeft() Spaceship.step(1)4、 Spaceship.step(3) Spaceship.turnRight() Spaceship.step(1)5、 Spaceship.step(4) for i in range(3):Spaces…

(二十一)springboot实战——Spring AI劲爆来袭

前言 本节内容是关于Spring生态新发布的Spring AI的介绍&#xff0c;Spring AI 是一个面向人工智能工程的应用框架。其目标是将 Spring 生态系统的设计原则&#xff0c;如可移植性和模块化设计&#xff0c;应用到人工智能领域&#xff0c;并推广使用普通的Java对象&#xff08…

【Linux】项目自动化构建工具make/makefile

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中项目自动化构建工具make/makefile的相关内容。 如果看到最后…

2024年自动驾驶、车辆工程与智能交通国际会议(ICADVEIT2024)

2024年自动驾驶、车辆工程与智能交通国际会议&#xff08;ICADVEIT2024&#xff09; 会议简介 2024年自动驾驶、车辆工程和智能交通国际会议&#xff08;ICADVEIT 2024&#xff09;将在中国深圳举行。会议主要聚焦自动驾驶、车辆工程和智能交通等研究领域&#xff0c;旨在为从…