Web安全攻防世界05 easyphp(江苏工匠杯)

这篇具有很好参考价值的文章主要介绍了Web安全攻防世界05 easyphp(江苏工匠杯)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

题目是这个样子的:

攻防世界easyphp,# 攻防世界,php,web安全

发现自己编辑的东西有一部分没有被发出来,怪不得阅读量低到可怜...现在重新补上一些内容,解题过程很罗嗦,对小白依然友好~


原因分析:

按照惯例,把源码贴在这里逐行分析一下~

<?php
highlight_file(__FILE__); //高亮文件
$key1 = 0; //变量key1=0
$key2 = 0; //变量key2=0

$a = $_GET['a']; //变量a以get传参
$b = $_GET['b']; //变量b以get传参

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){ //如果 a不为空值,且a的值大于6000000,且a的长度<3 则执行以下语句 参考https://www.php.net/manual/zh/function.intval.php a可为1e9
    if(isset($b) && '8b184b' === substr(md5($b),-6,6)){  //如果b不为零 且 字符串b末尾6位 md5编码结果为'8b184b'
        $key1 = 1; //拿到key1=1;
        }else{ //如果变量b不满足条件的话;
            die("Emmm...再想想"); //挂掉,输出emmm...再想想
        }
    }else{ //如果变量a不满足条件的话
    die("Emmm..."); //挂掉,输出emmm...
}

$c=(array)json_decode(@$_GET['c']); //接受一个 JSON 编码的字符串C并且把它转换为 PHP 值写到数组array中
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){ //如果C是数组,且$c["m"]不是数字或数字字符串且$c["m"]大于2022 参考https://www.php.net/manual/zh/function.is-numeric.php
    if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){ //如果c["n"]是数组 且c["n"]的元素值为2 且$c["n"][0])是数组 参考https://www.php.net/manual/zh/function.count.php#refsect1-function.count-parameters
        $d = array_search("DGGJ", $c["n"]); //d在数组c["n"]中搜索"DGGJ",如果匹配成功返回键值
        $d === false?die("no..."):NULL; //d 为 false的话,挂掉,输出no...
        foreach($c["n"] as $key=>$val){ //检查数组c["n"]
            $val==="DGGJ"?die("no......"):NULL; //如果c["n"]是"DGGJ",挂掉,输出no......
        }
        $key2 = 1; //拿到key2=1;
    }else{ //如果不满足d的条件
        die("no hack"); //输出no hack
    }
}else{ //如果不满足c的条件
    die("no"); //输出no
}

if($key1 && $key2){ //如果拿到了key1和key2
    include "Hgfks.php"; //运行指定文件"Hgfks.php"
    echo "You're right"."\n"; //输出"You're right"
    echo $flag; //掉落flag!
}

?>

解题思路如下:

整个题目就是单纯地在考验php语法,并且每个变量输错了都有不同的提示,可以说是非常贴心了~

顺便说一下,我php语言是0基础,还好最近在翻译代码的时候发现visual studio code:它在选中函数的时候可以直接跳转到php手册,对于小白真是太友好了,下载地址:Visual Studio Code - Code Editing. Redefined~

1 根据第9行 if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3)   在变量a中写入整数值大于6000000且长度小于3的字符串,可以查阅官方手册intval()的介绍~

2 根据第10行 if(isset($b) && '8b184b' === substr(md5($b),-6,6))

   在变量b中写入末尾md5为'8b184b'的字符串,我在印象里有MD5碰撞专用的网站;

3 根据第20行 if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022)

   在数组c的成员m中写入不是数字或数组字符串且值大于2022的东西...可以查阅官方手册!is_numeric()的相关介绍;

4 根据第21行 if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0]))

   在数组c的成员n中写入元素值为2且c["n"][0])是数组的东西...可以查阅官方手册!is_numeric()与is_array()的相关介绍;读到这里已经感觉c是一个套娃数组了...

   根据第22行 $d = array_search("DGGJ", $c["n"]); 

   如果"DGGJ"与$c["n"])的搜素结果匹配,且c["n"]不可以是"DGGJ"本身(第24~26有过滤);

5 根据第19行 $c=(array)json_decode(@$_GET['c']);

   数组c除了上述要求外,还需要是JSON 编码。


解决方案:

本题目可以徒手解题,不需要下载工具~

像我一样的0基础小白可能需要携带一个php在线编辑器测试代码运行结果,我自己一般是用这个:菜鸟教程在线编辑器 (runoob.com)~

对于$a,查询关于intvtal()的信息:PHP: intval - Manual;可以看到intval(1e9)> 6000000~

攻防世界easyphp,# 攻防世界,php,web安全

在菜鸟编辑器上运行一下~

