攻防世界 cat

**

学习知识点

1.当 CURLOPT_SAFE_UPLOAD 为 true 时,如果在请求前面加上@的话phpcurl组件是会把后面的当作绝对路径请求,来读取文件。当且仅当文件中存在中文字符的时候,Django 才会报错导致获取文件内容

TRUE为禁用 @ 前缀在 CURLOPT_POSTFIELDS 中发送文件。
FALSE为启用,@开头的value会被当做文件上传。

PHP 5.5.0 中添加,默认值 FALSE。
PHP 5.6.0 改默认值为 TRUE。
PHP 7 删除了此选项。

影响:CURLOPT_SAFE_UPLOAD选项配置不当结合其他情况可造成任意文件读取。

详情参见PHP libcurl 安全之 CURLOPT_SAFE_UPLOAD
2.django未关闭报错回显

3.url编码采用16进制范围为0-127 ,%79为最大127
**

以下为做题思路复现

  1. 首先打开题目根据提示输入一个127.0.0.1进行测试,返回如下
    攻防世界 cat_第1张图片

  2. 考虑管道符执行系统命令,提示报错
    攻防世界 cat_第2张图片
    尝试一波 &,| 等管道符号和ls dir等命令均报错了
    3.细看url可以直接发现 空格直接被url编码为了+,考虑报错回显,输入url=%80,出现报错信息
    攻防世界 cat_第3张图片
    通过过报错信息我可以发现后台运行了两个应用分别为php.和Django应用

4.查看报错信息,得到很多有用信息,例如python版本,文件路径,以及接口位置信息如下:
攻防世界 cat_第4张图片攻防世界 cat_第5张图片
攻防世界 cat_第6张图片

5.搜索到链接数据库的接口,利用 CURLOPT_SAFE_UPLOAD 为 true这个特性进行读取数据库文件,读取文件后搜索flag如下
攻防世界 cat_第7张图片

你可能感兴趣的:(攻防世界 cat)