2023泉城杯 easy_log的解题

news/2024/5/19 23:20:23 标签: CTF

压缩包解压里面是一个 access.log 日志文件。

捋数据

进行过远程命令执行

在这里插入图片描述
这个后续没啥用

可疑字符串

在这里插入图片描述

可疑字符串/upload/ma.php?log=var_dump(%27cGFzc3dvcmQ6IHNAZncjdiVmOQ==%27);这个首先就判断是不是base64编码(英文大小写、数字和+、/)以及用作后缀等号,字符串长度一定可以被4整除)
对内容cGFzc3dvcmQ6IHNAZncjdiVmOQ==解码得到:password: s@fw#v%f9

大量的sqlmap的盲注日志

分析查询了

  1. 数据库名
  2. 数据库的表名
  3. 表名为logdata的字段名
  4. logdata表的id和data值(0x7e为波浪线)
  5. flag表的字段名
  6. flag表的flag字段的值。

细节:这里可以看到这是在用 二分法 进行 sql盲注
在这里插入图片描述
每一条语句返回200,但返回字节长度不同分别为699 704可以区分查询语句是否满足查询条件,盲注这次采用的是ascii码的大于校验方式,因此,满足条件时返回699 不满足时返回704

知识点:
sql盲注二分法里测试的字符的 最后一条满足的条件的语句的ASCII值再加1就是猜解正确的ASCII值(或者最后一次不满足条件的ASCII值)

最后的一点儿,没啥用

在这里插入图片描述

盲注数据获取:

采取脚本方式,如下:

#简化版,正则匹配后,直接出结果
import urllib.parse,re
def logAnalysis_SQLBlindInjection(file,pattern):
    with open(file) as f:
        data_ascii = {}
        for x in f.readlines():#遍历行
                #x=urllib.parse.unquote(x) # 转码,放开的话。调用时pattern处需做相应的调整
                mo = re.search(pattern,x)   # 在x中搜索符合正则表达的字符串并将匹配的字符串存入变量mo中
                if mo:
                    key = int(mo.group(1))  # mo 中 的第一个括号里的内容 (也就是上条语句中的 (.*?)中的内容)并转为10进制
                    data_ascii[key] = int(mo.group(2))+1# 取变量mo中的第二个括号里的内容,并转为 10 进制使用字典,保存最后一次猜解正确的ascii码
        data = ''
        for value in data_ascii.values():
            data += chr(value)
        print(data) #输出结果
#对主要内容结果进行拼接
rzfx('access.log',r'logdata\),(.*?),1\)\)%3E(.*?) .*699')
rzfx('access.log',r'flag\),(.*?),1\)\)%3E(.*?) .*699')

在这里插入图片描述

#第二版 后续再完善
import urllib.parse,re
class llfx():
    #文件,查询内容
    def __init__(self,file,filter=None,pattern=r'\),(.*?),1\)\)>(.*?) '):
        self.ll=[]
        self.file=file
        self.pattern=pattern
        if filter is not None:
            self.filter()

    def filter(self,filter=None):
        if filter is not None:
            self.filter=filter

        with open(self.file) as f:
            for x in f.readlines():
                lenf=len(filter)
                for f in filter:
                    if f in x:
                        lenf=lenf-1
                if lenf==0:
                    x=urllib.parse.unquote(x)
                    self.ll.append(x)
        return self

    def getLine(self):   
        return self.ll#[0]

    def match(self,pattern=None):
        if pattern is not None:
           self.pattern=pattern
        data_ascii = {}  
        for d in self.ll:
            mo = re.search(self.pattern,d)   # 在date 中搜索符合正则表达的字符串并 将匹配的字符串存入变量m中
            if mo:
                # print(mo)
                key = int(mo.group(1))  # m 中 的第一个括号里的内容 (也就是上条语句中的 (.*?)中的内容)并转为10进制
                value = int(mo.group(2))+1  # 取变量m中的第二个括号里的内容,并转为 10 进制
                # print(value)
                data_ascii[key] = value     # 使用字典,保存最后一次猜解正确的ascii码
        data = ''
        for value in data_ascii.values():
            data += chr(value)
        print(data)
        return data

