网鼎杯comment二次注入

靶机网址:BUUCTF在线评测

进来就是这个界面,点击发帖后需要进行登录。

从界面可以看出用户是zhangwei,密码是zhangwei***,密码的最后三位需要进行暴力破解。

这里需要用到工具Burp Suite进行抓包。

这就是抓到的包,我们把数据投放到Intruder模块。

在需要暴力破解的地方添加$符号。

最后可以看出只有666这个数字的length长度不一样,这就是密码的最后三位数,成功登录。

点击发帖可以看到这个页面,可以知道这就是要注入的地方。

具体需要怎么注入,注入的点在哪里,也是一无所知,这时就需要拉取源码了。

复制代码
4.到此再次查看源码,看数据包,没有任何提示,这时猜测有源码泄露,扫描发现了.git泄露(访问/.git为Forbidden,我没有扫描,直接尝试出了点,buu扫描太慢了)
5.使用GitHacker得到write_do.php,发现不完全,给他还原一下
在kail上
先 pip3 install GitHacker

如何使用
githacker --url http://aa59014b-45fe-4bb2-b0a5-f3e6e5e91929.node4.buuoj.cn:81/.git/ --output-folder '/root/桌面/test' 
注:--output-folder (将得到的文件存放在那个文件夹里面)
进入write_do所在目录
git log --reflog  注:如果得到的文件内容不全,使用它之后
得到:commit e5b2a2443c2b6d395d06960123142bc91123148c (refs/stash) 有很多的这种的,从第一个一个试
然后:git reset --hard e5b2a2443c2b6d395d06960123142bc91123148c 成功恢复内容

拉取源码的方式。

复制代码
<?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");
}
?>

这就是源码。

category = addslashes(_POST'category');

$sql = "insert into board

set category = '$category',

title = '$title',

content = '$content'";

result = mysql_query(sql);

category = mysql_fetch_array(result)'category';

分析这几行代码可以看出,数据进库又出库,这是一个典型的二次注入。

category = mysql_fetch_array(result)'category';

因为在取数据时并没有对数据进行函数过滤,这就是此次注入的点了。

所以在开始写category的时候就要把数值写好,在后面将数据读取出来的时候就好方便注入了。

点击发帖。

除category外,其他的都可以随意写,再点击详情之后,在提交里留言处写*/#。

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);

因为代码处用了换行,所以单行注释是不行的,需要使用多行注释,并且使用#号将后面的单引号也给注释了。

注入成功,后面再通过基础的注入语句就能获取表名和数据,这里就不再赘述。

相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo4 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077004 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼4 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone4 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen4 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone4 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui