ctfshow web入门29-39 78-81 文件包含与简单命令执行

文件包含和命令执行挑着写,学习并记录

web33到39大部分都是文件包含的内容。

文件包含函数漏洞:

1.require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。

2.include(),找不到被包含的文件时只会产生警告,脚本将继续运行

3.file

文件包含伪协议:

file:// [文件的绝对路径和文件名]


php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了
php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。当传入的参数作为文件名打开时,可以将参数设为php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。从而导致任意代码执行。


zip:// 可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行


data:// 同样类似与php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行。

data://text/plain/,<?php ‘代码’?>

命令执行

web29

eval()函数里面的值会被当作代码执行

很简单的命令执行

先看看文件

既然flag被源代码过滤了,那么就要去过滤一下flag

得到flag

web30

题目过滤了system,这里用到另一个命令执行函数passthru()

然后和上一题一样就行

web31

知其然,要知其所以然,过滤的这些到底是些什么姿势,我觉得有必要好好讲清楚

首先,flag,system,php,cat就不讲了

sort是一个文件排序函数,用于替换cat。

shell则是过滤了命令执行函数shell_exec();

过滤了空格,用%09代替,可以直接用echo解出来。当然上面的passthru()也没有过滤,也可以用,不过这里再介绍别的解法

再没有过滤eval()和引号的时候,再构造一个b是很不错的选择

web32

把;过滤了,这下虽然没过滤passthru,但是没有;也不能执行passthru的命令。

但是include函数并没有涵括进去,同时也不需要. ' ` ; (

不过include函数需要一点文件包含的知识,上面也给出了伪协议的用法啦,心动不如行动

?c=include&_GET[1]?>&1=data://text/plain,<?php systtem("tac fla*");?>

web33

好像过滤了一个“用上一题的方法也完全ok,不过记录的话就不写相同的方法了。

?c=require$_GET[123]?>&123=data://text/plain,<?php%20system("tac%20fla*");?>


web34~36

一直用那两个文件包含的pyload就行,这里就不浪费时间了(别的方法的话可以试试不用data伪协议,用用php://input,php:filter)36题把数字ban了,就换成a,不用加引号。

web37

换题目了,不过还是include,就当是为了flag,对它使用伪协议吧

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

 web38

多过滤了php和file,其实就是过滤了file协议

(用法是php://filter/read=convert.base64-encode/resource=flag.php)转化成base64就运行不了了,就可以输出出来。

这道题没过滤掉我最爱的data,继续使用data吧

web39

39少了过滤,不过后面加了一个.php,其实也不影响,因为include只会读取<?php ?>里的东西。

所以,还是对他使用data吧

文件包含

web78

文件包含,先用data伪协议看看flag在哪

?file=data://text/plain,<?php system('ls');?>

接下来就简单了,可以用php://filter协议输出flag.php的base64编码,下面给出原理

?file=php://filter/read=convert.base64-encode/resource=flag.php

include函数,这个表示从外部引入php文件并执行,如果执行不成功,就返回文件的源码。

而include的内容是由用户控制的,所以通过我们传递的file参数,是include()函数引入了index.php的base64编码格式,因为是base64编码格式,所以执行不成功,返回源码,所以我们得到了源码的base64格式

web79

其实很简单,原码中就是把php换成???了,大小写绕过就行

这里就换了一种方法

web80

这道题同时过滤了php和data

php仍可以大小写绕过。data被ban了,那就直接不用了被,用Php://input加post构造<?Php system("ls");?>查看一下文件

(我的HackBar总是post不上去,用来Max HackBar才可以,不过平常还是Hack bar好用)

文件名改了一下,然后继续构造<?Php tac fl0g*?>

web81

看题目发现为协议几乎都被绕过了,但是还可以通过日志注入木马getshell

日志文件(access.log)可以记录我们所有在服务器上的操作记录,我们可以通过再url后构造一句话木马(需要抓包后改,直接传的话会被url编码)也可以在UA(user-agent)输入木马(Hacker Bar就行)

日志文件路径为/var/log/nginx/access.log

其实这里就已经解决了,前面都看了的话,应该知道这里该怎么继续构造pyload了

(其实很离谱,这道题我自己一直没写出来,一模一样的pyload我电脑上就是会报错)

在CTF中,web入门命令执行指的是通过Web应用程序的漏洞,将恶意的命令注入到应用程序中并执行。这样的攻击可以导致未经授权的访问和操纵应用程序的数据和功能。 根据引用中提供的信息,可以看到一些常见的双写绕过技巧,如分号、竖线、双号等。这些技巧可以用来绕过应用程序对输入参数的限制,从而注入恶意的命令。 引用中提到的payload,其中使用了一个通用的命令执行函数"show_source"来显示指定文件的源代码。这个payload可以用来尝试执行"flag.php"文件的源代码。但前提是要知道有一个名为"flag.php"的文件存在。 另外,引用中提供了另一种payload的示例,其中使用了array_reverse和scandir函数来获取文件目录并显示指定文件的源代码。同样,也可以直接使用show_source(&#39;flag.php&#39;)来显示"flag.php"文件的源代码。 需要注意的是,命令执行漏洞是非常危险的,因为它可以导致恶意用户执行任意的系统命令。为了保护Web应用程序免受此类攻击,开发人员应该对用户的输入进行严格的验证和过滤,并使用安全的编程实践来防止命令注入漏洞的发生。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ctfshow web入门命令执行](https://blog.youkuaiyun.com/uuzfumo/article/details/128357863)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [CTFShow Web入门 命令执行](https://blog.youkuaiyun.com/qq_19533763/article/details/123910732)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值