Web App安全入門


Web App是什么

Web App 是運行與網絡和標准瀏覽器上,基於網頁技術開發實現特定功能的應用。

前端:HTML CSS JavaScript

后端:Java Python PHP

數據庫:Mysql Oracle

容器:IIS,Apache Nginx

協議:TCP DNS HTTP HTTPS

 

訪問過程如圖:

簡單的web應用代碼

import socket

def handleRequest(client):
    buf = client.recv(2048)
    print(buf)
    msg = "HTTP/1.1 200 OK\r\n\r\n"
    msg1 = "Hello World!"
    client.send(('%s' % msg).encode())
    client.send(('%s' % msg1).encode())

if __name__ == "__main__":
    ip_port = ('0.0.0.0', 8000)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(ip_port)
    sock.listen(5)

    while True:
        conn, addr = sock.accept()
        handleRequest(conn)
        conn.close()

我們請求一下本地的8000端口,是可以正常返回的。返回內容如下:

b'GET / HTTP/1.1\r\nHost: 127.0.0.1:8000\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\nAccept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\r\nAccept-Encoding: gzip, deflate\r\nDNT: 1\r\nConnection: keep-alive\r\nUpgrade-Insecure-Requests: 1\r\n\r\n'
b'GET /favicon.ico HTTP/1.1\r\nHost: 127.0.0.1:8000\r\nUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0\r\nAccept: image/webp,*/*\r\nAccept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2\r\nAccept-Encoding: gzip, deflate\r\nDNT: 1\r\nConnection: keep-alive\r\n\r\n'

什么是web框架

web應用框架是一種開發框架,用來支持動態網站、網絡應用程序及網絡服務的開發,其類型有基於請求的和基於組件的兩種框架。

有助於網頁開發時共通性活動的工作負荷,例如許多框架提供數據庫訪問接口,標准樣板和會話管理等,可提升代碼的可在用性。

 

我們基於Django進行搭建和講解web框架

Django是一個開源的web應用框架。由Python編寫。

 1.安裝Django

pip install django

2.創建項目

django-admin startproject mysite

3.講解目錄結構

 

 

  •  manage.py  是Django管理本地項目的命令行工具
  • __init__.py 是一個普通的包初始化模塊
  • setting.py 是項目的配置文件,例如數據庫配置、時間、語言等
  • urls.py 是用戶網址到代碼的映射關系
  • wsgi.py 接口信息用於服務器部署

4.運行

python manage.py runserver 0.0.0.0:8001

 

 

 5.創建app

django-admin startapp firstapp

 

 

 6.修改配置文件

修改mysite/setting.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'firstapp',
]

把firstapp添加到INSTALLED_APPS,使得能夠索引到我們的應用

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR,'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

修改TEMPLATES 使得能夠訪問到我們的前端頁面文件

ALLOWED_HOSTS = ['[::1]']

修改ALLOWED_HOSTS使得其他外部IP訪問

7.添加執行層代碼

修改firstapp/views.py

from django.shortcuts import render

# Create your views here.
def firsthtml(request):
    #渲染頁面,並呈現給用戶
    return render(request,'index.html')

功能是直接渲染並返回靜態文件

修改mysite/urls.py

from firstapp import views

urlpatterns = [
    path(r'^admin/', admin.site.urls),
    path(r'^helloworld', views.firsthtml),
]

使訪問地址直接連接到執行代碼

創建模板文件

在項目根目錄下創建templates目錄,並創建一個index.html文件,內容為hello

 

 

 8.初始化數據庫,並創建超級管理員

python manage.py makemigrations
python manage.py migrate

創建管理員賬號

python manage.py createsuperuser

 協議基礎

HTTP協議怎么工作

HTTP協議定義 了WEB客戶端如何從Web服務端請求Web頁面,以為Web服務端如何把頁面傳給服務端。

  • 客戶端連接Web服務器
    • 一個HTTP客戶端,通常為瀏覽器,與Web服務器的HTTP端口(通常80)建立一個TCP套接字連接
  • 發送HTTP請求
    • 通過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭、空行和請求數據4部分組成
  • 服務器接收請求並返回HTTP響應
    • Web服務器解析請求,定位請求資源,服務器將資源副本寫到TCP套接字中,由客戶端讀取。一個響應頭由狀態行,響應頭、空行(請求空行)和響應數據(請求體)4部分組成
  • 釋放TCP連接
    • 若connection模式為close,則服務端主動關閉TCP連接,客戶端被動關閉連接,釋放TCP連接。
    • 若connection模式為keepalive,則連接會保持一段時間,該時間內可以繼續接受請求。
  • 瀏覽器解析HTML內容

HTTP請求方法和響應代碼

HTTP請求方法
方法 說明 支持的HTTP協議版本
GET 獲取資源 1.0、1.1
POST 傳輸實體主體 1.0、1.1
PUT 傳輸文件 1.0、1.1
HEAD 獲取報文頭部 1.0、1.1
DELETE 刪除文件 1.0、1.1
OPTIONS 詢問支持的方法 1.1
TRACE 追蹤路徑 1.1
CONNECT 要求用隧道協議連接代理 1.1
LINK 建立和資源之間的聯系 1.0
UNLINK 斷開連接關系 1.0
響應代碼說明
狀態碼 類別 原因短語
1XX Informational(信息性狀態碼) 接受的請求正在處理
2XX Success(成功狀態碼) 請求正常處理完畢
3XX Redirection(重定向狀態碼) 需要進行附加操作以完成請求
4XX Client Error(客戶端錯誤狀態碼) 服務器無法處理請求
5XX Server Error() 服務器處理請求錯誤

WEB安全的起源

Web應用全都是建立在HTTP協議基礎上的,是對HTTP協議的實際應用。

Web應用在實現HTTP協議的過程中,沒有做足夠充足強大的約束,導致攻擊者能夠利用其中的薄弱環節進行攻擊

 Web滲透工具介紹

1、BURPSUITE

BurpSuite是用於攻擊Web應用程序的集成平台框架。它包含很多Web安全相關工具,也同時設計了接口、滿足了安全人員自行擴展程序功能的需求。

功能:

  • Proxy:是一個攔截HTTP/S的代理服務器,作為一個在瀏覽器和目標應用程序之間的中間人,允許你攔截,查看,修改在兩個方向的原始數據流
  • Intruder: 是一個定制的高度可配置的工具,對web程序進行自動化攻擊。如:枚舉標識符,收集有用的數據,以及使用fuzzing技術探測常規漏洞
  • Repeater: 是一個靠手動操作來補發單獨的HTTP請求,並分析應用程序響應的工具
  • Sequencer: 是一個用來分析那些不可預知的應用程序會話令牌和重要數據項的隨機性的工具
  • Decoder: 是一個進行手動執行或對應用程序數據者只能解碼編碼的工具
  • Comparer: 是一個實用的工具,通常是通過一些相關請求和響應得到兩個數據的一個可視化“差異”

2、curl

一個功能強大靈活的網絡工具,使用url的形式傳輸數據,支持HTTPS,IMAP,POP3,RTSP,SCP,FTP,TFTP,SMTP等協議。

多用於抓取網頁、網絡監控等方面,解決開發及調試中的問題

 

 查看同信過程

curl -v www.baidu.com

3、Postman

Postman 是一款功能強大的網頁調試與發送網頁HTTP請求的工具

不僅可以調試簡單的CSS/HTML/腳本等簡單的網頁信息,它幾乎可以發送所有類型的HTTP請求

 

4、Hackbar

Firefox瀏覽器插件,包含一些常用的工具(SQL injection,XSS,加密)可以利用它快速構建一個HTTP請求,或者用它快速實現某種算法,多用於手工測試Web漏洞。

5、Wappalyzer

是一款分析網站所用的技術棧的插件,火狐瀏覽器附件搜索即可安裝

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM