前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2023铁三第一赛区分区赛

2023铁三第一赛区分区赛

作者头像
故里[TRUE]
发布2023-04-21 13:28:48
2540
发布2023-04-21 13:28:48
举报
文章被收录于专栏:网络安全【故里】
前言

比赛好卷,题目好难,十道题目就出了四道,排名第二十一名,明年继续努力

一生壹世

压缩包注释提示得到解压密码是1314

解压之后得到四个txt文件

010打开分析发现文件头第一个字节拼接是个png的hex头

所以不难猜出是一个png图片,数据被拆分到这四个文件中了

然后发现四个txt文件都是1669字节

所以写个python脚本循环1669次依次读取文件字节并写入到同一个png文件进行整合即可,脚本如下

代码语言:javascript
复制
flag1=open('一.txt',"rb")

flag2=open('生.txt',"rb")

flag3=open('壹.txt',"rb")

flag4=open('世.txt',"rb")

true_flag=open("flag.png","wb")

 

data=[]

for a in range(1669):

  i = flag1.read(1)

  data.append(i)

  i = flag2.read(1)

  data.append(i)

  i = flag3.read(1)

  data.append(i)

  i = flag4.read(1)

  data.append(i)

for i in data:

  true_flag.write(i)

print("success!!!")

得到flag

Flag{JPG}

Hashattack

扫目录发现存在git源码泄露

通过Githack下载源码

得到getflag.php的源码

代码语言:javascript
复制
<?php 

error_reporting(0);

include "flag.php";

$user=$_POST['user'];

function encrypt($text){

  global $key;

  return md5($key.$text);

}

if (encrypt($user)===$_COOKIE['verify']) {

  if(is_numeric(strpos($user,'root'))){

​    die($flag);

  }

  else{

​    die('not root!!!');

  }

}

else{

  setcookie("verify",encrypt("guest"),time()+60*60*24);

  setcookie("len",strlen($key),time()+60*60*24);

}

//show_source(__FILE__);

分析源码可得是哈希长度扩展攻击,抓包从cookie可以得知len=32,并且user和verify可控

直接使用hashpump获得签名和root相关cookie等数据

\x->%然后替换cookie和user传参即可得到flag

flag{65089e251c4084e4ef5fad52221a3b0e}

Rand5

elf文件

分析源码

gtable是读出码表(可以动态调试出)

encode是base64加密(换码表了)

用gdb调试得出每次的v3

分别如下:

代码语言:javascript
复制
1.#nopqrstuvwxyz0123456789/+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm
2.#GHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/+ABCDEF
3.#pqrstuvwxyz0123456789/+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmno
4.#z0123456789/+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxy
5.#RSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789/+ABCDEFGHIJKLMNOPQ

倒着换码表base64解密

最后一次的脚本如下:

代码语言:javascript
复制
import base64
a=list("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
b='nopqrstuvwxyz0123456789/+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklm'                                                #转换后的码表
c='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
s='ANYIAeTXAqvez9+c1qoI1t0L06DYAt7X19zY+d7cz6+g1tsJ+/b='     #加密后的
c=str.maketrans(b,c)
print(base64.b64decode(s.translate(c)))

s是加密后的内容

b是调试出来的码表

第一次的脚本中s为

代码语言:javascript
复制
cISes12ZhleYs3qDloWqbFZHknejdFi2hm1BelxFllKWnUhAiHFItF6rhkehs1WmbF6eiGaolnN8mGiCjUd8r1irknN8iEyUhl6ieVZDeH2VtmVDjUapt1q+dHFKsm20inGmcFWohoSYn1VEiG6ptFaXuHKed1GBkFq3rlCBint=

得出结果作为第二个s

flag{0d271f580a8cd571de09c1ce51698aba}

CBC

CBC字节反转攻击

分析源码发现需要求出base64_cipher,而username和password都是admin

已知key= abcdef0123456789,iv= 1234567891234567

直接构造exp如下

代码语言:javascript
复制
import base64

from Crypto.Util.Padding import pad

from Crypto.Cipher import AES

 

key=b"abcdef0123456789"

iv=b"1234567891234567"

 

user="username:admin;password:admin"

data = lambda s:s+(16 - len(s)%16) * chr(0) 

success_data = data(user)

\#print(success_data)

base64_cipher = AES.new(key, AES.MODE_CBC, iv)

d =base64_cipher.encrypt(success_data.encode('utf8'))

print(base64.b64encode(d))

得到b’idVegWpPAM8A414waIjDKaG7eLLrT4vtnR1WIO9x6do=’

Get传参

代码语言:javascript
复制
?username=admin&password=admin&base64_cipher=idVegWpPAM8A414waIjDKaG7eLLrT4vtnR1WIO9x6do=

得到flag

flag{e8fdddd52655347073194f347e05e5cd}

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一生壹世
  • Hashattack
  • Rand5
  • CBC
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档