buu-2

base64隐写

base64编码还是很熟悉了

base64原理如下

解码规则是将所有被修改过的base64字符串结尾的二进制值提取出来组成一个二进制串,以8位分割并转为十进制值,最终十进制对应的ASCII字符串即为base64隐写结果。

用脚本跑一下就行

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
def get_base64_diff_value(s1, s2):
base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
res = 0
for i in xrange(len(s2)): #xrange() 函数用法与 range 完全相同,所不同的是生成的不是一个数组,而是一个生成器。
if s1[i] != s2[i]:
return abs(base64chars.index(s1[i]) - base64chars.index(s2[i])) #index() 方法查找指定值的首次出现。
return res


def solve_stego():
with open('ComeOn!.txt', 'rb') as f:
file_lines = f.readlines()
bin_str = ''
for line in file_lines:
steg_line = line.replace('\n', '')
norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
diff = get_base64_diff_value(steg_line, norm_line)
print diff
pads_num = steg_line.count('=')
if diff:
bin_str += bin(diff)[2:].zfill(pads_num * 2) #zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。
else:
bin_str += '0' * pads_num * 2
print goflag(bin_str)


def goflag(bin_str): #bin()函数用于获取数字的二进制值,接受数字并返回等效的二进制字符。
res_str = ''
for i in xrange(0, len(bin_str), 8):
#xrange(start, stop[, step])start: 计数从 start 开始。默认是从 0 开始。例如 xrange(5) 等价于 xrange(0, 5)stop: 计数到 stop 结束,但不包括 stop。例如:xrange(0, 5) 是 [0, 1, 2, 3, 4] 没有 5。step:步长,默认为1。例如:xrange(0, 5) 等价于 xrange(0, 5, 1)
res_str += chr(int(bin_str[i:i + 8], 2))
return res_str


if __name__ == '__main__':
solve_stego()

1
2
3
4
5
6
7
8
Python
[m : ] 代表列表中的第m+1项到最后一项
[ : n] 代表列表中的第一项到第n项
[-1] 取最后一个元素
[:-1] 除了最后一个取全部
[::-1] 取从后向前(相反)的元素
[2::-1] 取从下标为2的元素翻转读取
[1:] 取第二个到最后一个元素

后门查杀

拥有一个d盾,然后去查杀附件,找到对应webshell的密码,结束

荷兰宽带数据泄露

附件为bin,是宽带数据文件,需要用RouterPassView打开

泄露的话应该是用户相关信息username、password,题目也没说,猜一下好了

数据包中的线索

我觉得我的技能点就没点在流量分析上,找了好久了才发现这是传输图片

可能是base64编码

(在各种base64解析失败的情况下,用浏览器直接把编码粘贴进去,(奇怪的小技巧增加了

webshell后门

这题和后门查杀挺像的,但是只是单纯的去找webshell的pass我觉得意义不算太大,

来看看后门代码吧

这里的eval() 函数把字符串按照 PHP 代码来计算。eval()方法会无条件执行传给它的代码,很容易导致安全问题。这里就是webshell能够上传成功的原因了。

代替函数:

system类型函数

1
<?php system($_POST["cmd"]);?>

system和evel还是有区别的,它是命令执行而不是代码执行。evel是代码执行而不是命令执行。

好大一个马,看的确实不是很懂

base64decode加密

php webshell执行命令原理

即按顺利调用system(),passthru(),shell_exec,exec,popen函数 成功调用就不再往下调用

吹着贝斯扫二维码

那36个文件用010打开完发现都是jpg文件但是文件尾后有数字,这边用脚本加个后缀,经过观察,是有顺序的,因此可以通过脚本进行自动拼图。

1
2
3
4
5
6
7
8
9
# coding=utf-8
import os
#将无后缀的文件加上.jpg
dir_list = os.listdir('./')
#print(dir_list)
for file in dir_list:
if '.' not in file:
# print(file)
os.rename(file, file+'.jpg')
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# coding=utf-8
# python2

import os
from PIL import Image

#图片压缩后的大小
width_i = 134
height_i = 130

#每行每列显示图片数量
row_max = 6
line_max = 6

all_path = list()
num = 0
pic_max = line_max * row_max

#文件夹路径
dir_name = r"./"


#获取文件夹下文件名的列表
dir_list = os.listdir('./')

#将文件列表重新排序(按文件原始数据末尾的数字)
for i in range(36,0,-1):
# print(i)
for file in dir_list:
if '.jpg' in file:
f=open(file ,'rb')
n1 = f.read()
n2 = n1[-2:]
# print()
if i > 9:
if str(i) in n2:
# all_path.append(os.path.join(file))
all_path.insert(0,os.path.join(file))
# print(all_path)
break
else:
if 'd9' in n1.encode('hex')[-4:] and str(i) in n2:
# print(file)
all_path.insert(0,os.path.join(file))
break
print(all_path)


toImage = Image.new('RGBA',(width_i*line_max,height_i*row_max))

#拼接图片
for i in range(row_max):
for j in range(line_max):
# 每次打开图片绝对路路径列表的第一张图片
pic_fole_head = Image.open(all_path[num])
# 获取图片的尺寸
wihth,height = pic_fole_head.size
# 按照指定的尺寸,给图片重新赋值,<PIL.Image.Image image mode=RGB size=200x200 at 0x127B7978>
tmppic = pic_fole_head.resize((width_i, height_i))
# 计算每个图片的左上角的坐标点(0, 0),(0, 200),(0, 400),(200, 0),(200, 200)。。。。(400, 400)
loc = (int(j % line_max * width_i), int(i % line_max * height_i))
print(loc)
# print("第{}张图的存放位置".format(num),loc)
toImage.paste(tmppic, loc)
num = num + 1

if num >= len(all_path):
break
if num >= pic_max:
break

# print(toImage.size)
toImage.save('merged.png')

然后扫二维码根据二维码的提示去解码over。

参考资料:

https://blog.csdn.net/Sanctuary1307/article/details/113836907

https://blog.csdn.net/springrolls/article/details/95220169

https://www.cnblogs.com/R4v3n/articles/8696317.html

https://www.cnblogs.com/paku/p/14750137.html