[CISCN2020华东北赛区]分区赛web wp
分区赛一共6个web,做出了四个,在有解的五个题中rmb神仙拿了四个一血,唯一两个没拿到一血的一个是访问flag.php获得flag和出题人有点毛病出出来的0解傻逼脑洞题
web标号是到了7但是一共就六个题
day1
三个web题,难度不是很大,有一个有问题,但是rmb神仙三十分钟内秒了三个题然后挂机一天
前两天被AA问了个问题,你觉得Linux的内核是一个进程吗
第一反应自然是一个进程,但是接下来就被问到了内核是一个进程的话,进程调度是怎么实现的,以进程来管理进程吗之类的问题
所以首先应该能给出答案,Linux的内核并不是一个进程
那么接下来就出现了第二个问题,内核并不是一个进程,那么如何做到进程调度,内存管理这些事情的呢
为此查了一个下午各种各样的资料
众所周知,一个进程拥有内核空间和用户空间两个空间,用户空间存放的就是进程自己的数据,代码,堆栈之类的东西,还有一个libc函数库,而内核空间则是映射到内核数据区。也就是说,内核数据在物理内存上只有一份,但是会在每个进程中映射一份,内核数据就是各个进程的进程控制块,操作系统的资源分配表,文件标识符之类的各种各样的资源,还有就是系统调用函数,以及一系列的内核相关函数。
只有在系统刚启动时,内核可能表现的像一个进程,当启动完成后,内核会启动一部分线程,提供相应的服务,这些进程可以在ps里面看到,都由方括号包裹起来,标识为内核启动的线程。而更多的情况下,内核表现的更像是一个巨大的函数库,也可以说内核是运行在用户进程里的,当用户进程发起系统调用时,进入内核态,这并不是说内核开始运行,而是用户进程调用内核函数,去访问内核数据。
SUCTF的老题,考的一个匿名函数
<?php
$MY = create_function("","die(`dir`);");
$hash = bin2hex(openssl_random_pseudo_bytes(32));
eval("function SUCTF_$hash(){"
."global \$MY;"
."\$MY();"
."}");
if(isset($_GET['func_name'])){
$_GET["func_name"]();
die();
}
创建一个匿名函数,然后使用eval再创建一个名字为随机字符串的函数调用我们的匿名函数
允许提交一个func_name去动态调用一个没参数的函数。
SUCTF的老题了,无字母数字加符号限制的命令执行
点upload之后会有一个act=upload,一开始以为有文件包含之类的,加目录伪协议试了半天,没太懂怎么回事,感觉是拼接了目录之后又限制了目录穿越,没有文件包含的机会了
if($contents=file_get_contents($_FILES["file"]["tmp_name"])){
$data=substr($contents,5);
foreach ($black_char as $b) {
if (stripos($data, $b) !== false){
die("illegal char");
}
}
}
打开题目给一份残缺的源码
# -*- coding: utf-8 -*-
from flask import Flask, request
import requests
from waf import *
import time
app = Flask(__name__)
@app.route('/ctfhint')
def ctf():
hint =xxxx # hints
trick = xxxx # trick
return trick
@app.route('/')
def index():
# app.txt
@app.route('/eval', methods=["POST"])
def my_eval():
# post eval
@app.route(xxxxxx, methods=["POST"]) # Secret
def admin():
# admin requests
if __name__ == '__main__':
app.run(host='0.0.0.0',port=8080)
ctfhint是图样图森破。。。。欺负人
admin的路由不知道,eval简单测试之后至尊过滤,' " () {} [] |
全部过滤,然后也把稍微可能危险的关键字也全部过滤了,os re sy config app
什么的各种各样的全没了,看得我头痛