Confusion1
进入页面查看源代码,发现有两个提示
访问第一个源码里面有个
/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt
/opt/salt_b420e8cfb8862548e68459ae1d37a1d5.txt
不过我发现好像是只要访问404页面都有这两个。。。
另外这两个admin和login页面都没用。。。
继续信息收集
但是发现一下扫出很多东西,然后访问去看。。。什么jiaoshi
不过扫描出来的有回显的两个不同的长度的数据,访问另一种长度的
都寄了,所有收集到的信息就只有上面两个什么很多字母的文件名了。。。不过我没怎么玩过加盐的这些东西,看不太懂。。。
看了源码还是不够细节,竟然是SSTI。。。
只不过尝试之后是python的SSTI注入的模版
进行尝试的时候发现过滤了挺多东西的
我因为已经看了wp了所以看到了做法,不过这个绕过的方式早就写在笔记里面了有道云笔记
用我自己之前写的脚本把这个file找出来索引
ez_curl
直接给出了代码但是这个代码好像是一个请求其他网站的代码,然后不是用的传统的POST请求用的是file_get_contents('php://input');
研究了挺久的时间练第一步都没有绕过去,我知道stripos函数有缺陷但是这里怎么使用的没搞出来
不过题目给了个附件可以看一看,一个app.js,看不懂。。。
看了wp说是考的
- express的parameterLimit默认为1000
- 根据rfc,header字段可以通过在每一行前面至少加一个SP或HT来扩展到多行
第一点:来自源代码的这一行。结合这篇文章的分析,当我们传入的参数超过1000个时,之后的参数会被舍弃掉。于是这里我们最开始发个"admin":"true"设置好admin的值,加上999个没用的参数,把程序拼接的&admin=false挤掉,即可绕过过滤。
第二点:header 字段可以通过在每一行前面至少加一个SP 或 HT 来扩展到多行。以此绕过对 headers 的过滤
原文链接:【愚公系列】2023年06月 攻防世界-Web(ez_curl)_ezcurl-CSDN博客
都不是很懂,哎啥也不懂只知道拿写好的脚本用。。。
越难的题越难以利用,基本都是些脚本来实现的。。。
ezbypass-cat
进入就是一个登录界面,然后抓包发现别密码被加密了不过好消息是密码只是简单的使用MD5加密,但是先习惯性的扫一下目录,好家伙,发现一个icon图标试spring的,并且发现一个目录
swagger信息泄露,属于api泄露信息,使用接口检测工具先跑了一遍好像没有成功的接口。。。我感觉考点不会是爆破
但是我也没有遇到过真实的泄露的情况我也不知道怎么利用
???看了wp。。。考点完全和这个泄露没有任何关系。。。考的是白名单,主要是我扫目录的时候没有扫出来flag.html字典不太行。。。
也不能这样说吧,其实这泄露应该还是有点东西的,因为我不管访问这些路径都会先跳到login页面,也是暗示了需要登录也就是使用白名单进行绕过。。。(只有login.html没有访问控制其他页面都存在访问控制,所以添加login.html就会是在允许访问的范围内在通过目录穿越去到其他的目录文件)
先抓个登录的包,然后目录穿越到flag.html页面
之前那些泄露的接口也是有信息的只是不绕过就无法访问的到
wife_wife
题目提示本题不需要爆破,但是进去看了就一个注册然后用注册的登录会有三个格子里面有数据
进去一个很大的二次元图片然后看源码给出了提示,说明是在username上面下功夫,不过这是个什么东西
然后准备扫目录的没想到这里竟然会直接回显,尝试SSTI发现把{{}}这节URL编码尝试先编码结果那边不识别。。。
根据上面的那个提示,这个好像是这个模版,但是我还没听说过ruby的模版注入
但是我又在页面上摸索了一会发现有个文件下载的地方,首先尝试看有没有任意文件下载。发现确实存在文件下载
看页面的js源代码就只做了前段的判断就可以下载,把这个地方修改为要下载的文件然后把后面那个什么hidden给删了就可以下载了(不能说是任意文件下载但是可以把当前目录下的源码文件下载)
不过就知道这个网站上面一个注册一个登录页面都是html文件,下载了没用,这里估计只是一个地方还要从其他地方搞出来。。。
到了这一步基本就不知道了,在网上找了几个模版注入的东西试了好像也没什么用。。。看wp了
做了半天是个什么node.js的参数污染。。。这种题说实话我也没听说过有把注册的账号和密码放进js保存起来的。。。。。。我这里不做过多的解释,我自己也不是很懂node.js的一些知识,反正是这样利用的。。。我认为只是那个文件应该要通过这个文件下载下载下来才有意思否则这是谁也猜不到考的是什么。。。
今天有看了看这个Nodejs原型链污染攻击基础知识 | Savant's Blog
讲的很清楚,
- prototype是newClass类的一个属性
- newClass类实例化的对象newObj不能访问prototype,但可以通过.__proto__来访问newClass类的prototype
- newClass实例化的对象newObj的.__proto__指向newClass类的prototype
所以可以直接通过.__proto__去修改里面的属性的值,并且一个修改了在同源代码中其他类里面都会出现这个属性
题目名称-文件包含
给出了很明显的文件包含的提示,但是上面包含了一个check文件估计过滤了相当多的东西
测试几下发现base64被过滤,read被过滤,顺便扫了下源码发现了flag.php
尝试了大部分简单的绕过方式,然后还使用了一个比较小众的编码绕过方式,就是过滤器,这个我之前做过这样的题。
php://filter/convert.iconv.编码.编码/resource=flag.php
详细可以参考这篇文章PHP伪协议filter详解,php://filter协议过滤器-CSDN博客
我直接把这些编码方式放到一个字典里,然后去跑用集束炸弹模式
放bp随便一下就跑出来了
FlatScience
在页面上把所有连接点了没有看到注入点,先信息收集一下
发现了admin和login的页面
然后到处点,尝试弱口令无果最后发现login的usr存在SQL注入,用sqlmap好像有点什么问题无法把数据跑全。。。我都没遇到过sqlite数据库的注入,去网上找好像没有报错注入。。。用盲注sqlmap跑的都有点问题
虽然没有回显位但是抓包那里发现了回复的数据包的cookie有显示。。。
CREATE TABLE Users(id int primary key,name varchar(255),password varchar(255),hint varchar(255))
查询hint字段回复个
my fav word in my fav paper?!,my love is�,the password is password;
他的意思就是这个密码是那个页面文献中的一个单词。。。然后这个单词加密后和取出来的数据比对一致就是是密码。。。我是不想搞了直接用网上的脚本跑把。。。
首先用个代码把所有的PDF文件爬取下来
import re
import requests
regular_pdf = '[a-fA-F0-9]{32,32}.pdf'
regular_url = '\d/'
root_url = 'http://111.200.241.244:57162/'
pdf_list = []
def get_url(url):
result = requests.get(url + "index.html")
if result.status_code == 404:
return
re_url = re.findall(regular_url, result.text)
print(re_url)
re_pdf = re.findall(regular_pdf, result.text)
for pdf in re_pdf:
pdf_list.append(url + pdf)
if re_url:
for suffix_url in re_url:
get_url(url + suffix_url)
else:
return
def download_pdf(pdf_list):
for pdf_url in pdf_list:
result = requests.get(pdf_url)
file = open(r'/Users/yingjun/PycharmProjects/Test/pdf/' + pdf_url[-36:], 'wb')
file.write(result.content)
pass
get_url(root_url)
print(pdf_list)
download_pdf(pdf_list)
然后把每个PDF的单词爬下来加密后比对
import hashlib
import pdfplumber
import os
crypto_password = '3fab54a50e770d830c0416df817567662a9dc85c'
words_list = []
pdf_path = []
root_path = '/Users/yingjun/PycharmProjects/Test/pdf/'
def crypto_str(word):
word = word + 'Salz!'
# print(word)
encrypts = hashlib.sha1(word.encode("utf-8")).hexdigest()
return encrypts
def get_content(path):
pdf = pdfplumber.open(path)
for page in pdf.pages:
content = page.extract_text()
words_list.extend(content.split(' '))
def get_pdf_name(path):
filelist = os.listdir(path)
for item in filelist:
pdf_path.append(item)
get_pdf_name(root_path)
for path in pdf_path:
get_content(root_path + path)
for word in words_list:
word = word.replace('\n', '')
encrypts = crypto_str(word)
if encrypts == crypto_password:
print("-------------------------找到了------------------------------------")
print(word)
反正最后找到就是这个ThinJerboa
然后用这个登录就可以了
这两道题都是这种水平的题。。。4星确实有点难度那怪叫web进阶
Cat
先按照提示搞个域名输入发现没反应,直接试127.0.0.1,好家伙经典题型
尝试一些方式发现不可以让他执行系统命令,先信息收集一下
而且这里回显只回显了一部分东西
不过我在使用%a0的时候把什么html的页面返回了。
用html打开
不知道和这题有没有关系,不过这不是php的页面吗,怎么和python扯上关系了,看这个好像是调用了python中的ping接口去用的,而且有个django。。。
又找了半天没有发现在哪里进一步。。。
我确实叼到这之前基本上都走对了,没想到是要找个什么setting文件。。。闻所未闻
这篇wp写的还可以并且还有一个fuzz的字典,可以拿着用【网络安全 | XCTF】Python之Django模块+curl 攻防世界 Cat 解题详析_django curl-CSDN博客
这是python的Django模块,其数据库database文件存在于opt/api下的setting.py文件中
首先查看数据库的路径
@/opt/api/api/settings.py
在源码中找到这个东西
然后查找这个数据库内容,flag就在这个里面,这确实找不到。。。
@/opt/api/database.sqlite3
这题主要是考察了curl和django的模块内容
在PHP中使用CURL进行文件上传时(只有在php中有这个问题),@符号加上文件路径表示读取该文件内容并将其作为请求参数上传
当使用文件路径作为参数时,若文件路径指定有误或不存在,则无法正确读取文件内容。
使用@+文件路径时,CURL将自动读取该文件内容并将其作为请求参数。即使输入的文件路径有错或不存在,CURL仍然可以正常上传。
至此四星题全部做完,确实还是有点难度的。