Skip to content

Instantly share code, notes, and snippets.

@SukkaW

SukkaW/h5ai_dockerfile Secret

Last active Nov 7, 2020
Embed
What would you like to do?
USST Hackergame 2020
FROM alpine:latest
EXPOSE 10120
WORKDIR /var/www/html
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
&& apk add nginx supervisor php7-fpm php7-session php7-json php7-gd php7-exif git wget unzip zip\
&& mkdir -p /var/www/html/Public \
&& wget https://release.larsjung.de/h5ai/h5ai-0.29.2.zip \
&& unzip h5ai-0.29.2.zip \
&& cp -rp /var/www/html/_h5ai /var/www/html/Public/_h5ai \
&& rm h5ai-0.29.2.zip \
&& mkdir /run/nginx
ADD ./supervisord.conf /etc/supervisor/conf.d/supervisord.conf
ADD ./nginx.conf /etc/nginx/nginx.conf
ADD ./php.ini /etc/php7/php.ini
RUN rm /etc/nginx/conf.d/default.conf
RUN chown -R nobody.nobody /var/www/html && \
chown -R nobody.nobody /run && \
chown -R nobody.nobody /var/lib/nginx && \
chown -R nobody.nobody /var/log/nginx && \
chown -R nobody.nobody /var/log/php7
USER nobody
ADD --chown=nobody ./flag.txt /var/www/html/
ADD --chown=nobody ./dockerfile ./nginx.conf /var/www/html/Public/
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]
worker_processes 1;
error_log stderr warn;
pid /run/nginx.pid;
user nobody;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
# Define custom log format to include reponse times
log_format main_timed '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$request_time $upstream_response_time $pipe $upstream_cache_status';
access_log /dev/stdout main_timed;
error_log /dev/stderr notice;
keepalive_timeout 65;
server_tokens off;
# Write temporary files to /tmp so they can be created as a non-privileged user
client_body_temp_path /tmp/client_temp;
proxy_temp_path /tmp/proxy_temp_path;
fastcgi_temp_path /tmp/fastcgi_temp;
uwsgi_temp_path /tmp/uwsgi_temp;
scgi_temp_path /tmp/scgi_temp;
server{
# Docker 内部的地址,无关紧要
listen 10120;
server_name _;
root /var/www/html;
index index.php index.html /_h5ai/public/index.php;
# _h5ai/private 文件夹下的内容是不可直接访问的,设置屏蔽
location ~ _h5ai/private {
deny all;
}
# 根目录是私有目录,使用 basic auth 进行认证,只有我(超极致的小 C)自己可以访问
location / {
auth_basic "easy h5ai. For visitors, please refer to public directory at `/Public!`";
auth_basic_user_file /etc/nginx/conf.d/htpasswd;
}
# Public 目录是公开的,任何人都可以访问,便于我给大家分享文件
location /Public {
allow all;
index /Public/_h5ai/public/index.php;
}
# PHP 的 fastcgi 配置,将请求转发给 php-fpm
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\. {
log_not_found off;
deny all;
}
}
gzip on;
gzip_proxied any;
gzip_types text/plain application/xml text/css text/js text/xml application/x-javascript text/javascript application/json application/xml+rss;
gzip_vary on;
gzip_disable "msie6";
# Include other server configs
include /etc/nginx/conf.d/*.conf;
}
import re
def to_upper(s):
r = re.compile('[fF][lL][aA][gG]')
if r.match(s):
print('how dare you')
elif s.upper() == 'FLAG':
print('yes, I will give you the flag')
print(open('/flag1').read())
else:
print('%s' % s.upper())
def to_utf8(s):
r = re.compile('[fF][lL][aA][gG]')
s = s.encode() # make it bytes
if r.match(s.decode()):
print('how dare you')
elif s.decode('utf-7') == 'flag':
print('yes, I will give you the flag')
print(open('/flag2').read())
else:
print('%s' % s.decode('utf-7'))
def main():
print('Welcome to the best string tool here!')
print('Brought to you by 233 PROUDLY')
print('')
print('Which tool do you want?')
print('1. Convert my string to UPPERCASE!!')
print('2. Convert my UTF-7 string to UTF-8!!')
choice = input()
if choice[0] == '1':
print('Welcome to the capitalizer tool, please input your string: ')
to_upper(input())
elif choice[0] == '2':
print('Welcome to the UTF-7->UTF-8 tool, please input your string: ')
to_utf8(input())
else:
print('I am confused, madam')
main()
// ==UserScript==
// @name Fuck Math
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 你的数理基础很有问题
// @author Sukka (https://skk.moe)
// @match http://202.38.93.111:10190
// @grant GM_setClipboard
// @grant unsafeWindow
// ==/UserScript==
(function () {
const tex = document.querySelector('center').textContent;
const msg = document.querySelectorAll('.lead')[0];
const btn = document.querySelectorAll('.lead')[1];
msg.style.color = 'red';
if (!tex.includes('$')) {
msg.textContent = '无法解析 Tex。请打开 DevTools,找到 tex-svg.js,在菜单中选择拦截请求「Block Request URL」,然后刷新页面';
return;
}
let up_limit;
let down_limit;
const matlab = tex
.replace(/\$/g, '')
.replace(/\\frac{x\^\{2\} \+ 1}{2 \\, x}/gm, '((x^2+1)/(2*x))')
.replace(/\\frac{x\^\{2\} - 1}{2 \\, x}/gm, '((x^2-1)/(2*x))')
.replace(/\\ln\\left\((.+?)\\right\)/g, ($, s) => `log(${s})`) // ln,在 MatLab 中是 log()
.replace(/\\left\(/g, '(') // 左括号
.replace(/\\right\)/g, ')') // 右括号
.replace(/\\frac{(.+?)}{(.+?)}/gm, ($, a, b) => `((${a})/(${b}))`) // 分数
.replace(/e\^{(.+?)}/gm, ($, s) => `exp(${s})`)
.replace(/\\(cos|sin|cosh|sinh|arcnatn)\((.+?)\)/g, ($, a, s) => `${a}(${s})`) // sin cos sinh cosh arctan
.replace(/\\frac{(.+?)}{(.+?)}/gm, ($, up, down) => `((${up})/(${down}))`) // 分数
.replace(/\\,x/g, '*x').replace(/x\\,/g, 'x*').replace(/ \\, /g, '*')
.replace(/\s(\+|-)\s/g, ($, s) => s)
.replace(/\\int_{(.+?)}\^{(.+?)}/, ($, down, up) => {
up_limit = up; // 上极限
down_limit = down; // 下极限
return ' roundn(double(int(' // roundn 取小数点、double 取值、int 算定积分
})
.replace(/\\sqrt{(.+?)}/g, ($, x) => `sqrt(${x})`) // 根号
.replace(/e\^{(.+?)}/g, ($, s) => `exp(${s})`) // e^n
.replace('\\,{d x}', `,${down_limit},${up_limit})), -6)`) // 替换 dx 为 MatLab 的结束函数
.replace('*{d x}', `,${down_limit},${up_limit})), -6)`) // 替换 dx 为 MatLab 的结束函数
.replace(/\^{(.+?)}/g, ($, s) => `^(${s})`)
.replace(/{\(/g, '(') .replace(/\)}/g, ')')
.replace(/\) (log|sqrt|sinh|cosh|sin|cos|exp|atan)\(/g, ($, s) => `)*${s}(`)
.replace(/\x (log|sqrt|sinh|cosh|sin|cos|exp|atan)\(/g, ($, s) => `x*${s}(`)
.replace(/\) \(/g, ')*(');
btn.innerHTML = '<button onclick="window.location.reload()">下一题</button>'
if (matlab.includes('{') || matlab.includes('}')) {
msg.textContent = '这道题不能解析!';
console.log(matlab);
setTimeout(() => window.location.reload(), 500);
} else {
msg.innerText = ('本题可以解析: \n' + matlab + '\n MatLab 表达式已经复制到剪贴板中')
GM_setClipboard(matlab.trim(), 'text');
}
})();
@Co2333

This comment has been minimized.

Copy link

@Co2333 Co2333 commented Nov 7, 2020

nb! 数理基础我拿着微软的api做的。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment