注入攻击(二)--------HTML(有源码)

news2024/10/6 12:29:29

前序文章
注入攻击(一)--------SQL注入(结合BUUCTF sqli-labs)

目录

  • 示例网站搭建
    • 1.搭建LAMP开发环境
      • 1. MySQL
      • 2. PHP
      • 3. Apache
    • 写在示例前
    • 示例1.反射型HTML注入
      • 页面效果
      • 源码
    • 示例2.钓鱼表单
      • 页面效果
      • 源码
    • 示例3.存储型HTML注入
      • 页面效果
      • 源码

示例网站搭建

1.搭建LAMP开发环境

使用kali快速搭建LAMP开发环境,自带,不需要大费周章安装。用whereis命令查看是否有LAMP开发环境

1. MySQL

whereis mysql
mysql

  • 启动mysql服务

    若输入mysql -u root -p显示如下,说明服务未开启
    mysqloff
    输入sudo service mysql start启动服务,再输入,显示可以登录。
    mysqlon
    另:从未使用mysql 需要按如下步骤完成初始安装:

  1. 转换成特权用户,使用命令su

  2. 输入命令mysql_secure_installation,一路Y,安装完毕

    2. PHP

    whereis php
    whereisphp
    php -v
    phpversion

3. Apache

whereis apache2

  • 启动apache

    判断apache是否启动,可以打开浏览器访问localhost,若显示下图,说明未启动。
    apacheoff
    输入命令 sudo service apache2 start 启动apache服务。

    若显示下图,说明apache已经启动
    apacheon

写在示例前

apache的默认站点位置在/var/www/html
所以各位运行前需要将面的所有文件放置在该目录下,首先cd到该目录,创建三个文件夹

  • phishing_site
  • reflection_html_injection
  • store_html_injection
    创建文件夹使用mkdir命令
    然后再将相应的示例文件粘贴到对应文件夹下。
    (当然,你不创建文件夹也可以,只要你记得住对应的示例文件名即可)。

示例1.反射型HTML注入

页面效果

涉及文件

  • reflection_html_injection/index.php

浏览器中输入网址:localhost/reflection_site/index.php
页面效果:
reflection_html_injection
在输入框输入
<script>alert("哎哟,你干嘛");</script>
点击搜索显示如下:
reflection_html_injection2
这就是最基本的反射型html注入,但是,这种html并不会持久存在,而是伴随着每次注入在网页显示。

源码

 <!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>搜索页面</title>
  </head>
  <body>
    <form action=" " method="GET">
      <label for="searchBox">搜索:</label>
      <input type="text" id="searchBox" name="q">
      <input type="submit" value="搜索">
    </form>
    <?php
	if(null !== ($query = $_GET['q'] ?? null))
	{		
		echo "Your search result for:$query";
	}
    ?>

  </body>
</html>

示例2.钓鱼表单

页面效果

涉及文件:

  • phishing_site/index.php
  • phishing_site/reward.php

模拟在官方网站填写表单点击提交按钮后,通过HTML注入攻击向该网页注入钓鱼链接,跳转至第三方网页进行用户信息窃取.
浏览器中输入网址:localhost/phishing_site/index.php
phishing_site
跳转后进入第三方网站(这里为了演示方便直接俄访问了同服务器的文件)
phishing_site2

源码

phishing_site/index.php

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>搜索页面</title>
  </head>
  <body>
    <form action=" " method="GET">
      <label for="searchBox">搜索:</label>
      <input type="text" id="searchBox" name="q">
      <input type="submit" value="搜索">
    </form>   
    <h2>搜索结果:</h2>
<?php
//php8.1不能直接使用isset函数进行判断

	if(null !== ($query = $_GET['q'] ?? null))
	{	
		echo "<p>",$query,"你好,点击我查看你的大奖</p>" ;
		echo "<a href="."reward.php".">查看大奖</a>";
	}

    ?>
  </body>
</html>

phishing_site/reward.php

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>中奖信息填写</title>
  </head>
  <body>
    <h1>恭喜你中奖啦!xx大学优秀毕业生!请填写下面的表单以便于我们联系你</h1>
    <form action=" " method="GET">
      <label>联系信息</label>

      <label for="username">姓名</label>
      <input type="text" id="username" name="uname">

      <label for="phoneNumber">电话</label>
      <input type="text" id="phoneNumber" name="phone">

      <label for="IDCard">身份证号</label>
      <input type="text" id="IDCard" name="id">
      <input type="submit" value="提交">
    </form>
    
  </body>
</html>

示例3.存储型HTML注入

页面效果

涉及文件

  • store_html_injection/index.php
  • store_html_injection/post.php

这种是持久性存在的,应为将注入的内容上传到了服务器端,影响了数据库。
index.php页面上方展示了两个填写表单,点击post后会将两个数据存入mysql数据库。
分割线下面是为了便于演示,选择查询数据库的所有信息展示在页面上。

浏览器中输入网址:localhost/store_html_injection/index.php
store_html_injection
现在开始html注入,在content 或者title中输入:

