如何判断目标站点是否为Django开发

老文一篇,几个月以前发在【代码审计】小密圈里的文章,当时是写一个系列(Django安全漫谈),抽出其中的一部分,分享一下。

在黑盒测试的情况下,如何判断一个站是否是Django开发的?以下这些方法,很多都能在我的博客( https://www.leavesongs.com )得到印证。

利用Debug模式异常页面判断

DEBUG模式开启时,访问不存在的页面或出错的页面会有特殊的异常抛出。像这样的页面,就可以确定是Django

访问一个包含表单的页面,表单中会有一个隐藏的input,用来做CSRF检测的Token,其名字比较独特,csrfmiddlewaretoken:

遇到有这个名字的表单,基本可以确定是Django。

假如开发者将 csrfmiddlewaretoken 这个名字换了,怎么办?

随便向目标的某个页面POST一个数据包,因为缺少CSRF TOKEN,如果目标网站是Django,它将给你一个颇具其特色的错误页面:

Django默认安装后会自带一个后台,地址是/admin(不过大多数网站会替换后台地址):

遇到这个样式的后台界面,可以确定是Django。

有的Django站点会返回Server头:

虽然不能100%确定是Djnago,但范围就缩的很小了。

有些细节虽然不能100%确定是django,但多个细节组成在一起就可以基本确定了。

比如,Django输出的html中通常会有很多空白行,因为这些位置放的是逻辑语句,Django不像jinja2中会提供 {%- 这样清除空白行的方法:

再比如,Django默认找回密码的链接是 /password_reset/ ,邮件发送成功是 /password_reset/done/ ,找回密码链接是 reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,20})/ ,找回密码成功是 /reset/done/ ,正常修改密码是 /password_change/ ,修改成功是 /password_change/done/

不过这些链接都可以改,只能用作参考。

再比如,django文件上传的目录通常叫 media ,注册时密码要求8位以上数字加字母,分页通常是 ?page=2 而不会是 /page/2/ ,表单输入框的id通常是 id_xxxx ,中文的情况下还会有一些特定的翻译语句,如 请上传一张有效的图片。您所上传的文件不是图片或者是已损坏的图片。CSRF验证失败. 相应中断. 等。

通过一些第三方模块的特点判断

Django之所以好用,因为其代码耦合性很低,所以有丰富的第三方模块可以直接使用。通过这些模块的特点也能判断目标网站是否是Django。

常用的第三方模块有django-rest-framework、django-debug-toolbar、django-bootstrap3、django-filter、django-cron、django-allauth、django-simple-captcha等。

比如,django-rest-framework默认包含一个登陆页面, /api-auth/login/

再比如,django-simple-captcha生成的验证码会包含一个名字是 captcha_0 ,值为40位hex的隐藏输入框。

这些第三方库的特点也可以辅助你判断,就是需要收集与细心观察了。

必杀技:用静态文件分析

有的网站可能修改了Django的后台地址,但Django后台所使用的静态文件地址通常没有修改,也较难修改。访问这些静态文件地址,看看内容是否是Django的这一套,就可以确定目标是否为Django:

如 https://www.leavesongs.com/static/admin/css/dashboard.css 、 http://www.wuzheng.org/static/admin/css/dashboard.css 、 http://static.fuwo.com/static/admin/css/dashboard.css 、 http://www.lintcode.com/static/admin/css/dashboard.css

我就不罗列了。

但这个方法有个局限,如果目标网站没有使用Django自带的django-admin(未将其包含在settings.py的INSTALLED_APPS中),就没有这个静态文件了。

作者:离别歌 来源:https://www.leavesongs.com/PENETRATION/detect-django.html

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2017-06-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CRPER折腾记

Angular 2 + 折腾记 :(1)初识Angular-cli[官方脚手架]及脱坑要点

这个系列的进度有些跳跃性,我尽量直白点解释,但是我不是官方文档,直入主题!!!!

1031
来自专栏北京马哥教育

Linux基础急速入门:用 TCPDUMP 抓包

简介 网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。 tcpdump - dum...

3798
来自专栏前端正义联盟

gitflow 开发流程学习(第一部分)

3457
来自专栏linux运维学习

linux学习第二十七篇:使用w查看系统负载,vmstat,top,sar,nload命令

使用w查看系统负载 w/uptime的命令结果是一样的 ? 1. 第一行从左面开始显示的信息依次为:时间,系统运行时间,登录用户数,平均负载。 ...

2557
来自专栏张戈的专栏

shell脚本实现整站缓存和预缓存,进一步提升网站整体加载速度

在 Linux 中,shell 脚本结合系统任务计划 crontab,非常简单就能实现一些复杂程序才能完成的工作,开发成本低,且简单易学。 张戈博客之前也分享过...

4509
来自专栏编程

Linux常用网络工具总结(一)

本文整理了在实践过程中使用的Linux网络工具,这些工具提供的功能非常强大,我们平时使用的只是冰山一角,比如、、、等。 本文不会深入研究这些命令的强大用法,因为...

3217
来自专栏张戈的专栏

申请域名邮箱,为空间减轻压力

玛思阁换空间之后,空间后台已配备邮箱管理(以前的那个 Win 主机,邮箱都没有,让我一直用的 QQ 邮箱!),由于个人邮箱好几个,于是就想都弄到一起,集中看邮件...

9489
来自专栏游戏杂谈

关于chrome插件编写的小结

其中manifest文件最为重要,它定义/指明插件应用的相关信息(权限、版本、功能说明等),点此查看Manifest的详情>>

4123
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第十九天 Linux学习【悟空教程】

UNIX操作系统是商业版,需要收费,价格比Microsoft Windows正版要贵一些。不过UNIX有免费版的,例如:NetBSD等类似UNIX版本。

1714
来自专栏iKcamp

走进Node.js 之 HTTP实现分析

作者:正龙(沪江Web前端开发工程师) 本文为原创文章,转载请注明作者及出处 上文“走进Node.js启动过程”中我们算是成功入门了。既然Node.js的强...

3606

扫码关注云+社区

领取腾讯云代金券