PHPCode


strcmp

题目描述

 <?php
include("flag.php");
highlight_file(__FILE__);
if (isset($_GET['a'])) {if (strcmp($_GET['a'], $flag) == 0) //如果 str1 小于 str2 返回 < 0; 如果 str1大于 str2返回 > 0;如果两者相等,返回 0。//比较两个字符串(区分大小写)die('Flag: '.$flag);elseprint 'No';
}
?> 

首先引入flag.php文件,$_GET 是通过 URL 参数传递到当前脚本的变量数组,所以直接在url上可以写入。看判断如果变量不为空,所以可以尝试定义 a 的值。

重点来了,strcmp()函数是比较两个 字符串 的大小。

语法:

strcmp(str1,str2)

返回值:

  • 0 - 如果两个字符串相等
  • <0 - 如果 str1 小于 str2
  • >0 - 如果 str1 大于 str2

但是正因为strcmp函数只能比较字符串,而且是 规定 字符串,所以我们可以直接把a当作数组来比较,但是他可以把数组的某个元素单独进行比较,所以我们直接 ?a[]=  他检测到是数组,返回值为0,从而得出flag。


md5

题目描述

<?php
error_reporting(0);
include("flag.php");
highlight_file(__FILE__);
if (isset($_GET['username']) and isset($_GET['password'])) {if ($_GET['username'] == $_GET['password'])print 'Your password can not be your username.';else if (md5($_GET['username']) === md5($_GET['password']))die('Flag: '.$flag);elseprint 'Invalid password';
}
?> 

首先开头 error_reporting(0) 表示关闭错误报告,如果 username 和 password 同时不为空,且如果 username 和 password 相等 会输出 Your password can not be your username. 不然如果 md5加密 username 和 password 完全相同,则输出 flag 结束。

我第一个想到的是md5加密后的前几位相同,因为在php中0e会被当做科学计数法,就算后面有字母,其结果也都是0,所以if判断结果使true。

QNKCDZO

0e830400451993494058024219903391

240610708

0e462097431906509019562988736854

结果试了  ?username=QNKCDZO&password=240610708   之后行不通

又想到md5加密数组之后返回值为“false”,所以直接构建 ?username[]=0&password[]=2 ,从而得出flag。


sha

题目描述

<?php
include("flag.php");
highlight_file(__FILE__);
if (isset($_GET['name']) and isset($_GET['password'])){var_dump($_GET['name']);echo " ";var_dump($_GET['password']);var_dump(sha1($_GET['name']));var_dump(sha1($_GET['password']));if ($_GET['name'] == $_GET['password'])echo 'Your password can not be your name!';else if (sha1($_GET['name']) === sha1($_GET['password']))die('Flag: '.$flag);elseecho 'Invalid password.';
}
elseecho 'Login first!';
?>

首先如果name和password相等,var_dump() 是返回数据的类型,重要的在下面如果sha1加密后name 完全等于 sha1加密后password 则返回flag。

这里sha1加密和md5一样也是不能直接加密数组,所以同理 ?name[]=0&password[]=1,从而得出flag。


hash

题目描述

<?php
error_reporting(0);
include("flag.php");
$hashed_key = 'd1ae9ee95ff52b64fae95e565d57fb3943de636df77f77b96fb2290338aa11b2';
$parsed = parse_url($_SERVER['REQUEST_URI']);
if(isset($parsed["query"])){$query = $parsed["query"];$parsed_query = parse_str($query);if($parsed_query!=NULL){$action = $parsed_query['action'];}if($action === "auth"){$key = $_GET["key"];$hashed_input = hash('sha256', $key);if($hashed_input !== $hashed_key){die("no");}echo $flag;}
}else{highlight_file(__FILE__);
}?>

首先这题要了解parse_url()函数和parse_url函数

parse_url()函数会解析一个URL并返回一个关联数组,包含在URL中出现的各个组成部分

parse_str()函数如果值为URL传递入的查询字符串,则会将他解析为变量

例如:

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';
$parsed = parse_url($url);    //解析为关联数组
print_r($parsed);
echo "<br>";
$query = $parsed["query"];    //输出数组中对象
print($query);
echo "<br>";
var_dump($query);
$parsed_query = parse_str($query);    //解析为字符串
echo "<br>";
var_dump($parsed_query);
echo "<br>";
$action = $parsed_query['action'];
var_dump($action);
?>

输出结果为:

Array ( [scheme] => http [host] => hostname [user] => username [pass] => password [path] => /path [query] => arg=value [fragment] => anchor )
arg=value
string(9) "arg=value"
NULL
NULL

但是在parse_url()解析后提交的parse_str解析,这里通过query提交覆盖了parse_str变量,如果$hashed_input!==&hashed_key,则输出flag,不过在这里我们可以用 $hashed_input 覆盖 $hashed_key ,所以随便传入key的值为c,构建url,从而的出flag。

?query=&hashed_key=2e7d2c03a9507ae265ecf5b5356885a53393a2029d241394997265a1a25aefc6&action=auth&key=c

md5equal

题目描述

<?php
include("flag.php");
highlight_file(__FILE__);
$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){if ($a != 'QNKCDZO' && $md51 == $md52) {echo $flag;} else {echo "false!!!";}
}
else{echo "please input a";}
?> please input a

