CTFshow web(php特性113-115&123)

web113

<?php

/*

-*- coding: utf-8 -*-

@Author: Firebasky

@Date: 2020-09-16 11:25:09

@Last Modified by: h1xa

@Last Modified time: 2020-09-30 23:47:52

*/

highlight_file(FILE);

error_reporting(0);

function filter($file){

if(preg_match('/filter|\.\.\/|http|https|data|data|rot13|base64|string/i',$file)){

die('hacker!');

}else{

return $file;

}

}

file=_GET'file';

if(! is_file($file)){

highlight_file(filter($file));

}else{

echo "hacker!";

}

这道题目如果做不出来说明你文件包含那边学的不够好,可以看看我之前写的一篇文章,可以高效提升这方面的知识

文件包含提升-CSDN博客

这是几个月前的文章了,一五一十的把payload送到了嘴边,直接抄就好,其实就是一个最简单的压缩过滤器

?file=compress.zlib://flag.php

web114

<?php

/*

-*- coding: utf-8 -*-

@Author: Firebasky

@Date: 2020-09-16 11:25:09

@Last Modified by: h1xa

@Last Modified time: 2020-10-01 15:02:53

*/

error_reporting(0);

highlight_file(FILE);

function filter($file){

if(preg_match('/compress|root|zip|convert|\.\.\/|http|https|data|data|rot13|base64|string/i',$file)){

die('hacker!');

}else{

return $file;

}

}

file=_GET'file';

echo "师傅们居然tql都是非预期 哼!";

if(! is_file($file)){

highlight_file(filter($file));

}else{

echo "hacker!";

}

这道题目没有禁用filter,那就直接拿下了

payload:?file=php://filter/resource=flag.php

但是这里把convert搬了,那就不要转换器直接返璞归真

web115

<?php

/*

-*- coding: utf-8 -*-

@Author: Firebasky

@Date: 2020-09-16 11:25:09

@Last Modified by: h1xa

@Last Modified time: 2020-10-01 15:08:19

*/

include('flag.php');

highlight_file(FILE);

error_reporting(0);

function filter($num){

num=str_replace("0x","1",num);

num=str_replace("0","1",num);

num=str_replace(".","1",num);

num=str_replace("e","1",num);

num=str_replace("+","1",num);

return $num;

}

num=_GET'num';

if(is_numeric(num) and num!=='36' and trim(num)!=='36' and filter(num)=='36'){

if($num=='36'){

echo $flag;

}else{

echo "hacker!!";

}

}else{

echo "hacker!!!";

}

小科普:

在 PHP 中,trim() 函数是用于去除字符串开头和结尾的空白字符(包括空格、制表符、换行符等)的函数。它接受一个字符串作为参数,并返回去除空白字符后的新字符串。

trim() 函数的语法如下:

trim(string $str, string $characters = " \t\n\r\0\x0B"): string

  • $str:要处理的字符串。
  • $characters(可选):指定要去除的字符集合,默认为空格、制表符、换行符、回车符等常见的空白字符。

示例使用:

$str = " Hello, World! "; $trimmedStr = trim($str); echo $trimmedStr; // 输出: "Hello, World!"

这个函数通常用于处理用户输入的字符串,以确保不会因为开头或结尾的空白字符而导致不必要的问题。

这里最主要有一个大漏洞,看到了就应该立刻反应过来了!

代码中存在一个漏洞,使用了一个不准确的数值过滤函数 filter()

filter() 函数中,使用了一系列的字符串替换操作来替换字符串中的特定字符。然而,这种过滤方式是不准确的,可以被绕过。

在输入 ?num=%0c36 的情况下,%0c 是回车换行符的 URL 编码形式。由于 filter() 函数中没有处理回车换行符的情况,因此替换操作不会影响回车换行符。

payload:?num=%0c36

web116

<?php

/*

-*- coding: utf-8 -*-

@Author: Firebasky

@Date: 2020-09-05 20:49:30

@Last Modified by: h1xa

@Last Modified time: 2020-09-07 22:02:47

@email: h1xa@ctfer.com

@link: https://ctfer.com

*/

error_reporting(0);

highlight_file(FILE);

include("flag.php");

a=_SERVER'argv';

c=_POST'fun';

if(isset(_POST\['CTF_SHOW'\])\&\&isset(_POST'CTF_SHOW.COM')&&!isset($_GET'fl0g')){

if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?/", c)\&\&c<=18){

eval("$c".";");

if($fl0g==="flag_give_me"){

echo $flag;

}

}

}

?>

这里开始小小审计一下代码

代码分析:

记住!!!!!

不管什么类型的PHP过滤题目,最最最重要的就一点,搞清楚我要干啥!搞清楚我要干啥!搞清楚我要干啥!重要的事说三遍!

根据代码逻辑,对于获取flag的条件,需要满足以下几个条件:

  • CTF_SHOW 必须存在
  • CTF_SHOW.COM 必须存在
  • fun 不能包含特殊字符
  • fun 值必须小于等于 18
  • $fl0g 必须等于 "flag_give_me"

如果看不出来这个,学再多技巧绕过也没有用,不过有没有人发现这里有坑点啊,$fl0g 必须等于 "flag_give_me"这里我根本就没有经过GET或者POST上传,所以这条语句没用的,没有flag输出那就在别的参数通过命令执行找flag

那么我就只能在c上面找flag

payload:

POST: CTF_SHOW=&CTF[SHOW.COM=1&fun=echo $flag

或者:CTF_SHOW=1&CTF[SHOW.COM=2&fun=echo $flag

解释:

由于PHP8.0以下如果第一次出现类似于"["这样的非法符号,会将第一个非法符号转化为下划线,第二个不会转,所以这里是变量出了问题,所以改一下就好了。

if(isset(_POST\['CTF_SHOW'\])\&\&isset(_POST'CTF_SHOW.COM')&&!isset($_GET'fl0g')){

if(!preg_match("/\\\\|\/|\~|\`|\!|\@|\#|\%|\^|\*|\-|\+|\=|\{|\}|\"|\'|\,|\.|\;|\?/", c)\&\&c<=18){

我已经满足了两个if了,然后就拿到了执行eval的命令,那不直接eval flag等什么!还干什么傻傻看第三个if!!!

真诚地希望我的文章对大家有所帮助,谢谢!

相关推荐
2zcode19 分钟前
免费开源项目文档:基于MATLAB图像处理的啤酒瓶口缺陷检测系统设计与实现
开发语言·图像处理·matlab
人工智能时代 准备好了吗38 分钟前
AI回答内容进入率监测:引用识别、文本匹配与语义判断
开发语言·人工智能·python
LONGZETECH39 分钟前
新能源汽车动力电池检测仿真教学系统:C/S 分层架构与数字化实训落地全解析
大数据·c语言·开发语言·人工智能·架构·系统架构·汽车
郝学胜-神的一滴43 分钟前
中级OpenGL教程 013:渲染器类架构设计与逐帧渲染流程详解
开发语言·c++·unity·游戏引擎·图形渲染·opengl·unreal
言乐62 小时前
Python实现建造微服务商城后台
开发语言·python·算法·微服务·架构
数据知道2 小时前
网络安全工具箱:100+ 工具分类速查与选型建议
安全·web安全·网络安全
cui_ruicheng2 小时前
Python从入门到实战(六):非序列容器
开发语言·python
西西学代码2 小时前
Flutter---底部导航栏(2)
开发语言·javascript·flutter
legendary_1632 小时前
SINK芯片:Type-C统一供电时代的小家电核心方案
c语言·开发语言·人工智能·智能手机
momo2 小时前
JAVA基础知识
java·开发语言