SCTF-个人能力认证-wp

本文最后更新于:1 年前

SCTF-个人能力认证-wp

Misc

The_is_A_tree

  • 题目数据为二叉树,进行前序遍历
1
2
3
4
5
6
7
8
9
import os
List = []
for root, dirs, files in os.walk('./erchashu'):
f = open(root+'/data', 'r')
# print(root)
List.append(f.read())
f.close()
s = ''.join(List)
print(s)
  • 得到Q2hpbmVzZSB0cmFkaXRpb25hbCBjdWx0dXJlIGlzIGJyb2FkIGFuZCBwcm9mb3VuZCEgU28gSSBXYW50IEdpdmUgWW91IE15IEZsYWcgQnV0IFlvdSBOZWVkIERlY29kZSBJdC5FbmpveSBUaGUgRmxhZyEhOuW4iCDlhZEg5aSNIOaNnyDlt70g6ZyHIOaZiyDlp6Qg5aSn6L+HIOiuvCDlmazll5Eg6ZyHIOaBkiDoioIg6LGrIA==
  • base64解密

image-20211225164001159

  • 直接搜找到类似题目[BJDCTF2020]伏羲六十四卦
  • 借用脚本解出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
s = '师兑复损巽震晋姤大过讼噬嗑震恒节豫'
dic = {'坤': '000000', '剥': '000001', '比': '000010', '观': '000011', '豫': '000100', '晋': '000101', '萃': '000110', '否': '000111', '谦': '001000', '艮': '001001', '蹇': '001010', '渐': '001011', '小过': '001100', '旅': '001101', '咸': '001110', '遁': '001111', '师': '010000', '蒙': '010001', '坎': '010010', '涣': '010011', '解': '010100', '未济': '010101', '困': '010110', '讼': '010111', '升': '011000', '蛊': '011001', '井': '011010', '巽': '011011', '恒': '011100', '鼎': '011101', '大过': '011110', '姤': '011111', '复': '100000', '颐': '100001', '屯': '100010', '益': '100011', '震': '100100', '噬嗑': '100101', '随': '100110', '无妄': '100111', '明夷': '101000', '贲': '101001', '既济': '101010', '家人': '101011', '丰': '101100', '离': '101101', '革': '101110', '同人': '101111', '临': '110000', '损': '110001', '节': '110010', '中孚': '110011', '归妹': '110100', '睽': '110101', '兑': '110110', '履': '110111', '泰': '111000', '大畜': '111001', '需': '111010', '小畜': '111011', '大壮': '111100', '大有': '111101', '夬': '111110', '乾': '111111'}
li = []
k = 0
for i in range(len(s)):
if k == 1:
k = 0
continue
try:
li.append(dic[s[i]])
except:
t = ''
t = t+s[i]+s[i+1]
li.append(dic[t])
k = 1
ss = ''.join(li)
print(ss)
enc = ''
for i in range(0, len(ss), 8):
enc += chr(eval('0b'+ss[i:i+8]))
print(enc)

image-20211225164245498

Web

Loginme

image-20211225164534927

  • Only localhost can access进入http://124.71.166.197:18001/admin/index?id=1需要加本地ip验证
  • 常规思路burp抓包,添加xff无用
  • 分析源码,发现xff及x-client-ip均被过滤
1
2
3
4
5
6
7
8
9
10
11
12
13
14
func LocalRequired() gin.HandlerFunc {
return func(c *gin.Context) {
if c.GetHeader("x-forwarded-for") != "" || c.GetHeader("x-client-ip") != "" {
c.AbortWithStatus(403)
return
}
ip := c.ClientIP()
if ip == "127.0.0.1" {
c.Next()
} else {
c.AbortWithStatus(401)
}
}
}
  • 尝试搜索其他参数无果
  • 转移分析ClientIP(),clone框架源码,搜索该函数

image-20211225165405303

  • 添加X-Real-IP参数成功进入
  • 定位到structs.go
image-20211225165715109
  • id=0

image-20211225165816920

  • 添加age请求参数,发现回显age内容

image-20211225170026032

  • route.go存在templates字样,尝试payload = ?id=0&age={{2*2}}时,500报错
  • 查找资料

image-20211225170547190

  • 尝试{{.Username}}成功回显“Admin”
1
payload=?id=0&age={{.Password}}
  • 得到flag

image-20211225170749325



本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!