`

并提交数据库
store2

刷新页面后就会出现,并且换用户登录依然会这样显示,也就是说这种影响是持久的。破坏了网站的正常功能。
store3

源码

store_html_injection/index.php

<!DOCTYPE html>
<html>
<head>
    <title>My Blog</title>
</head>
<body>
    <h1>Welcome to my blog</h1>
    <form method="POST" action="post.php">
        <label for="title">Title:</label>
        <input type="text" name="title" id="title"><br>
        <label for="content">Content:</label>
        <textarea name="content" id="content"></textarea><br>
        <input type="submit" value="Post">
    </form>
<hr>

<?php
// 数据库连接信息
$servername = "localhost:3306";
$username = "root";
$password = "991109";
$dbname = "ctf";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接是否成功
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 查询comment表中的数据
$sql = "SELECT id, title,comment FROM comments";
$result = $conn->query($sql);

// 如果有数据,输出到HTML页面
if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "<p>ID: ".$row["id"]."<br>Title:".$row["title"]."<br>Comment: ".$row["comment"] . "<br><hr></p>";
    }
} else {
    echo "0 结果";
}

// 关闭连接
$conn->close();
?>



</body>
</html>

store_html_injection/post.php

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $title ="'".$_POST["title"]."'";
    $content = "'".$_POST["content"]."'";
    $current_time = (int) time();
//连接数据库 
try {
    $conn = mysqli_connect('localhost:3306','root','pasd','ctf');
    if (!$conn) {
        throw new mysqli_sql_exception(mysqli_connect_error());
    }
}//try 
catch (mysqli_sql_exception $e) {
    echo 'MySQL connection error: ' . $e->getMessage();
}//catch

//如果连接成功了
if($conn){
    $sql = "INSERT INTO comments(id,title,comment) VALUES ($current_time,$title,$content)";
    if (mysqli_query($conn, $sql)) {
        echo "Data inserted successfully";
    } else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
    echo "Post successfully submitted!";
    //关闭数据库连接
    mysqli_close($conn);
}//if($conn)
}
?>


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Docker】使用 Docker 部署 Maven 仓库

在本文中&#xff0c;将介绍如何使用 Docker 部署一个 Maven 本地私服。Maven 私服可以帮助我们管理和共享本地的 Maven 依赖&#xff0c;提高开发效率。本文将使用 Sonatype Nexus 作为 Maven 私服&#xff0c;并使用 Docker Compose 来部署和管理容器。 准备工作 在开始之前…

mysql数据库在windows服务器下安装

一、mysql安装包下载 官网下载地址&#xff1a;mysql安装包下载 如图所示&#xff1a; 二、配置my.ini文件 解压后的文件尽量不要放在C盘&#xff08;内存小&#xff09;&#xff0c;解压后如下图所示 在上图所示根目录下配置my.ini文件 1、右键创建一个文本&#xff08;.text…

pikachu靶场-Unsafe Upfileupload

文件上传漏洞简述 什么是文件上传漏洞&#xff1f;  ​ 凡是存在文件上传的地方均有可能存在文件上传漏洞&#xff0c;关于上传文件操作的时候对方代码写的是否完整、是否安全&#xff0c;一旦疏忽了某个地方可能会造成文件上传漏洞。 文件上传的原理 网站Web应用都有一些文件…

1.SpringBoot基础篇

SpringBoot 文档更新日志 版本更新日期操作描述v1.02021/11/14A基础篇 前言 ​ 很荣幸有机会能以这样的形式和互联网上的各位小伙伴一起学习交流技术课程&#xff0c;这次给大家带来的是Spring家族中比较重要的一门技术课程——SpringBoot。一句话介绍这个技术&#xff0c;…

华为pbr双出口外线,指定内网单个vlan绑定单个出口外线上网

公司两条外线&#xff0c;vlan 10用nat走上面转发出去上网&#xff0c;vlan 20 走下面那条外线出去nat上网 AR2&#xff1a; interface GigabitEthernet0/0/0 ip address 6.6.6.1 255.255.255.0 interface GigabitEthernet0/0/1 ip address 154.1.2.3 255.255.255.0 interface…

Python+Selenium4环境搭建

set集合 怎么把列表种相同的数据和不同的数据取出来 1.把列表转为set集合 2.按照集合的交集 selenium 自动化测试&#xff1a;自动化测试就是通过代码或者是工具模拟人的行为来进行对WEB&#xff08;APP&#xff09;来进行操作。 QTP (HP公司)&#xff1a;以录制回放的模式…

集7大模态(视频、图片、音频、文本、深度图、热力图、惯性)的IMAGEBIND

论文&#xff1a;IMAGEBIND: One Embedding Space To Bind Them All GitHub&#xff1a;https://github.com/facebookresearch/ImageBind Meta AI 提出了 ImageBind&#xff0c;它通过利用多种类型的图像配对数据来学习单个共享表示空间。该研究不需要所有模态相互同时出现的数…

《Kubernetes证书篇:基于cfssl工具集一键生成二进制kubernetes集群相关证书(方法一)》

一、背景信息 Kubernetes 需要 PKI 证书才能进行基于 TLS 的身份验证。如果你是使用 kubeadm 安装的 Kubernetes&#xff0c; 则会自动生成集群所需的证书。如果你是使用二进制安装的 Kubernetes&#xff0c;则需要自己手动生成集群所需的证书。 1、首先从etcd算起 1、etcd CA…

百度地图绘制地区的棱柱效果-定位-自定义点-文本标记-信息弹窗

文章目录 百度地图webgl使用自定义地图样式地区镂面棱柱效果绘制点信息以及信息弹窗 百度地图webgl使用 在项目的index.html中引入 <script type"text/javascript" src"//api.map.baidu.com/api?typewebgl&v1.0&ak你的AK秘钥"></script…

花式反转字符串

文章目录 简单反转字符串题目详情分析Java完整代码 反转链表进阶问题题目详情分析Java完整代码 左旋转字符串题目详情分析Java完整代码 反转字符串中的单词题目详情分析Java完整代码 本文对常见的反转字符串题目进行串烧整理。 简单反转字符串 题目详情 编写一个函数&#xf…

9. 对象指针与对象数组

一、对象指针 声明形式&#xff1a; 类名 *对象指针名; Clock c(8, 3, 10); Clock *ptr; ptr &c;通过指针访问对象成员&#xff08;一般类的属性都是封装起来的&#xff0c;因此通常是通过指针访问成员函数&#xff09; 对象指针名->成员名 ptr->getHour();相当于(*…

linux0.12-8-7-signal.c

[334页] (-:这一小节很难理解。但我基本都理解了&#xff0c;哈哈。 1、为什么signal不可靠&#xff0c;而sigaction可靠&#xff1b; 2、 为什么系统调用会被打断&#xff1f; 3、 sys_signal&#xff0c;sys_sigaction&#xff0c;函数作用&#xff1f; 4、 do_signal&#x…

【高项】高级项目管理与组织管理(第4版教材第20-23章,管理科学知识)

文章目录 【高项系列】知识复习1、高级项目管理&#xff08;组织级管理&#xff0c;项目集管理&#xff0c;项目组合管理&#xff0c;量化项目管理&#xff0c;项目成熟度模型&#xff09;1.1 组织级项目管理&#xff08;项目组合项目集, 战略方向一致&#xff0c;0-1分&#x…

python并发编程:并发编程中是选择多线程呢?还是多进程呢?还是多协程呢?

❝ Python对并发编程的支持非常丰富&#xff0c;可以使用多线程、多进程、协程等方式进行并发编程。那么&#xff0c;应该如何选择呢&#xff1f; ❞ Python并发编程有哪些方式 Python并发编程有三种方式: 多线程 Thread 多进程 Process 多协程 Coroutine 什么是CPU密集型计算、…

《花雕学AI》Poe 一站式 AI 工具箱:ChatGPT4 体验邀请,亲,不要错过哦!

你有没有想过&#xff0c;如果你能在同一个平台上体验多种不同的 AI 模型&#xff0c;和他们进行有趣、有用、有深度的对话&#xff0c;甚至还能轻松地分享你的对话给其他人&#xff0c;那该有多好&#xff1f;如果你有这样的想法&#xff0c;那么你一定不能错过 Poe 一站式 AI…

winsows10 下 wsl2 使用 rviz 报错 Segmentation fault 段错误 (核心已转储) 的另一可能解决方案

问题 今天在 wsl 里使用 rviz 时突然报错 Segmentation fault 无法使用了, 报错如下 (base) rootXAIR14:~ $ rviz QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to /tmp/runtime-root [ INFO] [1683702959.671174856]: rviz version 1.13.29 [ INFO] [1683702959.67…

SpringMVC中使用form:form表单标签报500错误

在做数据验证的时候出现了一点bug,先看一下网页报错信息 再看一下后台日志信息 11: 12: <body> 13: 14: <form:form modelAttribute"user" action"/user/login" method"post"> 15: <table> 16: <tr> 17:…

Babel 总结

文章目录 Babel 总结概述安装使用一、添加配置文件二、编写源代码三、配置package.json四、编译代码 对比代码 Babel 总结 概述 Babel 是一个 JavaScript 编译器&#xff0c;主要用于在当前和旧的浏览器或环境中&#xff0c;将 ECMAScript 2015 代码转换为 JavaScript 向后兼…

【软考备战·希赛网每日一练】2023年5月10日

文章目录 一、今日成绩二、错题总结第一题第二题第三题 三、知识查缺 题目及解析来源&#xff1a;2023年05月10日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; proceed v.开始行动&#xff0c;开展&#xff1b;继续做&#xff08;或从事、进行&…

redis之jedis:通过redis的API与Java的集成

什么是jedis&#xff1f; 简而言之&#xff1a;jedis就是通过redis的API对redis的操作&#xff0c;通过Java类对数据库进行操作&#xff0c;注意&#xff1a;使用的命令则是redis数据库的API,jedis是一个java实现的redis客户端连接工具。常用的还有redisson&#xff0c;jedis跟…