首页 > 其他分享 >山河CTF(部分write up)

山河CTF(部分write up)

时间:2023-12-13 10:31:43浏览次数:26  
标签:文件 题目 解码 flag up write CTF WEEK1 php


MISC

[WEEK1]签到题

下载题目并打开:

山河CTF(部分write up)_文本文件

base128编码:

Wm14aFozdDBhR2x6WDJselgyWnNZV2Q5

因为是base128编码,所以通过两次base64解码,即可得出flag

山河CTF(部分write up)_php_02

爆出flag:

flag{this_is_flag}

总结:

这道签到题主要考察了对base64编码的基础了解

[WEEK1]Steganography

下载题目并打开:

山河CTF(部分write up)_文本文件_03

有三个文件,两个图片文件和一个压缩包文件

看到了flag压缩包,打开看一下

山河CTF(部分write up)_字符串_04

本文件存在,但是需要密码

那么密码信息可能在上面那两个图片文件中,直接放入到010浅浅分析一波

山河CTF(部分write up)_文本文件_05

 

两个图片竟然一模一样,有点意思

在careful.jpg图片16进制字符串中发现了base64编码格式(==或=就是base64编码的重要特征)

山河CTF(部分write up)_文本文件_06

MTJlcmNzLi4uLi45MDlqaw==

放到Kali里面浅浅解码一波

山河CTF(部分write up)_php_07

得到如下字符串

12ercs.....909jk

想到flag.txt需要用密码打开,猜测这个就是密码,但是呢,还有一个图片没有用上,所以这5个点显然不是密码。

把careful1.jpg放入到010分析一波

山河CTF(部分write up)_php_08

在16进制字符串中并没有发现什么有用的东西,只是一堆乱码,那么下一步该如何进行呢?

尝试查看一下careful1.jpg的图片属性,看看是否能有所突破

查看图片属性

山河CTF(部分write up)_文本文件_09

出题人还是非常善良的,可以看到出题人在图片备注中给我们留了信息,刚好是5个字符对应了5个点

xqwed

12ercs.....909jk

密码:

12ercsxqwed909jk

打开flag.txt

山河CTF(部分write up)_文本文件_10

爆出flag:

flag{4d72e4f3-4d4f-4969-bc8c-a2f6f7a4292c}

[WEEK1]可爱的派蒙捏

下载题目文件,是一个压缩包,里面只有一张图片

山河CTF(部分write up)_php_11

放到010里面分析一波

山河CTF(部分write up)_字符串_12

图片隐写,发现存在两个文件txt1.txt和txt2.txt

放到Kali binwalk把这两个文本文件提取出来

山河CTF(部分write up)_php_13

提取成功,看看这两个文件里面是什么内容

山河CTF(部分write up)_文本文件_14

山河CTF(部分write up)_字符串_15

刚开始我以为这是什么编码,看来是我想复杂了,经过这两个文件频繁切换,看到了有个别字符不同,大部分字符是相同的,想到了将不同字符提取出来,就是flag

拖入到物理机

山河CTF(部分write up)_字符串_16

复制到pycharm项目中

山河CTF(部分write up)_字符串_17

编写python脚本

# 打开第一个文本文件并读取内容

with open('txt1.txt', 'r', encoding='utf-8') as file1:

    text1 = file1.read()
# 打开第二个文本文件并读取内容
with open('txt2.txt', 'r', encoding='utf-8') as file2:
    text2 = file2.read()
# 找出text2中与text1不同的字符
differences = []
for i, (char1, char2) in enumerate(zip(text1, text2)):
    if char1 != char2:
        differences.append(char2)
# 打印text2中与text1不同的字符
print("text2中与text1不同的字符:", ''.join(differences))

在代码中我做了注释,方便大家理解

运行python脚本

山河CTF(部分write up)_php_18

爆出flag:

flag{4ebf327905288fca947a}

[WEEK1]message

