分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

php代码审计题目

发布时间:2023-09-06 01:28责任编辑:沈小雨关键词:暂无标签

右键查看源码,发现有提示source.txt,打开链接

<?phpif ?("POST" == $_SERVER[‘REQUEST_METHOD‘]){ ???$password = $_POST[‘password‘]; ???if (0 >= preg_match(‘/^[[:graph:]]{12,}$/‘, $password)) ???{ ???????echo ‘Wrong Format‘; ???????exit; ???} ???while (TRUE) ???{ ???????$reg = ‘/([[:punct:]]+|[[:digit:]]+|[[:upper:]]+|[[:lower:]]+)/‘; ???????if (6 > preg_match_all($reg, $password, $arr)) ???????break; ???????$c = 0; ???????$ps = array(‘punct‘, ‘digit‘, ‘upper‘, ‘lower‘); ???????foreach ($ps as $pt) ???????{ ???????????if (preg_match("/[[:$pt:]]+/", $password)) ???????????$c += 1; ???????} ???????if ($c < 3) break; ???????if ("42" == $password) ????????????require ‘flag鏂囦欢‘; ???????else echo ‘Wrong password‘; ???????exit; ???}}
 
将用户输入的密码进行3次正则判断,符合 "42" == $password 才会给出flag
三个正则分别是
  1. 可见字符超过12个
  2. 字符串中,把连续的大写,小写,数字,符号作为一段,至少分六段,例如a12SD+io8可以分成a 12 SD + io 8六段
  3. 大写,小写,数字,符号这四种类型至少要出现三种
 
从网上找了资料后看到:
PHP在判断相等时做出的变化var_dump("1" == "01"); // 1 == 1 -> truevar_dump("10" == "1e1"); // 10 == 10 -> truevar_dump(100 == "1e2"); // 100 == 100 -> true
 
根据这个就可以构造出来password: 42.00e+0000000000

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">



来自为知笔记(Wiz)



php代码审计题目

原文地址:http://www.cnblogs.com/name1ess/p/7956461.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved