- 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位置)