我用Django 2(Python 3)实现了一个充满错误的Web应用程序

总结

我创建了一个基于Django 2.0的克隆版本,名为“EasyBuggy Django”,这是一个之前介绍过的充满漏洞的Web应用程序“EasyBuggy”。

easybuggy.png

可以通过以下命令从下载到启动来完成。

$ git clone https://github.com/k-tamura/easybuggy4django.git
$ cd easybuggy4django/
$ pip install -r requirements.txt
$ python manage.py runserver
:writing_hand_tone1: 起動するにはPython 3が必要です。python manage.py runserver 9000とすると9000番ポートで起動します。

在执行上述命令之前,建议先构建Python的虚拟环境。

$ python3 -m venv venv
$ source venv/bin/activate

当您看到以下消息时,Web应用程序已成功启动。

System check identified no issues (0 silenced).
May 29, 2018 - 16:50:34
Django version 2.0.4, using settings 'config.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

当访问 http://localhost:8000 时,将会显示主页面。

mov_eb_dj.gif

这个应用程序的用途

「EasyBuggy」的目的与之类似,都是为了复现和分析各种问题,以加深理解。目前已实现的包括以下错误和漏洞。

    • デッドロック(Python)

 

    • デッドロック(SQL)

 

    • 無限ループ

 

    • リダイレクトループ

 

    • メモリリーク

 

    • ネットワークソケットリーク

 

    • データベースコネクションリーク

 

    • ファイルディスクリプタリーク

 

    • スレッドリーク

 

    • 文字化け

 

    • 整数オーバーフロー

 

    • 丸め誤差

 

    • 打ち切り誤差

 

    • 情報落ち

 

    • XSS (クロスサイトスクリプティング)

 

    • SQLインジェクション

 

    • LDAPインジェクション

 

    • コードインジェクション

 

    • OSコマンドインジェクション

 

    • メールヘッダーインジェクション

 

    • サイズ制限の無いファイルアップロード

 

    • 拡張子制限の無いファイルアップロード

 

    • ブルートフォース攻撃可能なログイン画面

 

    • オープンリダイレクト可能なログイン画面

 

    • 親切過ぎる認証エラーメッセージ

 

    • CSRF (クロスサイトリクエストフォージェリ)

 

    • クリックジャッキング

 

    XXE (XML外部エンティティ)

这一次我用Python进行实现。即使是相同的功能,与之前使用Java时可能会有不同的行为,这让我受益匪浅。

示威

以下是一个演示,通过代码注入来停止EasyBuggy Django。

mov_eb_dj_demo.gif

构成的区别点

我已经创建了“EasyBuggy”的两个克隆版本,分别是“EasyBuggy Boot”(基于Spring Boot)和“EasyBuggy Bootlin”(基于Spring Boot且使用Kotlin实现),它们与原始版本的主要区别如下。

相違点EasyBuggyEasyBuggy BootEasyBuggy BootlinEasyBuggy Django言語JavaJavaKotlinPythonベースとなる技術Servlet 3.0.1Spring Boot 1.5.6 (Servlet 3.0.1)Spring Boot 1.5.7 (Servlet 3.0.1)Django 2.0プレゼンテーション層未使用 (一部 JSP 2.2 + JSTL 1.2)Thymeleaf 2.1.5 (一部 JSP 2.3 + JSTL 1.2)Thymeleaf 2.1.5 (一部 JSP 2.3 + JSTL 1.2)Django 2.0コンテナTomcat 7.0.37Tomcat 8.5.16Tomcat 8.5.20(Django組み込みの開発用Web サーバー)DBクライアント/サーバーJDBC / Derby 10.8.3.0Spring JDBC 4.3.9 / Derby 10.12.1.1 (Java 7の場合)、または10.13.1.1 (Java 8の場合)Spring JDBC 4.3.11 / Derby 10.13.1.1PyMySQL 0.8.0 / MySQLサーバーが必要LDAPクライアント/サーバーApache DS Client API 1.0.0 / Server 1.5.5Spring LDAP 2.3.1 / unboundid-ldapsdk 3.2.1Spring LDAP 2.3.1 / unboundid-ldapsdk 3.2.1LDAP3 2.5 / 任意LDAPサーバーが必要メールJavaMail 1.5.1JavaMail 1.5.1 (Spring Boot Mailで導入されるJavaMail 1.5.6をオーバーライド)JavaMail 1.5.1 (Spring Boot Mailで導入されるJavaMail 1.5.6をオーバーライド)smtplib(標準ライブラリ)開発ツール無しSpring Boot Developer Tools 1.5.6Spring Boot Developer Tools 1.5.7無しビルドツールMavenMavenGradle無し実行環境JRE 6以上をサポートJRE 7以上をサポートJRE 8以上をサポートPython 3

研發方式 de

我在开发EasyBuggy Django时使用Pycharm。只需在”Run/Debug Configurations”中设置带有runserver参数的manage.py启动配置,便可进行调试、修复和即时验证。

Screenshot from 2018-05-30 13-17-45.png

最终

虽然还有许多未实现的功能和问题,但我已经发布了。我在工作中几乎没有使用过Python和Django,所以如果你能给出一些建议,我会很高兴。如果你有任何关于“这种实现可能存在问题和漏洞”的信息,请务必告诉我。

请参考

Django 文档的安全问题存档

广告
将在 10 秒后关闭
bannerAds