NSSCTF-[SWPUCTF 2023 秋季新生赛]-web

目录

0x01 [SWPUCTF 2023 秋季新生赛]If_else

0x02 [SWPUCTF 2023 秋季新生赛]RCE-PLUS

0x03 [SWPUCTF 2023 秋季新生赛]Pingpingping

0x04 [SWPUCTF 2023 秋季新生赛]一键连接!

0x05 [SWPUCTF 2023 秋季新生赛]NSS_HTTP_CHEKER

0x06 [SWPUCTF 2023 秋季新生赛]NSS大卖场

0x07 [SWPUCTF 2023 秋季新生赛]UnS3rialize

0x08 [SWPUCTF 2023 秋季新生赛]ez_talk

0x09 [SWPUCTF 2023 秋季新生赛]查查need


0x01 [SWPUCTF 2023 秋季新生赛]If_else

进题看看源码。

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第1张图片

但是由于if和else只能执行一个,而且$被ban了,所以a和b的值不能手动改。所以只能在判断语句中直接执行eval命令,然后直接输出就行了。不过要把后面给注释掉,payload:

check=1==1) eval(system('cat /f*')); /*

 然后访问check.php:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第2张图片

找到了flag。

0x02 [SWPUCTF 2023 秋季新生赛]RCE-PLUS

进题看源码。

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第3张图片

看到shell_exec和blacklist,知道是无回显rce。不过他过滤的都是无关紧要的东西。就payload:

/?cmd=ls /|tee a.txt

 然后访问a.txt,找到了flag就在根目录。

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第4张图片

接着payload:

/?cmd=cat /f*|tee a.txt

接着访问a.txt:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第5张图片

找到了flag。

0x03 [SWPUCTF 2023 秋季新生赛]Pingpingping

进题看源码。

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第6张图片

发现他需要传参Ping_ip.exe,但是网页传参会自动替换".",所以在前面用"["来先代替下划线,防止"."被过滤。当不显示报错图片时,说明传参成功了:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第7张图片

然后在他用system("ping -c 3 ")给我们三个ping回显的工具,我们直接用ls /看看能不能回显,payload如下:

/?Ping[ip.exe=127.0.0.1;ls /

 发现有回显,我们直接cat /f*即可,payload:

/?Ping[ip.exe=127.0.0.1;cat /f*

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第8张图片

找到了flag。

0x04 [SWPUCTF 2023 秋季新生赛]一键连接!

进题源码:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第9张图片

发现需要md5值相等,一开始想到的是:用0e开头的md5值为0进行比较,但是尝试了发现不行。因为这种方法应该只能用于md5值弱比较上。如果是"==="就可能难以实现。看了wp发现可以数组绕过,尝试一下:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第10张图片

发现前两关都可以这样用数组绕过。第三关他说要用data协议。但我去用php伪协议中的php://input来传参了。发现可以,然后需要蚁剑连接。payload如下:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第11张图片

然后发包,蚁剑连接试试。但是我蚁剑连不上,又回头去data协议了,因为用php协议发现post不能传参了,只能用data协议,然后用post传参Nss就行了,payload:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第12张图片

然后就得到了flag。

0x05 [SWPUCTF 2023 秋季新生赛]NSS_HTTP_CHEKER

http题,进题:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第13张图片

一次性payload结束:

GET: /?this_is_get=get_%1t

POST: this_is_post=p03t

Cookie: this_is_cookie=cookie_suki_desu~

User-Agent: NSSCTF

X-Forwarded-For: 127.0.0.1

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第14张图片

得到了flag。

0x06 [SWPUCTF 2023 秋季新生赛]NSS大卖场

进题是一个大卖场,我看了hint,发现给了一个username,以为是正常的sql注入,但是发现没有回显。所以我去看了wp。wp说是update注入。然后我去复现。

用burp抓包看看信息,发现了每次买道具都是/buy/n,其中n是商品代号。而且flag是8。然后我们直接在网页上payload,因为burp里payload发不出去了。payload:

/buy/1';UPDATE items SET price=1;#

 然后发现空格被过滤了,把空格换成%09就行。然后把金额改成1元,买了flag然后去背包看看就行。中间发现单引号要用%27进行url编码,不然出不来答案:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第15张图片

找到了flag。

0x07 [SWPUCTF 2023 秋季新生赛]UnS3rialize

进题源码:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第16张图片

可以看到NSS对象里,有一个system的函数,这是pop链的终点,然后回头找,找到了C里的want,这被当作函数调用了。接下来看了wp。用T里的sth触发__get()方法,而这之前要触发__toString()方法,那么在F中用echo notes进行文本调用来触发。所以最终pop链:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第17张图片

然后由于__wakeup()函数需要绕过,则我们用对象属性不匹配来绕过,即原本出来的答案:

O:1:"F":3:{s:4:"user";s:4:"SWPU";s:6:"passwd";s:3:"NSS";s:5:"notes";O:1:"T":1:{s:3:"sth";O:1:"C":1:{s:6:"whoami";O:3:"NSS":1:{s:3:"cmd";s:9:"cat /flag";}}}}

 我们将其修改为:

O:1:"F":4:{s:4:"user";s:4:"SWPU";s:6:"passwd";s:3:"NSS";s:5:"notes";O:1:"T":1:{s:3:"sth";O:1:"C":1:{s:6:"whoami";O:3:"NSS":1:{s:3:"cmd";s:9:"cat /flag";}}}}

 这样他的反序列化之前的__wakeup()函数就会被绕过了。

然后再用base64编码就可以得到答案了:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第18张图片

得到了flag。

0x08 [SWPUCTF 2023 秋季新生赛]ez_talk

进题文件上传:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第19张图片

然后就正常上传一句话木马,习惯性的改了文件头,上传成功:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第20张图片

发现我的木马进去了,然后蚁剑连接,找到了flag在根目录。

0x09 [SWPUCTF 2023 秋季新生赛]查查need

进题以为是正常爆破,但是尝试了好久没试出来,所以看了wp。wp上说是sql注入....然后我就去找到了注入点是student_id,并且是双引号闭合,然后用order by找到列数为5,然后用联合注入。发现注入不了,看了wp,说是要统一为utf-8字符集。即:

collate utf8_general_ci

 然后就是正常的注入过程,到最后一个获取grade的时候,我们知道flag肯定在grade里面。但是由于成绩太多了,所以flag无法显示了。

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第21张图片

wp的方法是用MAX(grade)获取grade中最大值,就是flag。但我去查了那个附件中的表格,发现里面有499个学生,所以用concat加上limit 500,1就可以直接输出flag了:

NSSCTF-[SWPUCTF 2023 秋季新生赛]-web_第22张图片

找到了flag。

你可能感兴趣的:(前端)