攻防世界easyphp,# 攻防世界,php,web安全

然后传到网站上试一下,get型直接在网址后传参,可以看到判定已经更改啦,有点小开心~

攻防世界easyphp,# 攻防世界,php,web安全

对于$b,写入末尾md5码为'8b184b'的字符串,这个好像在考MD5的碰撞,我找了很多现有的MD5碰撞的网站,都没有得到自己想要的效果...大概是因为题目的要求稍微有点特殊...

(还是记录备用一下,也许以后用得上,解码速度非常快,关键是解密过程不像被拉去挖矿:

Cmd5 - MD5 Online ,MD5 Decryption, MD5 Hash Decoder

MD5在线加密/解密/破解—MD5在线 (sojson.com)

还有三个写得很棒的博文,主题都是脚本暴力破解MD5:

CTF之 MD5 爆破两个例子_seen_in_hw的博客-CSDN博客_md5爆破

攻防世界easyphp,# 攻防世界,php,web安全

这个大佬是用python写的脚本;

MD5碰撞_清风--的博客-CSDN博客_md5碰撞

CTF强弱碰撞的常见解题思路:包括PHP弱比较、MD5弱比较、MD5强比较、MD5构造特定字符串的讲解,含经典CTF题目讲解的python脚本,超赞~

浅谈md5弱类型比较和强碰撞 (qq.com)

CTF强弱碰撞的常见解题思路:包括PHP弱比较、MD5弱比较、MD5强比较、MD5构造特定字符串的讲解,含经典CTF题目讲解的php脚本,超赞~)

emm,最后还是自己写一个简单的脚本去运行...

<?php
for($b=1;$b<=100000;$b++){ //b从1到100000
   if(preg_match('/^8b184b/',substr(md5($b),-6,6))){ //匹配md5b的末尾为8b184b
      echo $b; //输出b
      echo "\n";
      echo md5($b); //输出md5
      echo "\n";
   }
}
?>

攻防世界easyphp,# 攻防世界,php,web安全

 b=53724,输入一下试试看,反馈结果是通过判定~

攻防世界easyphp,# 攻防世界,php,web安全

对于$c已经确认是有2个元素的数组,c = array('m', 'n'),并且是json编码;根据官方手册对于intval的介绍PHP: intval - Manual,发现数字和字符加在一起可以绕过,且数字要前置

攻防世界easyphp,# 攻防世界,php,web安全

攻防世界easyphp,# 攻防世界,php,web安全

根据上面的截图,c[m]我们这里可以填写“>2022的数字+字符”;我这里填写的是“9001+空格”先按照正常的流程走一遍~

攻防世界easyphp,# 攻防世界,php,web安全

发现判定已经更改为nohack,是通过c[m]的判定了~

然后再套用JSON编码运行一遍,就是把c["m"]='9001 '写成c='{"m":"9001 "}';这里注意单引号要变成双引号,因为根据官方教程,写单引号JSON是不会理你的~PHP: json_decode - Manual

攻防世界easyphp,# 攻防世界,php,web安全

(也不要在单引号前加转义字符\,变成c='{"m":"'\9001 ' "}';否则会被直接判定成非数字,值为0~下面贴一下正确的运行结果...)攻防世界easyphp,# 攻防世界,php,web安全

array_search绕过可以参考博文:CTF中常见的 PHP 弱类型漏洞总结 - 北极边界安全团队 - 博客园 (cnblogs.com)

攻防世界easyphp,# 攻防世界,php,web安全

因此我们直接为c[n0]赋予空值数组,保证可以通过is_array($c["n"][0])的判定,c[n1]赋予空值,即c=[[],0];绕过检测~ 再通过在线编辑器运行一下,确认没有反馈,是可以通过判定的~

攻防世界easyphp,# 攻防世界,php,web安全

 用JSON编码再试一下,也是可以过判定的~ 

攻防世界easyphp,# 攻防世界,php,web安全

现在把这一堆以get形式传参~ 

http://61.147.171.105:49675/?a=1e9&&b=53724&&c={"m":"9001 ","n":[[0],0]}

攻防世界easyphp,# 攻防世界,php,web安全

搞定,最后的结果就是:cyberpeace{265d340c3cc47d2996c1907cac15210b}

解题步骤就是这样子的~有疑问或者批评指正的地方欢迎留言~

话说右手抽筋,左手被冻出疤,这么矫情地码字很不容易的~觉得写得 哎哟不错哟 也可以给个赞鼓励一下,感谢~文章来源地址https://www.toymoban.com/news/detail-637780.html

到了这里,关于Web安全攻防世界05 easyphp(江苏工匠杯)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 攻防世界-WEB-Web_php_include

    打开靶机 通过代码审计可以知道,存在文件包含漏洞,并且对伪协议php://进行了过滤。 发现根目录下存在phpinfo 观察phpinfo发现如下: 这两个都为on 所以我们就可以使用data://伪协议 payload如下: 访问新连接 上面的payload就可以实现命令执行了 找了半天发现flag在fl4gisisish3r3.p

    2024年02月09日
    浏览(40)
  • 攻防世界-web篇(php_rce)详解

    每日一题,今天我们来攻防世界web篇(php_rce) 目录 1、利用system函数远程命令执行 2、查找文件目录 3、进入flag目录 4、查看flag文件拿到flag 首先打开题目:  这里我们可以看到打开后是一个ThinkPHP V5的界面,由此我们可以判断这是一个使用TinkPHP框架开发的,接下来我们由长期的

    2024年02月15日
    浏览(48)
  • Web安全攻防世界06 easyupload

    这道题我挣扎了很久,还是没有解出来,详细 错误 解题思路可以参考另一篇博文~(#_-) CTF 总结01:文件上传绕过_梅头脑_的博客-CSDN博客 ↑博文很啰嗦地讲述了我用蚁剑连接一句话木马花式写法的各种失败姿势,面对文件上传一步一个坑的绝望心态,欢迎同伴围观、吐槽和指

    2024年02月07日
    浏览(40)
  • Web安全攻防世界01 fileinclude(宜兴网信办)

    攻防世界文件包含入门题目,参考大佬们的WP有所补充,内容对小白友好~ 按照惯例,首先查看源代码ctrl+u: 整理一下大概是下面这个意思(代码0基础,可能有误,欢迎留言沟通与指正~) 所以题目的关键在于达成这第15行的条件: $lan = $_COOKIE[\\\'language\\\']; 在cookie中的内容 lang

    2023年04月08日
    浏览(41)
  • Web安全攻防世界08 very_easy_sql

    SQL注入、SSRF类型题目~ crtl+u查看源码,如下所示~ 经过了多次失败,终于水了一篇混杂了30%的博文链接+60%的错误解法+文末10%官网wp的博文~ 在我看来这道题目页面和源码都没有明显的提示项...页面甚至没有反馈项,有可能是一道考验运气的题目~ 目前看起来是以POST方式注入,

    2024年02月11日
    浏览(37)
  • 小迪安全20WEB 攻防-PHP 特性&缺陷对比函数&CTF 考点&CMS 审计实例

    #研究对象 PHP代码漏洞(代码问题) # 知识点: 1 、过滤函数缺陷绕过 2 、 CTF 考点与代码审计 一、原理-缺陷函数-使用讲解-本地 内置函数: 大部分是比较函数(过滤时使用的函数) (1)、== 与 === : 参考: PHP 浅谈 == 和=== 中,数字和字符串比较的问题。_php 数字==字符串

    2024年01月19日
    浏览(53)
  • 攻防世界easyupload (web新手)

    典型的文件上传,本题涉及知识点 文件上传漏洞 .user.ini绕过 其实这个题目是文件上传漏洞中相对来说不是很常见的题目,说实话也是涉及了我的知识盲区,在此之前我对文件上传漏洞有一些总结如下,都尝试过后发现没有能用的。 1. JavaScript 防御 检测发生在浏览器端(本地

    2023年04月16日
    浏览(39)
  • 攻防世界web题目记录(一)

    打开后获得源码开始审计 第一个php便是重定向到page页面 第二个是上传文件并保存但是首先需要session为admin 接着看第三个是要利用php弱类型 如果设置了id 并且id的浮点值不等于1并且截取id的最后一个值等于9这里可以使用php弱类型1-9绕过 接着上传文件,这里主要是包括有一个目

    2024年02月07日
    浏览(41)
  • 攻防世界-WEB-easyupload

    1.新建.user.ini文件,内容如下 GIF89a auto_prepend_file=a.jpg 2.上传该文件,并用burp抓包,将Content-Type: application/octet-stream修改为 Content-Type: image/jpg 3.放包,结果如下 4. 新建a.txt文件,内容为 GIF89a ?=eval($_REQUEST[\\\'cmd\\\']);? 保存后将文件后缀修改为.jpg 5.直接上传该文件即可成功上传 PS:按

    2024年02月09日
    浏览(35)
  • 攻防世界-web-easytornado

    题目描述:Tornado 框架。打开链接是一个简单的界面 1. 思路分析 看到有个/flag.txt,我们点击进去看下 发现传入了两个参数,一个是filename,还有一个是filehash 看到里面的内容,提示我们真正的flag在 /fllllllllllllag中 因此,读取到 /fllllllllllllag就可以获取到真正的flag了,但是我

    2024年02月16日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包