获得到一串字符
504b03041400090063004da8cf56cbeaad37460000002800000008000b00666c61672e7478740199070001004145030800299502e8ee56d83e35f0a1699140c37d4fe9e7663ff2f00a8db6bbec32c1acb0ac871dc920e2b1bf4439325f70d9acd3483fcc141c9504561431a1eff00430c0cadf9131913c504b0708cbeaad374600000028000000504b01021f001400090063004da8cf56cbeaad37460000002800000008002f000000000000002000000000000000666c61672e7478740a00200000000000010018004982f2a2899fd9016101122b8a9fd90124a9e42a8a9fd9010199070001004145030800504b0506000000000100010065000000870000000000

flag数据的分析与处理

首先,看字符串的内容0-f 得知其是16进制字符串。
看flag数据为504b0304开头,确认它是zip压缩包(压缩包格式504B0304表示开始,504B0506表示结束)
16进制字符串数据转zip,直接转会报错,zip结尾504b0506,所以把后面的多余字符去掉了

with open("flag.zip", "wb") as f:
    f.write(bytes.fromhex(x))

生成压缩包后,输入密码s@fw#v%f9得到最终flag
在这里插入图片描述


http://www.niftyadmin.cn/n/4970210.html

相关文章

每天一道leetcode:542. 01 矩阵(图论中等广度优先遍历)

今日份题目: 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例1 输入:mat [[0,0,0],[0,1,0],[0,0,0]] 输出&#xff…

记录一次presto sql执行报错 Error executing query的解决办法

在执行presto sql 时报错截图如下: 查看后台执行报错日志: java.sql.SQLException: Error executing query at com.facebook.presto.jdbc.PrestoStatement.internalExecute(PrestoStatement.java:307) at com.facebook.presto.jdbc.PrestoStatement.exe…

【洛谷】P2440 木材加工

原题链接:https://www.luogu.com.cn/problem/P2440 1. 题目描述 2. 思路分析 整体思路:二分答案 设置一个变量longest来记录最长木头的长度,sum记录切成的小段数量之和。 令左边界l0,右边界llongest。 写一个bool类型的check…

【论文解读】基于图的自监督学习联合嵌入预测架构

一、简要介绍 本文演示了一种学习高度语义的图像表示的方法,而不依赖于手工制作的数据增强。论文介绍了基于图像的联合嵌入预测架构(I-JEPA),这是一种用于从图像中进行自监督学习的非生成性方法。I-JEPA背后的idea很简单&#xff…

yo!这里是Linux权限入门理解

目录 前言 权限概念 权限管理 分类 1.用户 2.文件&&目录 表示 设置 1.chmod指令 2.chown指令 3.chgrp指令 4.umask指令 粘滞位 后记 前言 对于Linux基本指令,基本上就是操作文件或者目录,但是,是谁可以操作文件或目录&…

L1-034 点赞(Python实现) 测试点全过

题目 微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。本题就要求你写个程序,通过统计一个人点赞的纪录,分析这个人的特…

PDF如何转ppt?PDF转ppt的方法

PDF是一种广泛应用于文档传输和存储的格式,然而,在某些情况下,我们可能需要将PDF文件转换为PPT,以便更加灵活地编辑和展示内容。那么,PDF如何转ppt呢?在本文中,我们将介绍几种常用的方法和工具&#xff0c…

身为一个后端程序员如何快速制作后端管理系统的UI

前言 我的专业领域在后端开发上,前端我仅仅是熟悉,但是要从头开发一个前端UI界面有点难为人了。那么身为一个后端程序员我们怎么来开发后端管理系统UI界面呢? 方案1:现成的模版来套(有一定的前端基础,只是…