virink_2019_files_share

打开靶机,是一个魔方游戏,看源码有hint说flag在 f1ag_Is_h3re,一开始去js文件里面看了一下,没有发现平时游戏题目中可以利用的点

img

发现有一个uploads/favicon.ico ,直接访问./uploads/,存在两个文件都分别抓一下包,在preview里面发现get传的参,猜测会不会存在文件包含

这里Server是openresty,百度之后发现是基于nginx,那么直接试着看nginx的配置文件啥的

img

尝试之后发现有些字符被ban掉了,可以自己试着能不能通过重复等绕过,绕过过滤之后还要进行目录穿越

img

那么,想要其他文件就直接在后面改吧,根据提示直接去f1ag_Is_h3re找flag

payload1:

1
?f=....//....//....//....//....//....//f1ag_Is_h3rere

但是显示该文件不存在,看了别的师傅的wp

在后面还要加上flag(为什么呢,虽然能理解f1ag_Is_h3re可能是个目录名,但是为什么能想到呢,可能还是一种思维吧

最终payload:

1
....//....//....//....//....//....//f1ag_Is_h3rere//flag

[PASECA2019]honey_shop

  • 经典买东西
  • session伪造
  • /proc/self
  • /environ

靶机主页面,经典要用钱买flag,刚好差一块钱,先都看看吧:

img

抓包,发现又是session伪造,所以我们可以修改balance为1337,这样就可以购买flag了,但是我们不知道密钥呀!!

再次回到首页,康康源码,抓抓包

最后点击图片可以下载,抓包康康;这种样子不禁让人觉得有文件包含漏洞,用/etc/passwd测试是否存在文件包含漏洞

img

目录穿越之后实现了文件包含

img

看师傅的wp,学到的新知识:

(因为这里用到了flask session伪造,所以应该是python的环境

1
2
/proc/self 指向当前的进程
/environ 当前进程的变量环境信息

img

得到密钥那就直接伪造,修改session,购买flag吧

img

[watevrCTF-2019]Supercalc

  • flask session伪造
  • {{config}}

打开靶机,是一个计算器

img

测试几次之后,抓包发现session,kali中解密之后可以确定是flask session,我们可以进行伪造,既然已经知道是flask框架,然后执行的代码又是{'1+1'}这样的,那么可以猜测是ssti注入

但是同样的,重点还是找到密钥

这里利用{{config}},不过这里必须要是再前面的运算报错的情况下才能实现,这或许和后端的check有关(?可以去看一下源码

利用注释绕过判断,但是在执行过程中又会执行,得到密钥

img

之后直接打payload:

1
{"history":[{"code":"__import__(\"os\").popen(\"ls\").read()"},{"code":"1 + 1"},{"code":"1 + 1"},{"code":"1 + 1"},{"code":"1 + 1"}]}

发现有flag.txt

img

直接cat就好啦

payload2:

1
{"history":[{"code":"__import__(\"os\").popen(\"cat flag.txt\").read()"},{"code":"1 + 1"},{"code":"1 + 1"},{"code":"1 + 1"},{"code":"1 + 1"}]}

[b01lers2020]Scrambled

  • python脚本编写

简单来说,transmissions两边的kxkxkxkxsh都不会改变,而中间的0b29指的是第29位是b,第28位是0,直接写脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import requests
import re
import time

url = 'http://efbfb7c1-8fd8-4ed9-9a4d-0e065c79e0e3.node4.buuoj.cn:81/'
res = requests.session()
r = res.get(url, headers={'Cookie': 'frequency=1; transmissions=kxkxkxkxsh0b29kxkxkxkxsh'})
flag = [0]*100
fflag = ''
for i in range(100): # 这里最好是要100此,难免会出现重复的transmissions导致最后的结果错误
time.sleep(0.1)
r = res.get(url)
cookies = r.cookies
ans = str(cookies['transmissions'])
ans = ans.replace('kxkxkxkxsh', '').replace('%7B', '{').replace('%7D', '}')
print(ans)
index = ans[2:]
flag[int(index)] = ans[1]
flag[int(index)-1] = ans[0]
print("-------loading-------")

for i in range(100):
fflag += str(flag[i])

print(fflag)

最后:

学到的新知识点:

0x01:

/proc/self 指向当前进程

/environ 指向进程的环境变量信息

做了好多flask session伪造

0x02:

利用{{config}}获取环境变量

flask框架ssti注入

———————–TBC—————————