下载题目并打开:

山河CTF(部分write up)_php_19

0001000D91683106019196F40008C26211002072B975915730671B54114F60000A000A592982B15C065265843D8A938A00000A000A5E8A9AA453D883525730000A000A91527CBE518D6E1751656CEA75D5000A000A6C899ED852305BF94E0D8D77000A000A8FD94E0053CC624B535191195230002062B14F4F4F6000530048004300540046007B00620061003900370038003400300035002D0062003100630038002D0038003400370063002D0038006500360039002D006600360032003100370037006500340063003000380037007D

有ABCDEF猜测是16进制编码,16进制转字符串一把梭

山河CTF(部分write up)_文本文件_20

得出flag:

SHCTF{ba978405-b1c8-847c-8e69-f62177e4c087}

[WEEK1] 真的签到

山河CTF(部分write up)_文本文件_21

不再多说,跟着操作走即可

得出flag:

flag{Welc0me_tO_SHCTF2023}

[WEEK2]远在天边近在眼前

下载题目并打开:

山河CTF(部分write up)_文本文件_22

很明显flag就是所有文件的路径地址

考虑到路径地址复制下来有的符号会丢失,放入010打开

山河CTF(部分write up)_文本文件_23

}/8/2/1/5/a/3/8/4/8/2/5/0/_/?/T/H/G/l/r/I/4/_/Y/s/A/3/_/y/l/L/A/e/r/_/s/i/_/S/i/H/t/{/g/a/l/f

反的flag,还这么长,不想手动排序了,写个python脚本梭一把

山河CTF(部分write up)_php_24

ctf='}/8/2/1/5/a/3/8/4/8/2/5/0/_/?/T/H/G/l/r/I/4/_/Y/s/A/3/_/y/l/L/A/e/r/_/s/i/_/S/i/H/t/{/g/a/l/f'

flag=ctf[::-1] 

flag=flag.replace('/','')#删除字符'/'

print(flag)

得出flag:

flag{tHiS_is_reALly_3AsY_4IrlGHT?_0528483a5128}

[FINAL]问卷

山河CTF(部分write up)_文本文件_25

跟着操作走即可

山河CTF(部分write up)_字符串_26

得出flag:

flag{SHCTF_Round2_will_do_even_better!}

Web

[WEEK1]babyRCE

刚开始不要把题想的那么难,看下环境代码

<?php
$rce=$_GET['rce'];
if(isset($rce)){
     if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\`|\%|\>|\<|\'|\"/i",$rce)){
         system($rce);
         } 
else { 
         echo "hhhhhhacker!!!"."\n"; }
 } else {
         highlight_file(__FILE__); 
}

一、PHP代码审计

1.可以明显看到给了一个GET方式传参,这个参数是rce

2.if判断语句,isset函数用来判断rce这个参数是否存在并且是否不为空,如果条件达成,则true

3.preg_match正则表达式,用来过滤一些命令,可以看到过滤了cat、more、less、head、tac、tail、nl、od、vi、vim、sort、flag等命令并且过滤了整数和空格以及一些常用符号

4.system外部执行命令,将参数rce的值作为命令执行,从这里可以看出这道题降低了难度,因为我们不再需要外部执行命令了,所以直接给参数rce传值即可

5.else与if语句联用,反之则输出对应的字符串

6.同5,highlight_file(__FILE__)函数用来高亮显示文件内容,就是把文件内容或者代码高亮显示到网页当中

二、解题思路

1.查看目录文件,幸运的是发现ls和/没有被过滤

2.绕正则,看它有没有漏掉的过滤命令,发现没有过滤uniq命令,uniq命令可以查看文件内容

3.绕正则,查看文件命令需要用到空格,结果发现空格被过滤,可以使用${IFS}代替空格

4.绕正则,flag被过滤,可以通过f???进行绕过,可以理解为列出包含f的四个字符文件

三、开始解题

1.使用ls命令查看目录文件

?rce=ls

回显结果

山河CTF(部分write up)_字符串_27

flag.php index.php

2.发现有flag.php文件的存在,尝试使用构造payload

?rce=uniq${IFS}f???.php

回显结果

空白内容,F12试试

山河CTF(部分write up)_文本文件_28

<?php
$flag = getenv('GZCTF_FLAG'); 
if($flag=="not_flag" or $flag==""){
$flag="dzctf{test_flag}";
}

getenv函数用来获取环境变量,flag的值等于这个环境变量的值

如果说flag是空的,则flag是dzctf{test_flag},显然这是不可能的

就是说这个目录下没有flag

那咱们去根目录下试试?

3.继续构造payload

?rce=uniq${IFS}/f???.php

发现网页内容为空,F12内容也是空

除了根目录下还有那里有?,猜测flag不是PHP文件,而是文本文件

4.继续构造payload

?rce=uniq${IFS}/f???

回显flag

山河CTF(部分write up)_文本文件_29

得出flag:

flag{e85932a6-12df-4991-981c-adaf56337196}

[WEEK1]ez_serialize

题目环境:

山河CTF(部分write up)_字符串_30

运行结果:

O:1:"C":2:{s:3:"var";O:1:"B":1:{s:1:"q";r:1;}s:1:"z";O:1:"D":1:{s:1:"p";O:1:"A":1:{s:5:"var_1";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";}}}

上传exp:

山河CTF(部分write up)_php_31

PD9waHANCiRmbGFnID0gImZsYWd7NDQxZTY5NzEtMjU3NC00ZWYzLTg5YWYtYWQwNDYwMzA2NmUwfSI7DQo=

base64解码:

山河CTF(部分write up)_字符串_32

得出flag:

flag{441e6971-2574-4ef3-89af-ad04603066e0}

[WEEK1]登录就给flag

题目环境:

山河CTF(部分write up)_字符串_33

burpsuite抓包

山河CTF(部分write up)_字符串_34

初始账号:admin

初始密码:1

HTTP history

山河CTF(部分write up)_php_35

Send to Intruder

山河CTF(部分write up)_php_36

Clear

选中密码1,Add

山河CTF(部分write up)_文本文件_37

Payloads

山河CTF(部分write up)_字符串_38

Load添加字典

山河CTF(部分write up)_php_39

打开字典

山河CTF(部分write up)_字符串_40

Start attack开始爆破

山河CTF(部分write up)_php_41

得到密码

password

账户:admin

密码:password

登录:

山河CTF(部分write up)_文本文件_42

login登录:

山河CTF(部分write up)_文本文件_43

得到flag:

flag{d2974de6-f71e-48f9-9659-dc453a23009a}

[WEEK1]飞机大战

题目环境:

山河CTF(部分write up)_文本文件_44

玩了一把,通过才给flag,所以说想玩通过是不可能的,只能另辟蹊径

F12查看网页源代码

山河CTF(部分write up)_文本文件_45

HTML三大件

HTML+CSS+JavaScript

CSS静态网页样式

JavaScript动态功能

所以说更改游戏分数必须看这个JS文件

山河CTF(部分write up)_字符串_46

没有看到可控游戏参数,倒是看到了一串\u开头的类似编码的东西

有密码学基础的可以看出这是Unicode编码格式

\u005a\u006d\u0078\u0068\u005a\u0033\u0074\u0068\u0059\u0057\u0051\u0033\u005a\u0044\u0041\u0030\u005a\u0043\u0030\u0030\u004e\u0047\u0049\u0030\u004c\u0054\u0051\u0032\u004f\u0054\u0059\u0074\u0059\u006a\u004e\u006c\u004e\u0053\u0030\u007a\u004d\u007a\u0052\u006b\u004e\u006a\u0064\u0068\u004e\u007a\u004d\u0033\u004e\u0047\u004e\u0039\u000a

Unicode解码一把梭

山河CTF(部分write up)_php_47

base64

ZmxhZ3thYWQ3ZDA0ZC00NGI0LTQ2OTYtYjNlNS0zMzRkNjdhNzM3NGN9

base64解码一把梭

山河CTF(部分write up)_文本文件_48

得到flag:

flag{aad7d04d-44b4-4696-b3e5-334d67a7374c}

[WEEK2]no_wake_up

题目环境:

山河CTF(部分write up)_文本文件_49

运行结果:

O:4:"flag":2:{s:8:"username";s:5:"admin";s:4:"code";s:57:"php://filter/read=convert.base64-encode/resource=flag.php";}

上传payload

山河CTF(部分write up)_文本文件_50

base64编码

PD9waHANCiRmbGFnID0gImZsYWd7MTE5NmY2NzQtZjkwMi00YWEzLWI5M2MtNTUyYTgxNTUzMjlkfSI7

base64解码

山河CTF(部分write up)_php_51

得出flag:

flag{1196f674-f902-4aa3-b93c-552a8155329d}

Crypto

[WEEK1]立正

下载题目并打开

山河CTF(部分write up)_文本文件_52

wl hgrfhg 4gNUx4NgQgEUb4NC64NHxZLg636V6CDBiDNUHw8HkapH :jdoi vl vlkw ~xrb wd nrrT Y:

一把梭:

山河CTF(部分write up)_字符串_53

得到flag:

flag{Y0U_MU57_5t4nd_uP_r1gHt_n0W}

[WEEK1]Crypto_Checkin

下载题目并打开

山河CTF(部分write up)_字符串_54

QZZ|KQbjRRS8QZRQdCYwR4_DoQ7~jyO>0t4R4__aQZQ9|Rz+k_Q!r#mR90+NR4_4NR%>ipO>0s{R90|SQhHKhRz+k^S8Q5JS5|OUQZO}CQfp*dS8P&9R8>k?QZYthRz+k_O>0#>

base85(b)解码:

R1kzRE1RWldHRTNET04yQ0dVMkRNT0JUR0UzVEdOS0dHTVlUT01aVklZMkRFTVpVRzRaVEdNWlZJWVpUR05TRkdZWlRHTUJXR1FaVEdOMkU=

Base16-32-64-91混合多重解码:

base64

R1kzRE1RWldHRTNET04yQ0dVMkRNT0JUR0UzVEdOS0dHTVlUT01aVklZMkRFTVpVRzRaVEdNWlZJWVpUR05TRkdZWlRHTUJXR1FaVEdOMkU=

base32

GY3DMQZWGE3DON2CGU2DMOBTGE3TGNKGGMYTOMZVIY2DEMZUG4ZTGMZVIYZTGNSFGYZTGMBWGQZTGN2E

base16

666C61677B546831735F31735F423473335F336E633064337D

三种base混合解码

得出flag:

flag{Th1s_1s_B4s3_3nc0d3}

[WEEK1]残缺的md5

下载题目并打开:

山河CTF(部分write up)_文本文件_55

使用python写脚本:(脚本此处省略)

运行结果:

山河CTF(部分write up)_文本文件_56

写个python脚本转大写

flag='f0af1443b1f463eafff7aebb8b2ac4e6' 

print(flag.upper())

运行结果:

山河CTF(部分write up)_文本文件_57

得到flag:

flag{F0AF1443B1F463EAFFF7AEBB8B2AC4E6}

[WEEK1]凯撒大帝

下载题目并打开:

山河CTF(部分write up)_字符串_58

凯撒移位

山河CTF(部分write up)_文本文件_59

得到flag:

flag{chutihaonan}

标签:文件,题目,解码,flag,up,write,CTF,WEEK1,php
From: https://blog.51cto.com/ruogu994/8798792

相关文章

  • VLOOKUP函数基本使用
    结构:=VLOOKUP(查找值,数据表,列序数,匹配条件)说明:1、第一参数:查找值,比如说根据【姓名】来查找【工资】,【姓名】就是查找值,且在数据表中要位于第一列;2、第二参数:数据表,查找的数据区域,建议设置为绝对引用,在选定区域后按F4键就可以快速切换,就是在行和列的前面添加$符号,拖动公式时,......
  • Windows下获取设备管理器列表信息-setupAPI
    背景及问题:在与硬件打交道时,经常需要知道当前设备连接的硬件信息,以便连接正确的硬件,比如串口通讯查询连接的硬件及端口,一般手工的方式就是去设备管理器查看相应的信息,应用程序如何读取这一部分信息呢,Windows下的SetupAPI系列就可以解决这个问题示例程序#include<Windows.h>#......
  • ctfhub-git泄露(ubuntu下)
    首先用dirsearch扫描发现可能存在git泄露用githack工具来把源代码克隆到本地*主要注意ubuntu下的githack安装首先githack需要python2的环境,但我的ubuntu是python3  首先安装python2,输入以下指令sudoaptinstallpython2安装完成后,可以检查ubuntu目前可用的python......
  • select for update在springboot里实现分布式锁
    //mapper,注意,这里的参数最好就是主键或者唯一键,否则产生的是表锁@Select("<script>select*fromfoowhereid=#{id}forupdate</script>")FooselectForUpdateById(@Param("id")Longid);//service,必须加事物,否则selectForUpdateById无法实现分布式锁的作用@Transac......
  • System Suspend and Device Interrupts 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/power/suspend-and-interrupts.html系统挂起和设备中断版权©2014IntelCorp.作者:[email protected]挂起和恢复设备中断在系统挂起后(即在所有设备的->prepare、->suspend和->suspend_late回调已经执行......
  • GKCTF2020WP-Crypto Misc
    Crypto小学生的密码学题目e(x)=11x+6(mod26)密文:welcylk(flag为base64形式)我的解答:考点:仿射密码,已知a,b结果base64加密即可flag{c29yY2VyeQ==}汉字的秘密题目你能看出汉字的奥秘吗?答案形式:flag{小写字母}王壮夫工王中王夫由由井井人夫中夫夫井王土土......
  • F - Random Update Query
    F-RandomUpdateQueryProblemStatementYouaregivenanintegersequence$A=(A_1,A_2,\ldots,A_N)$oflength$N$.Wewillperformthefollowingoperationon$A$for$i=1,2,\ldots,M$inthisorder.First,chooseanintegerbetween$L_i$and......
  • 【flutter对抗】blutter使用+ACTF习题
    最新的能很好反编译flutter程序的项目‍1、安装gitclonehttps://github.com/worawit/blutter--depth=1​然后我直接将对应的两个压缩包下载下来(通过浏览器手动下载)不再通过python的代码来下载,之前一直卡在这个地方。如果读者可以正常运行init_env_win.py,手动这一步可以省......
  • Nginx Rewrite
    Nginx RewriteLOCATION常用NGINX正则表达式^:匹配输入字符串的起始位置$:匹配输入字符串的结束位置*:匹配前面的字符零次或多次。如“ol*”能匹配“o”及“ol”、“oll”+:匹配前面的字符一次或多次。如“ol+”能匹配“ol”及“oll”、“olll”,但不能匹配“o”?:匹配前......
  • openGauss学习笔记-153 openGauss 数据库运维-备份与恢复-物理备份与恢复之gs_proback
    openGauss学习笔记-153openGauss数据库运维-备份与恢复-物理备份与恢复之gs_probackup153.1背景信息gs_probackup是一个用于管理openGauss数据库备份和恢复的工具。它对openGauss实例进行定期备份,以便在数据库出现故障时能够恢复服务器。可用于备份单机数据库,也可对主机或者......