- php cURL
CURLOPT_SAFE_UPLOAD - django DEBUG mode
- Django使用的是gbk编码,超过%F7的编码不在gbk中有意义
- 当
CURLOPT_SAFE_UPLOAD为 true 时,如果在请求前面加上@的话phpcurl组件是会把后面的当作绝对路径请求,来读取文件。当且仅当文件中存在中文字符的时候,Django 才会报错导致获取文件内容。
1.进行fuzz后,发现字符超过0x7F的ASCII都会引发Django的报错。在url中输入?url=%88,可以得到报错页面

2.可以判断出后台运行了两个应用,一个是PHP应用,一个是Django,用来处理php发来的请求。
3.通过 Django 报错调用栈中的信息,在settings项目中可以看到数据库相关信息

4.在通过访问111.198.29.45:52284/index.php?url=@/opt/api/database.sqlite3 得到数据库内容,其中包含 Flag,如图所示
(flag在返回内容的file和post位置)

本文揭示了一种利用phpcURL的CURLOPT_SAFE_UPLOAD参数与Django的gbk编码限制相结合的安全漏洞方法。通过特定的ASCII字符触发Django错误,可暴露数据库信息。文中详细描述了漏洞原理及利用过程。
548

被折叠的 条评论
为什么被折叠?