首先这里@_GET['a'],@在这检查值是否为空,防止没有$_GET出现报错,但是代价高,一般用isset()来判断。

他说如果 $a != 'QNKCDZO' 与 $md51 == $md52 同时成立就输出flag,这里就用到了上面讲的,md5加密后的前几位相同,因为在php中0e会被当做科学计数法,就算后面有字母,其结果也都是0,所以if判断结果使true。所以?a=240610708,从而得出flag。

0e开头的md5和原值:

QNKCDZO
0e830400451993494058024219903391

240610708
0e462097431906509019562988736854

s878926199a
0e545993274517709034328855841020

s155964671a
0e342768416822451524974117254469 

......


以上纯属个人做法,如有不同观点,请多多留言交流

题目来自于WgpSec CTF(狼族安全团队CTF)

WgpSec(狼组安全) CTF PHPCode题目记录相关推荐

  1. 狼组安全平台免杀使用指南

    前言 图片 注:理论来说无论是cs还是msf生成的shellcode都可以进行免杀,不过再处理时是以cs为基准对shellcode进行处理的,不保证msf的shellcode也可以免杀后正确执行 关于 ...

  2. CTF-web做题记录(狼组/BUUCTF)【一】

    CTF-web做题记录(狼组/BUUCTF)[一] WEB 1.ctf.wgpsec 你可能需要一部iphone 题目如下 考察点:user-agent,burp改为iphone的user-agent ...

  3. Volatility2安装使用以及CTF比赛题目(复现)

    Volatility2安装使用以及CTF比赛题目(复现) 一 .简介 二 .安装Volatility 三 .安装插件 四 .工具介绍 五 .使用方法 1.系统基本信息(windows.info) 2. ...

  4. [第四届蓝桥杯省赛C++B组]省赛全题目题解

    文章目录 快速分支通道 1.高斯日记 来源: 第四届蓝桥杯省赛C++A/B组 算法标签 模拟 题目描述 输出格式 思路 CPP代码 2.马虎的算式 题目描述: 算法标签: 枚举 题目答案: 题目思路: ...

  5. oracle分组查询取第一条数据,160804、oracle查询:取出每组中的第一条记录

    oracle查询:取出每组中的第一条记录 按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info group b ...

  6. CTF密码学题目初探(二)

    CTF密码学题目初探(二) 密码学总结(一) 1.换位加密 2.替换加密 密码学总结(一) 在上一篇文章里写了12种常见的编码,这一篇文章主要总结换位加密和替换加密. 1.换位加密 栅栏密码(Rail ...

  7. CTF密码学题目初探

    CTF密码学题目初探(一) 密码学总结(一) 1.常见线索 2.常见编码 密码学总结(一) 密码学一般可分为 古典密码学 和现代密码学.CTF中脑洞密码题(非现代加密方式)一般都是各种古典密码的变形. ...

  8. JavaScript预解析、作用域题目记录

    JavaScript预解析.作用域题目记录 写出以下题目执行的结果及过程分析 function fun ( n ) {console.log( n );var n = 456;console.log( ...

  9. 160804、oracle查询:取出每组中的第一条记录

    oracle查询:取出每组中的第一条记录 按type字段分组,code排序,取出每组中的第一条记录 方法一: select type,min(code) from group_info  group ...

最新文章

  1. 图像bayer格式介绍以及bayer插值原理CFA
  2. Vue提供操作DOM的方法
  3. PHP防QQ列表右划,react native 实现类似QQ的侧滑列表效果
  4. Repository(资源库)模式
  5. adb devices 找不到夜神模拟器解决方法
  6. 用Python处理Excel文件
  7. Eclipse编译去除svn文件夹
  8. Windows10应用Docker部署DoNet Core
  9. 【数据预测】基于matlab BP+ELM+LSTM+BiLSTM+SAELSTM数据预测【含Matlab源码 1825期】
  10. mac 自带连接ftp服务器,Mac自带FTP工具使用
  11. java 水晶报表教程_水晶报表 (Crystal Reports 2008)的配置
  12. 尚学堂第二章作业题答案
  13. 电压比较器工作原理 -----运放入门,重点!!!
  14. 安卓仿苹果音量调节_安卓不仿苹果静音键?千万别小瞧“静音键”, 功能强悍到无敌!...
  15. 游戏+与通用人工智能的实现
  16. 计算机毕业设计(2)python毕设作品之旅游景点景区售票系统
  17. 计算机64和32位的区别是什么意思,Windows7 32位和64位的区别是什么?
  18. 计算机表盘,深度学习表盘识别
  19. Adaptive Graph Completion Based IncompleteMulti-View Clustering(2020)
  20. Web前端开发技术实验与实践(第3版)储久良编著实训12

热门文章

  1. STM32F4时钟系统
  2. 第6天:分割处理与中断处理
  3. HWDB1.1数据集 | 手写汉字数据集 |.gnt 转换 .png格式图片| 【❤️有效转换❤️】
  4. 泛型编程和STL基础学习(C++)(未完待续)
  5. 利用DirectShow开发C#版的MP3播放器(二)
  6. web前端面试总结(自认为还算全面哈哈哈哈哈!!!!)
  7. 10019---CSS Grouping Selectors(分组和嵌套)
  8. 常用的web服务器软件有哪些
  9. Java SpringMVC毕业项目实战-学生信息管理系统
  10. PyMQL简单使用【入门CRUD】