├── .gitignore
├── LICENSE
├── README.md
├── image
├── 微信.jpg
├── 支付宝.jpg
├── 效果图展示图.gif
├── 效果展示.gif
└── 效果展示1.gif
├── platform
├── .bowerrc
├── .gitignore
├── .htaccess
├── .htrouter.php
├── .travis.yml
├── app
│ ├── config
│ │ ├── config.php
│ │ ├── loader.php
│ │ └── services.php
│ ├── controllers
│ │ ├── AdminController.php
│ │ ├── ControllerBase.php
│ │ ├── CourseController.php
│ │ ├── ImageController.php
│ │ ├── IndexController.php
│ │ ├── LoginController.php
│ │ ├── RegisterController.php
│ │ └── UserController.php
│ ├── library
│ │ └── IPUtils.php
│ ├── messages
│ │ ├── en.php
│ │ └── zh-CN.php
│ ├── models
│ │ ├── Container.php
│ │ ├── CourseAccess.php
│ │ ├── CourseCategory.php
│ │ ├── Courses.php
│ │ ├── Qa.php
│ │ └── Users.php
│ ├── plugins
│ │ ├── ExceptionsPlugin.php
│ │ └── SecurityPlugin.php
│ └── views
│ │ ├── admin
│ │ ├── addQA.volt
│ │ ├── categories.volt
│ │ ├── editCategory.volt
│ │ ├── editQA.volt
│ │ ├── index.volt
│ │ ├── monitor.volt
│ │ ├── qa.volt
│ │ ├── userCourse.volt
│ │ ├── userCreate.volt
│ │ └── users.volt
│ │ ├── course
│ │ ├── edit.volt
│ │ └── new.volt
│ │ ├── image
│ │ └── index.volt
│ │ ├── index.volt
│ │ ├── index
│ │ ├── courses.volt
│ │ ├── index.volt
│ │ ├── qa.volt
│ │ ├── search.volt
│ │ ├── show401.volt
│ │ ├── show404.volt
│ │ └── show503.volt
│ │ ├── layouts
│ │ ├── adminheader.volt
│ │ ├── common_header.volt
│ │ ├── common_login.volt
│ │ ├── common_navbar.volt
│ │ ├── course_header.volt
│ │ ├── detail_header.volt
│ │ ├── footer.volt
│ │ ├── header.volt
│ │ ├── index_header.volt
│ │ ├── index_old_header.volt
│ │ ├── old_footer.volt
│ │ ├── oldfooter.volt
│ │ ├── oldheader.volt
│ │ └── qa_header.volt
│ │ ├── login
│ │ └── index.volt
│ │ └── user
│ │ ├── attach.volt
│ │ ├── course.volt
│ │ ├── index.volt
│ │ ├── profile.volt
│ │ └── running.volt
├── bower.json
├── composer.json
├── docs
│ └── i18n.md
├── index.html
├── public
│ ├── .htaccess
│ ├── assets
│ │ └── bower
│ │ │ ├── bootstrap
│ │ │ ├── .bower.json
│ │ │ ├── CHANGELOG.md
│ │ │ ├── Gemfile
│ │ │ ├── Gemfile.lock
│ │ │ ├── Gruntfile.js
│ │ │ ├── ISSUE_TEMPLATE.md
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── bower.json
│ │ │ ├── dist
│ │ │ │ ├── css
│ │ │ │ │ ├── bootstrap-theme.css
│ │ │ │ │ ├── bootstrap-theme.css.map
│ │ │ │ │ ├── bootstrap-theme.min.css
│ │ │ │ │ ├── bootstrap-theme.min.css.map
│ │ │ │ │ ├── bootstrap.css
│ │ │ │ │ ├── bootstrap.css.map
│ │ │ │ │ ├── bootstrap.min.css
│ │ │ │ │ └── bootstrap.min.css.map
│ │ │ │ ├── fonts
│ │ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ │ └── js
│ │ │ │ │ ├── bootstrap.js
│ │ │ │ │ ├── bootstrap.min.js
│ │ │ │ │ └── npm.js
│ │ │ ├── fonts
│ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ ├── grunt
│ │ │ │ ├── .jshintrc
│ │ │ │ ├── bs-commonjs-generator.js
│ │ │ │ ├── bs-glyphicons-data-generator.js
│ │ │ │ ├── bs-lessdoc-parser.js
│ │ │ │ ├── bs-raw-files-generator.js
│ │ │ │ ├── change-version.js
│ │ │ │ ├── configBridge.json
│ │ │ │ ├── npm-shrinkwrap.json
│ │ │ │ └── sauce_browsers.yml
│ │ │ ├── js
│ │ │ │ ├── .jscsrc
│ │ │ │ ├── .jshintrc
│ │ │ │ ├── affix.js
│ │ │ │ ├── alert.js
│ │ │ │ ├── button.js
│ │ │ │ ├── carousel.js
│ │ │ │ ├── collapse.js
│ │ │ │ ├── dropdown.js
│ │ │ │ ├── modal.js
│ │ │ │ ├── popover.js
│ │ │ │ ├── scrollspy.js
│ │ │ │ ├── tab.js
│ │ │ │ ├── tooltip.js
│ │ │ │ └── transition.js
│ │ │ ├── less
│ │ │ │ ├── .csscomb.json
│ │ │ │ ├── .csslintrc
│ │ │ │ ├── alerts.less
│ │ │ │ ├── badges.less
│ │ │ │ ├── bootstrap.less
│ │ │ │ ├── breadcrumbs.less
│ │ │ │ ├── button-groups.less
│ │ │ │ ├── buttons.less
│ │ │ │ ├── carousel.less
│ │ │ │ ├── close.less
│ │ │ │ ├── code.less
│ │ │ │ ├── component-animations.less
│ │ │ │ ├── dropdowns.less
│ │ │ │ ├── forms.less
│ │ │ │ ├── glyphicons.less
│ │ │ │ ├── grid.less
│ │ │ │ ├── input-groups.less
│ │ │ │ ├── jumbotron.less
│ │ │ │ ├── labels.less
│ │ │ │ ├── list-group.less
│ │ │ │ ├── media.less
│ │ │ │ ├── mixins.less
│ │ │ │ ├── mixins
│ │ │ │ │ ├── alerts.less
│ │ │ │ │ ├── background-variant.less
│ │ │ │ │ ├── border-radius.less
│ │ │ │ │ ├── buttons.less
│ │ │ │ │ ├── center-block.less
│ │ │ │ │ ├── clearfix.less
│ │ │ │ │ ├── forms.less
│ │ │ │ │ ├── gradients.less
│ │ │ │ │ ├── grid-framework.less
│ │ │ │ │ ├── grid.less
│ │ │ │ │ ├── hide-text.less
│ │ │ │ │ ├── image.less
│ │ │ │ │ ├── labels.less
│ │ │ │ │ ├── list-group.less
│ │ │ │ │ ├── nav-divider.less
│ │ │ │ │ ├── nav-vertical-align.less
│ │ │ │ │ ├── opacity.less
│ │ │ │ │ ├── pagination.less
│ │ │ │ │ ├── panels.less
│ │ │ │ │ ├── progress-bar.less
│ │ │ │ │ ├── reset-filter.less
│ │ │ │ │ ├── reset-text.less
│ │ │ │ │ ├── resize.less
│ │ │ │ │ ├── responsive-visibility.less
│ │ │ │ │ ├── size.less
│ │ │ │ │ ├── tab-focus.less
│ │ │ │ │ ├── table-row.less
│ │ │ │ │ ├── text-emphasis.less
│ │ │ │ │ ├── text-overflow.less
│ │ │ │ │ └── vendor-prefixes.less
│ │ │ │ ├── modals.less
│ │ │ │ ├── navbar.less
│ │ │ │ ├── navs.less
│ │ │ │ ├── normalize.less
│ │ │ │ ├── pager.less
│ │ │ │ ├── pagination.less
│ │ │ │ ├── panels.less
│ │ │ │ ├── popovers.less
│ │ │ │ ├── print.less
│ │ │ │ ├── progress-bars.less
│ │ │ │ ├── responsive-embed.less
│ │ │ │ ├── responsive-utilities.less
│ │ │ │ ├── scaffolding.less
│ │ │ │ ├── tables.less
│ │ │ │ ├── theme.less
│ │ │ │ ├── thumbnails.less
│ │ │ │ ├── tooltip.less
│ │ │ │ ├── type.less
│ │ │ │ ├── utilities.less
│ │ │ │ ├── variables.less
│ │ │ │ └── wells.less
│ │ │ ├── nuget
│ │ │ │ ├── MyGet.ps1
│ │ │ │ ├── bootstrap.less.nuspec
│ │ │ │ └── bootstrap.nuspec
│ │ │ ├── package.js
│ │ │ └── package.json
│ │ │ ├── font-awesome
│ │ │ ├── .bower.json
│ │ │ ├── .gitignore
│ │ │ ├── .npmignore
│ │ │ ├── HELP-US-OUT.txt
│ │ │ ├── bower.json
│ │ │ ├── css
│ │ │ │ ├── font-awesome.css
│ │ │ │ ├── font-awesome.css.map
│ │ │ │ └── font-awesome.min.css
│ │ │ ├── fonts
│ │ │ │ ├── FontAwesome.otf
│ │ │ │ ├── fontawesome-webfont.eot
│ │ │ │ ├── fontawesome-webfont.svg
│ │ │ │ ├── fontawesome-webfont.ttf
│ │ │ │ ├── fontawesome-webfont.woff
│ │ │ │ └── fontawesome-webfont.woff2
│ │ │ ├── less
│ │ │ │ ├── animated.less
│ │ │ │ ├── bordered-pulled.less
│ │ │ │ ├── core.less
│ │ │ │ ├── fixed-width.less
│ │ │ │ ├── font-awesome.less
│ │ │ │ ├── icons.less
│ │ │ │ ├── larger.less
│ │ │ │ ├── list.less
│ │ │ │ ├── mixins.less
│ │ │ │ ├── path.less
│ │ │ │ ├── rotated-flipped.less
│ │ │ │ ├── screen-reader.less
│ │ │ │ ├── stacked.less
│ │ │ │ └── variables.less
│ │ │ └── scss
│ │ │ │ ├── _animated.scss
│ │ │ │ ├── _bordered-pulled.scss
│ │ │ │ ├── _core.scss
│ │ │ │ ├── _fixed-width.scss
│ │ │ │ ├── _icons.scss
│ │ │ │ ├── _larger.scss
│ │ │ │ ├── _list.scss
│ │ │ │ ├── _mixins.scss
│ │ │ │ ├── _path.scss
│ │ │ │ ├── _rotated-flipped.scss
│ │ │ │ ├── _screen-reader.scss
│ │ │ │ ├── _stacked.scss
│ │ │ │ ├── _variables.scss
│ │ │ │ └── font-awesome.scss
│ │ │ ├── jquery
│ │ │ ├── .bower.json
│ │ │ ├── AUTHORS.txt
│ │ │ ├── LICENSE.txt
│ │ │ ├── README.md
│ │ │ ├── bower.json
│ │ │ ├── dist
│ │ │ │ ├── core.js
│ │ │ │ ├── jquery.js
│ │ │ │ ├── jquery.min.js
│ │ │ │ ├── jquery.min.map
│ │ │ │ ├── jquery.slim.js
│ │ │ │ ├── jquery.slim.min.js
│ │ │ │ └── jquery.slim.min.map
│ │ │ ├── external
│ │ │ │ └── sizzle
│ │ │ │ │ ├── LICENSE.txt
│ │ │ │ │ └── dist
│ │ │ │ │ ├── sizzle.js
│ │ │ │ │ ├── sizzle.min.js
│ │ │ │ │ └── sizzle.min.map
│ │ │ └── src
│ │ │ │ ├── .eslintrc
│ │ │ │ ├── ajax.js
│ │ │ │ ├── ajax
│ │ │ │ ├── jsonp.js
│ │ │ │ ├── load.js
│ │ │ │ ├── parseXML.js
│ │ │ │ ├── script.js
│ │ │ │ ├── var
│ │ │ │ │ ├── location.js
│ │ │ │ │ ├── nonce.js
│ │ │ │ │ └── rquery.js
│ │ │ │ └── xhr.js
│ │ │ │ ├── attributes.js
│ │ │ │ ├── attributes
│ │ │ │ ├── attr.js
│ │ │ │ ├── classes.js
│ │ │ │ ├── prop.js
│ │ │ │ ├── support.js
│ │ │ │ └── val.js
│ │ │ │ ├── callbacks.js
│ │ │ │ ├── core.js
│ │ │ │ ├── core
│ │ │ │ ├── DOMEval.js
│ │ │ │ ├── access.js
│ │ │ │ ├── init.js
│ │ │ │ ├── parseHTML.js
│ │ │ │ ├── ready-no-deferred.js
│ │ │ │ ├── ready.js
│ │ │ │ ├── readyException.js
│ │ │ │ ├── support.js
│ │ │ │ └── var
│ │ │ │ │ └── rsingleTag.js
│ │ │ │ ├── css.js
│ │ │ │ ├── css
│ │ │ │ ├── addGetHookIf.js
│ │ │ │ ├── adjustCSS.js
│ │ │ │ ├── curCSS.js
│ │ │ │ ├── hiddenVisibleSelectors.js
│ │ │ │ ├── showHide.js
│ │ │ │ ├── support.js
│ │ │ │ └── var
│ │ │ │ │ ├── cssExpand.js
│ │ │ │ │ ├── getStyles.js
│ │ │ │ │ ├── isHiddenWithinTree.js
│ │ │ │ │ ├── rmargin.js
│ │ │ │ │ ├── rnumnonpx.js
│ │ │ │ │ └── swap.js
│ │ │ │ ├── data.js
│ │ │ │ ├── data
│ │ │ │ ├── Data.js
│ │ │ │ └── var
│ │ │ │ │ ├── acceptData.js
│ │ │ │ │ ├── dataPriv.js
│ │ │ │ │ └── dataUser.js
│ │ │ │ ├── deferred.js
│ │ │ │ ├── deferred
│ │ │ │ └── exceptionHook.js
│ │ │ │ ├── deprecated.js
│ │ │ │ ├── dimensions.js
│ │ │ │ ├── effects.js
│ │ │ │ ├── effects
│ │ │ │ ├── Tween.js
│ │ │ │ └── animatedSelector.js
│ │ │ │ ├── event.js
│ │ │ │ ├── event
│ │ │ │ ├── ajax.js
│ │ │ │ ├── alias.js
│ │ │ │ ├── focusin.js
│ │ │ │ ├── support.js
│ │ │ │ └── trigger.js
│ │ │ │ ├── exports
│ │ │ │ ├── amd.js
│ │ │ │ └── global.js
│ │ │ │ ├── jquery.js
│ │ │ │ ├── manipulation.js
│ │ │ │ ├── manipulation
│ │ │ │ ├── _evalUrl.js
│ │ │ │ ├── buildFragment.js
│ │ │ │ ├── getAll.js
│ │ │ │ ├── setGlobalEval.js
│ │ │ │ ├── support.js
│ │ │ │ ├── var
│ │ │ │ │ ├── rcheckableType.js
│ │ │ │ │ ├── rscriptType.js
│ │ │ │ │ └── rtagName.js
│ │ │ │ └── wrapMap.js
│ │ │ │ ├── offset.js
│ │ │ │ ├── queue.js
│ │ │ │ ├── queue
│ │ │ │ └── delay.js
│ │ │ │ ├── selector-native.js
│ │ │ │ ├── selector-sizzle.js
│ │ │ │ ├── selector.js
│ │ │ │ ├── serialize.js
│ │ │ │ ├── traversing.js
│ │ │ │ ├── traversing
│ │ │ │ ├── findFilter.js
│ │ │ │ └── var
│ │ │ │ │ ├── dir.js
│ │ │ │ │ ├── rneedsContext.js
│ │ │ │ │ └── siblings.js
│ │ │ │ ├── var
│ │ │ │ ├── ObjectFunctionString.js
│ │ │ │ ├── arr.js
│ │ │ │ ├── class2type.js
│ │ │ │ ├── concat.js
│ │ │ │ ├── document.js
│ │ │ │ ├── documentElement.js
│ │ │ │ ├── fnToString.js
│ │ │ │ ├── getProto.js
│ │ │ │ ├── hasOwn.js
│ │ │ │ ├── indexOf.js
│ │ │ │ ├── pnum.js
│ │ │ │ ├── push.js
│ │ │ │ ├── rcssNum.js
│ │ │ │ ├── rnotwhite.js
│ │ │ │ ├── slice.js
│ │ │ │ ├── support.js
│ │ │ │ └── toString.js
│ │ │ │ └── wrap.js
│ │ │ ├── materialize
│ │ │ ├── .bower.json
│ │ │ ├── .editorconfig
│ │ │ ├── .gitattributes
│ │ │ ├── .npmignore
│ │ │ ├── .travis.yml
│ │ │ ├── CHANGELOG.md
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── LICENSE
│ │ │ ├── bin
│ │ │ │ ├── materialize.css
│ │ │ │ └── materialize.js
│ │ │ ├── bower.json
│ │ │ ├── dist
│ │ │ │ ├── css
│ │ │ │ │ ├── materialize.css
│ │ │ │ │ └── materialize.min.css
│ │ │ │ ├── fonts
│ │ │ │ │ └── roboto
│ │ │ │ │ │ ├── Roboto-Bold.eot
│ │ │ │ │ │ ├── Roboto-Bold.ttf
│ │ │ │ │ │ ├── Roboto-Bold.woff
│ │ │ │ │ │ ├── Roboto-Bold.woff2
│ │ │ │ │ │ ├── Roboto-Light.eot
│ │ │ │ │ │ ├── Roboto-Light.ttf
│ │ │ │ │ │ ├── Roboto-Light.woff
│ │ │ │ │ │ ├── Roboto-Light.woff2
│ │ │ │ │ │ ├── Roboto-Medium.eot
│ │ │ │ │ │ ├── Roboto-Medium.ttf
│ │ │ │ │ │ ├── Roboto-Medium.woff
│ │ │ │ │ │ ├── Roboto-Medium.woff2
│ │ │ │ │ │ ├── Roboto-Regular.eot
│ │ │ │ │ │ ├── Roboto-Regular.ttf
│ │ │ │ │ │ ├── Roboto-Regular.woff
│ │ │ │ │ │ ├── Roboto-Regular.woff2
│ │ │ │ │ │ ├── Roboto-Thin.eot
│ │ │ │ │ │ ├── Roboto-Thin.ttf
│ │ │ │ │ │ ├── Roboto-Thin.woff
│ │ │ │ │ │ └── Roboto-Thin.woff2
│ │ │ │ └── js
│ │ │ │ │ ├── materialize.js
│ │ │ │ │ └── materialize.min.js
│ │ │ ├── extras
│ │ │ │ └── noUiSlider
│ │ │ │ │ ├── nouislider.css
│ │ │ │ │ ├── nouislider.js
│ │ │ │ │ └── nouislider.min.js
│ │ │ ├── fonts
│ │ │ │ └── roboto
│ │ │ │ │ ├── Roboto-Bold.eot
│ │ │ │ │ ├── Roboto-Bold.ttf
│ │ │ │ │ ├── Roboto-Bold.woff
│ │ │ │ │ ├── Roboto-Bold.woff2
│ │ │ │ │ ├── Roboto-Light.eot
│ │ │ │ │ ├── Roboto-Light.ttf
│ │ │ │ │ ├── Roboto-Light.woff
│ │ │ │ │ ├── Roboto-Light.woff2
│ │ │ │ │ ├── Roboto-Medium.eot
│ │ │ │ │ ├── Roboto-Medium.ttf
│ │ │ │ │ ├── Roboto-Medium.woff
│ │ │ │ │ ├── Roboto-Medium.woff2
│ │ │ │ │ ├── Roboto-Regular.eot
│ │ │ │ │ ├── Roboto-Regular.ttf
│ │ │ │ │ ├── Roboto-Regular.woff
│ │ │ │ │ ├── Roboto-Regular.woff2
│ │ │ │ │ ├── Roboto-Thin.eot
│ │ │ │ │ ├── Roboto-Thin.ttf
│ │ │ │ │ ├── Roboto-Thin.woff
│ │ │ │ │ └── Roboto-Thin.woff2
│ │ │ ├── js
│ │ │ │ ├── animation.js
│ │ │ │ ├── buttons.js
│ │ │ │ ├── cards.js
│ │ │ │ ├── carousel.js
│ │ │ │ ├── character_counter.js
│ │ │ │ ├── chips.js
│ │ │ │ ├── collapsible.js
│ │ │ │ ├── date_picker
│ │ │ │ │ ├── picker.date.js
│ │ │ │ │ └── picker.js
│ │ │ │ ├── dropdown.js
│ │ │ │ ├── forms.js
│ │ │ │ ├── global.js
│ │ │ │ ├── hammer.min.js
│ │ │ │ ├── initial.js
│ │ │ │ ├── jquery.easing.1.3.js
│ │ │ │ ├── jquery.hammer.js
│ │ │ │ ├── jquery.timeago.min.js
│ │ │ │ ├── leanModal.js
│ │ │ │ ├── materialbox.js
│ │ │ │ ├── parallax.js
│ │ │ │ ├── pushpin.js
│ │ │ │ ├── scrollFire.js
│ │ │ │ ├── scrollspy.js
│ │ │ │ ├── sideNav.js
│ │ │ │ ├── slider.js
│ │ │ │ ├── tabs.js
│ │ │ │ ├── toasts.js
│ │ │ │ ├── tooltip.js
│ │ │ │ ├── transitions.js
│ │ │ │ ├── velocity.min.js
│ │ │ │ └── waves.js
│ │ │ ├── package.js
│ │ │ ├── sass
│ │ │ │ ├── components
│ │ │ │ │ ├── _buttons.scss
│ │ │ │ │ ├── _cards.scss
│ │ │ │ │ ├── _carousel.scss
│ │ │ │ │ ├── _chips.scss
│ │ │ │ │ ├── _collapsible.scss
│ │ │ │ │ ├── _color.scss
│ │ │ │ │ ├── _dropdown.scss
│ │ │ │ │ ├── _global.scss
│ │ │ │ │ ├── _grid.scss
│ │ │ │ │ ├── _icons-material-design.scss
│ │ │ │ │ ├── _materialbox.scss
│ │ │ │ │ ├── _mixins.scss
│ │ │ │ │ ├── _modal.scss
│ │ │ │ │ ├── _navbar.scss
│ │ │ │ │ ├── _normalize.scss
│ │ │ │ │ ├── _prefixer.scss
│ │ │ │ │ ├── _preloader.scss
│ │ │ │ │ ├── _roboto.scss
│ │ │ │ │ ├── _sideNav.scss
│ │ │ │ │ ├── _slider.scss
│ │ │ │ │ ├── _table_of_contents.scss
│ │ │ │ │ ├── _tabs.scss
│ │ │ │ │ ├── _toast.scss
│ │ │ │ │ ├── _tooltip.scss
│ │ │ │ │ ├── _typography.scss
│ │ │ │ │ ├── _variables.scss
│ │ │ │ │ ├── _waves.scss
│ │ │ │ │ ├── date_picker
│ │ │ │ │ │ ├── _default.date.scss
│ │ │ │ │ │ ├── _default.scss
│ │ │ │ │ │ └── _default.time.scss
│ │ │ │ │ └── forms
│ │ │ │ │ │ ├── _checkboxes.scss
│ │ │ │ │ │ ├── _file-input.scss
│ │ │ │ │ │ ├── _forms.scss
│ │ │ │ │ │ ├── _input-fields.scss
│ │ │ │ │ │ ├── _radio-buttons.scss
│ │ │ │ │ │ ├── _range.scss
│ │ │ │ │ │ ├── _select.scss
│ │ │ │ │ │ └── _switches.scss
│ │ │ │ └── materialize.scss
│ │ │ ├── templates
│ │ │ │ ├── masonry-template
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── background1.jpg
│ │ │ │ │ ├── background2.jpg
│ │ │ │ │ ├── background3.jpg
│ │ │ │ │ ├── css
│ │ │ │ │ │ └── style.css
│ │ │ │ │ └── js
│ │ │ │ │ │ ├── init.js
│ │ │ │ │ │ └── masonry.pkgd.min.js
│ │ │ │ ├── parallax-template
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── background1.jpg
│ │ │ │ │ ├── background2.jpg
│ │ │ │ │ ├── background3.jpg
│ │ │ │ │ ├── css
│ │ │ │ │ │ └── style.css
│ │ │ │ │ └── js
│ │ │ │ │ │ └── init.js
│ │ │ │ └── starter-template
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── css
│ │ │ │ │ └── style.css
│ │ │ │ │ └── js
│ │ │ │ │ └── init.js
│ │ │ └── tests
│ │ │ │ └── spec
│ │ │ │ ├── cards
│ │ │ │ └── cardsSpec.js
│ │ │ │ ├── collapsible
│ │ │ │ └── collapsibleSpec.js
│ │ │ │ ├── helper.js
│ │ │ │ ├── scrollFire
│ │ │ │ └── scrollFireSpec.js
│ │ │ │ ├── select
│ │ │ │ └── selectSpec.js
│ │ │ │ ├── tabs
│ │ │ │ └── tabsSpec.js
│ │ │ │ ├── toast
│ │ │ │ └── toastSpec.js
│ │ │ │ └── tooltip
│ │ │ │ └── tooltipSpec.js
│ │ │ ├── wangEditor
│ │ │ ├── .bower.json
│ │ │ ├── .gitattributes
│ │ │ ├── .gitignore
│ │ │ ├── .jshintrc
│ │ │ ├── .npmignore
│ │ │ ├── Gruntfile.js
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ ├── bower.json
│ │ │ ├── dist
│ │ │ │ ├── css
│ │ │ │ │ ├── fonts
│ │ │ │ │ │ ├── icomoon.eot
│ │ │ │ │ │ ├── icomoon.svg
│ │ │ │ │ │ ├── icomoon.ttf
│ │ │ │ │ │ └── icomoon.woff
│ │ │ │ │ ├── wangEditor.css
│ │ │ │ │ ├── wangEditor.less
│ │ │ │ │ └── wangEditor.min.css
│ │ │ │ └── js
│ │ │ │ │ ├── lib
│ │ │ │ │ ├── jquery-1.10.2.min.js
│ │ │ │ │ └── jquery-2.2.1.js
│ │ │ │ │ ├── wangEditor.js
│ │ │ │ │ └── wangEditor.min.js
│ │ │ ├── node_modules
│ │ │ │ └── formidable
│ │ │ │ │ ├── .npmignore
│ │ │ │ │ ├── .travis.yml
│ │ │ │ │ ├── LICENSE
│ │ │ │ │ ├── Readme.md
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── lib
│ │ │ │ │ ├── file.js
│ │ │ │ │ ├── incoming_form.js
│ │ │ │ │ ├── index.js
│ │ │ │ │ ├── json_parser.js
│ │ │ │ │ ├── multipart_parser.js
│ │ │ │ │ ├── octet_parser.js
│ │ │ │ │ └── querystring_parser.js
│ │ │ │ │ └── package.json
│ │ │ ├── package.json
│ │ │ ├── server-for-cros.js
│ │ │ ├── server.js
│ │ │ ├── static
│ │ │ │ ├── emotions
│ │ │ │ │ ├── default
│ │ │ │ │ │ ├── 1.gif
│ │ │ │ │ │ ├── 10.gif
│ │ │ │ │ │ ├── 11.gif
│ │ │ │ │ │ ├── 12.gif
│ │ │ │ │ │ ├── 13.gif
│ │ │ │ │ │ ├── 14.gif
│ │ │ │ │ │ ├── 15.gif
│ │ │ │ │ │ ├── 16.gif
│ │ │ │ │ │ ├── 17.gif
│ │ │ │ │ │ ├── 18.gif
│ │ │ │ │ │ ├── 19.gif
│ │ │ │ │ │ ├── 2.gif
│ │ │ │ │ │ ├── 20.gif
│ │ │ │ │ │ ├── 21.gif
│ │ │ │ │ │ ├── 22.gif
│ │ │ │ │ │ ├── 23.gif
│ │ │ │ │ │ ├── 24.gif
│ │ │ │ │ │ ├── 25.gif
│ │ │ │ │ │ ├── 26.gif
│ │ │ │ │ │ ├── 27.gif
│ │ │ │ │ │ ├── 28.gif
│ │ │ │ │ │ ├── 29.gif
│ │ │ │ │ │ ├── 3.gif
│ │ │ │ │ │ ├── 30.gif
│ │ │ │ │ │ ├── 31.gif
│ │ │ │ │ │ ├── 32.gif
│ │ │ │ │ │ ├── 33.gif
│ │ │ │ │ │ ├── 34.gif
│ │ │ │ │ │ ├── 35.gif
│ │ │ │ │ │ ├── 36.gif
│ │ │ │ │ │ ├── 37.gif
│ │ │ │ │ │ ├── 38.gif
│ │ │ │ │ │ ├── 39.gif
│ │ │ │ │ │ ├── 4.gif
│ │ │ │ │ │ ├── 40.gif
│ │ │ │ │ │ ├── 41.gif
│ │ │ │ │ │ ├── 42.gif
│ │ │ │ │ │ ├── 43.gif
│ │ │ │ │ │ ├── 44.gif
│ │ │ │ │ │ ├── 45.gif
│ │ │ │ │ │ ├── 46.gif
│ │ │ │ │ │ ├── 47.gif
│ │ │ │ │ │ ├── 48.gif
│ │ │ │ │ │ ├── 49.gif
│ │ │ │ │ │ ├── 5.gif
│ │ │ │ │ │ ├── 50.gif
│ │ │ │ │ │ ├── 6.gif
│ │ │ │ │ │ ├── 7.gif
│ │ │ │ │ │ ├── 8.gif
│ │ │ │ │ │ └── 9.gif
│ │ │ │ │ └── jinxing
│ │ │ │ │ │ ├── 1.gif
│ │ │ │ │ │ ├── 2.gif
│ │ │ │ │ │ ├── 3.gif
│ │ │ │ │ │ ├── 4.gif
│ │ │ │ │ │ ├── 5.gif
│ │ │ │ │ │ └── 6.gif
│ │ │ │ └── highlightjs
│ │ │ │ │ ├── dark.css
│ │ │ │ │ ├── github.css
│ │ │ │ │ └── highlight.pack.js
│ │ │ ├── test
│ │ │ │ ├── angular
│ │ │ │ │ └── test-angular.html
│ │ │ │ ├── bootstrap
│ │ │ │ │ ├── bs-3.3.5
│ │ │ │ │ │ ├── css
│ │ │ │ │ │ │ ├── bootstrap-theme.css
│ │ │ │ │ │ │ ├── bootstrap-theme.css.map
│ │ │ │ │ │ │ ├── bootstrap-theme.min.css
│ │ │ │ │ │ │ ├── bootstrap.css
│ │ │ │ │ │ │ ├── bootstrap.css.map
│ │ │ │ │ │ │ └── bootstrap.min.css
│ │ │ │ │ │ ├── fonts
│ │ │ │ │ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ │ │ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ │ │ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ │ │ │ │ ├── glyphicons-halflings-regular.woff
│ │ │ │ │ │ │ └── glyphicons-halflings-regular.woff2
│ │ │ │ │ │ └── js
│ │ │ │ │ │ │ ├── bootstrap.js
│ │ │ │ │ │ │ ├── bootstrap.min.js
│ │ │ │ │ │ │ └── npm.js
│ │ │ │ │ └── test-bs-modal.html
│ │ │ │ ├── custom-menu
│ │ │ │ │ ├── custom-menu.html
│ │ │ │ │ └── js
│ │ │ │ │ │ ├── custom-menu-1.js
│ │ │ │ │ │ ├── custom-menu-2.js
│ │ │ │ │ │ ├── custom-menu.js
│ │ │ │ │ │ └── require-main.js
│ │ │ │ ├── emotions.data
│ │ │ │ ├── icomoon
│ │ │ │ │ ├── Read Me.txt
│ │ │ │ │ ├── demo-files
│ │ │ │ │ │ ├── demo.css
│ │ │ │ │ │ └── demo.js
│ │ │ │ │ ├── demo.html
│ │ │ │ │ ├── fonts
│ │ │ │ │ │ ├── icomoon.eot
│ │ │ │ │ │ ├── icomoon.svg
│ │ │ │ │ │ ├── icomoon.ttf
│ │ │ │ │ │ └── icomoon.woff
│ │ │ │ │ ├── selection.json
│ │ │ │ │ └── style.css
│ │ │ │ ├── index.html
│ │ │ │ ├── plupload
│ │ │ │ │ ├── lib
│ │ │ │ │ │ └── plupload
│ │ │ │ │ │ │ ├── Moxie.swf
│ │ │ │ │ │ │ ├── Moxie.xap
│ │ │ │ │ │ │ └── plupload.full.min.js
│ │ │ │ │ └── test.html
│ │ │ │ ├── requirejs
│ │ │ │ │ ├── js
│ │ │ │ │ │ ├── main.js
│ │ │ │ │ │ └── require.js
│ │ │ │ │ └── test-requirejs.html
│ │ │ │ ├── seajs
│ │ │ │ │ ├── js
│ │ │ │ │ │ ├── jquery-2.2.1-for-seajs.js
│ │ │ │ │ │ └── sea.js
│ │ │ │ │ ├── main.js
│ │ │ │ │ └── test-seajs.html
│ │ │ │ ├── step-test
│ │ │ │ │ ├── test1.html
│ │ │ │ │ └── test2.html
│ │ │ │ ├── test-createbyelem.html
│ │ │ │ ├── test-js-head.html
│ │ │ │ ├── test-lang.html
│ │ │ │ ├── test-menus.html
│ │ │ │ ├── test-muti.html
│ │ │ │ ├── test-style.html
│ │ │ │ ├── test-uploadfn.html
│ │ │ │ ├── vue
│ │ │ │ │ └── test-vue.html
│ │ │ │ └── z-test.html
│ │ │ └── uploadfiles
│ │ │ │ └── readme
│ │ │ └── xterm.js
│ │ │ ├── .bower.json
│ │ │ ├── .editorconfig
│ │ │ ├── .github
│ │ │ └── ISSUE_TEMPLATE.md
│ │ │ ├── .mailmap
│ │ │ ├── .travis.yml
│ │ │ ├── AUTHORS
│ │ │ ├── CONTRIBUTING.md
│ │ │ ├── Dockerfile
│ │ │ ├── LICENSE
│ │ │ ├── Procfile.dev
│ │ │ ├── README.md
│ │ │ ├── addons
│ │ │ ├── attach
│ │ │ │ ├── attach.js
│ │ │ │ ├── index.html
│ │ │ │ └── package.json
│ │ │ ├── fit
│ │ │ │ ├── fit.js
│ │ │ │ └── package.json
│ │ │ ├── fullscreen
│ │ │ │ ├── fullscreen.css
│ │ │ │ ├── fullscreen.js
│ │ │ │ └── package.json
│ │ │ └── linkify
│ │ │ │ ├── index.html
│ │ │ │ ├── linkify.js
│ │ │ │ └── package.json
│ │ │ ├── bin
│ │ │ ├── generate-authors
│ │ │ └── prepare-release
│ │ │ ├── bower.json
│ │ │ ├── jsdoc.json
│ │ │ ├── package.json
│ │ │ ├── src
│ │ │ ├── xterm.css
│ │ │ └── xterm.js
│ │ │ └── xtermjs.png
│ ├── css
│ │ ├── index.css
│ │ ├── info.css
│ │ ├── login.css
│ │ ├── style.css
│ │ └── xterm.css
│ ├── img
│ │ ├── show.gif
│ │ └── texture-blue-fonchik-simple-dark-colors-glow-background.jpg
│ ├── imgs
│ │ ├── bg-course.png
│ │ ├── bg.png
│ │ ├── bg_01.png
│ │ ├── bg_02.png
│ │ ├── bg_03.png
│ │ ├── bg_04.png
│ │ ├── course_01.png
│ │ ├── course_02.png
│ │ ├── course_03.png
│ │ ├── course_04.png
│ │ ├── course_05.png
│ │ ├── course_06.png
│ │ ├── course_07.png
│ │ ├── dialog.png
│ │ ├── fullscreen.png
│ │ ├── icon_course.png
│ │ ├── icon_gray.png
│ │ ├── icon_green.png
│ │ ├── icon_menu1.png
│ │ ├── icon_menu1_active.png
│ │ ├── icon_menu2.png
│ │ ├── icon_menu2_active.png
│ │ ├── icon_menu3.png
│ │ ├── icon_menu3_active.png
│ │ ├── icon_qa.png
│ │ ├── icon_search.png
│ │ ├── icon_user.png
│ │ ├── img_detail.png
│ │ ├── info_green.jpg
│ │ ├── info_red.jpg
│ │ ├── logo.png
│ │ ├── logo1.png
│ │ ├── qrcode.jpg
│ │ ├── search_bg.png
│ │ ├── study.png
│ │ ├── study_hover.png
│ │ ├── username.png
│ │ ├── userpwd.png
│ │ └── 韬唤璇_jpg
│ ├── index.php
│ └── js
│ │ ├── common.js
│ │ ├── fetch.min.js
│ │ └── xterm.js
└── tests
│ ├── TestHelper.php
│ └── UnitTestCase.php
├── 数据库
└── platform.sql
├── 课程报告
├── csrf基础训练一.doc
├── csrf基础训练二.doc
├── dom型xss基础训练.doc
├── sql注入基础训练一.doc
├── sql注入基础训练二.doc
├── sql注入盲注训练一.doc
├── sql注入盲注训练二.doc
├── url重定向基础训练.doc
├── xxe漏洞学习.doc
├── 反射型xss基础训练一.doc
├── 反射型xss基础训练二.doc
├── 命令注入基础训练一.doc
├── 命令注入基础训练二.doc
├── 垂直越权基础训练.doc
├── 存储型xss基础训练一.doc
├── 存储型xss基础训练二.doc
├── 宽字节注入详解一.doc
├── 宽字节注入详解二.doc
├── 弱加密算法基础训练.doc
├── 文件上传基础训练一.doc
├── 文件上传基础训练二.doc
├── 文件下载基础训练.doc
├── 文件删除操作基础训练.doc
├── 本地文件包含基础训练一.doc
├── 本地文件包含基础训练二.doc
├── 水平越权基础训练.doc
├── 突变型xss基础训练.doc
├── 远程文件包含基础训练一.doc
└── 远程文件包含基础训练二.doc
└── 项目说明
├── Phalcon框架资料.md
├── docker api未授权访问.md
├── 数据库设计文档.md
├── 猎鹰安全.xmind
├── 账号信息.md
└── 部署文档.md
/.gitignore:
--------------------------------------------------------------------------------
1 | /cache/
2 | /config/development/
3 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # www.lysec.org
2 | # 效果预览
3 | 
4 | 
5 | 
6 | ## 技术选型 ##
7 |
8 | 后端部分主要采用PHP,以性能为主,采用[Phalcon](https://phalconphp.com/zh/)框架,利用[composer](https://getcomposer.org/)管理依赖。
9 |
10 | 前端部分先采用bower管理依赖。
11 |
12 | ## 项目说明 ##
13 | 项目结构在platform目录下
14 | ###### 注意在服务器做配置的时候public目录必须配置为入口目录
15 |
16 | ## 待解决问题 ##
17 | + 管理后台docker镜像拉去
18 | + 容器stop的时候不太稳定,有可能造成容易已经结束了,但是数据库container表并没有清理干净
19 | + 管理后台界面设计问题
20 | + 用户中心目前还是比较简单
21 | + docker镜像文件目前还在整理阶段,整理完成以后一起发布
22 | ## 安全问题 ##
23 | 因为此项目是关于docker的项目,所以在部署的时候注意docker api未授权访问。其他安全问题后续持续跟进
24 |
25 | ## 项目组介绍 ##
26 | ### 项目简介
27 | 此项目由CatTeam安全团队的开发组设计完成。主要为想学习安全的朋友提供一个简单直接的安全攻防在线实战平台。
28 | ### 项目组成员
29 | - mmc
30 | 项目负责人
31 | - 独步清风
32 | 后端开发
33 | - Elin
34 | 前端开发
35 | - 冰雪绒
36 | 前端开发
37 | - vv
38 | UI
39 | ## 其它问题 ##
40 | + 问题反馈
41 | + 加入我们
42 | + 合作开发
43 | ## 问题反馈 ##
44 | + QQ: 2022137639
45 | + 微信:wx_1109
46 |
47 |
--------------------------------------------------------------------------------
/image/微信.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CAT-Team-mmc/lysec/a2c1b437c9cac54be58ea9a6ec1778d49d7bb51f/image/微信.jpg
--------------------------------------------------------------------------------
/image/支付宝.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CAT-Team-mmc/lysec/a2c1b437c9cac54be58ea9a6ec1778d49d7bb51f/image/支付宝.jpg
--------------------------------------------------------------------------------
/image/效果图展示图.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CAT-Team-mmc/lysec/a2c1b437c9cac54be58ea9a6ec1778d49d7bb51f/image/效果图展示图.gif
--------------------------------------------------------------------------------
/image/效果展示.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CAT-Team-mmc/lysec/a2c1b437c9cac54be58ea9a6ec1778d49d7bb51f/image/效果展示.gif
--------------------------------------------------------------------------------
/image/效果展示1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/CAT-Team-mmc/lysec/a2c1b437c9cac54be58ea9a6ec1778d49d7bb51f/image/效果展示1.gif
--------------------------------------------------------------------------------
/platform/.bowerrc:
--------------------------------------------------------------------------------
1 | {
2 | "directory": "public/assets/bower"
3 | }
--------------------------------------------------------------------------------
/platform/.gitignore:
--------------------------------------------------------------------------------
1 | composer.lock
2 | phpunit.xml
3 | vendor
4 | .idea
5 | app/cache
--------------------------------------------------------------------------------
/platform/.htaccess:
--------------------------------------------------------------------------------
1 |
This page is located at views/index/show401.volt
This page is located at views/index/show404.volt
This page is located at views/index/show503.volt
Please enable rewrite module on your web server to continue
--------------------------------------------------------------------------------
/platform/public/.htaccess:
--------------------------------------------------------------------------------
1 | AddDefaultCharset UTF-8
2 |
3 |
wangEditor2.0 支持 IE8 浏览器
20 |请输入内容...
23 |wangEditor2.0 支持 IE8 浏览器
20 |请输入内容...
23 |