999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于容器技術的UnionSQL注入課程實驗題設計

2025-09-28 00:00:00向訓呂波張振馬思夢徐濤
現代信息科技 2025年16期

中圖分類號:TP393

文獻標識碼:A 文章編號:2096-4706(2025)16-0163-05

Design of Union SQL Injection Course Experimental Questions Based on Container Technology

XIANG Xunwen, LYU Bo, ZHANG Zhen, MA Simeng, XU Tao (Huizhou University,Huizhou 516o07,China)

Abstract:This paper presents an experimental question design scheme for Union SQL injection course based on container technology.Ittargets teissuesencounteredintaditionalteachngmodes,includingtecomplexityofsetingupenioments, inadequateteaching effectivenessanddiffcultis inhomeworkassessment.Bythoughtfullycreatingasetofhghlytargeted experimental questions,studentscan progressivelyacquire keysteps suchasbypasing login forms,determining thenumber of columns,and injecting databasenames in Union SQLinjectionthrough practice.Theuseofcontainer technology facilitates therapidcreationofisolatedpracticeenvironmentsforeach student,ensuringthatthereisnointerferencebetweendiferent environments.Furthermore,eachstudent'sanswer tothesamequestionisunique,andthequestions areinfused withrandom elements.This guarantees thatthe steps needed to solve thesamequestionvaryforeach student, herebyefectivelydiminishing the chances of cheating.

Keywords:containter;CTF; SQL injection; experimental questior

0 引言

在面向網絡空間安全專業學生的SQL注入教學中,通常首先講解UnionSQL注入(聯合SQL注入),涉及的內容包括SQL查詢語句的基礎語法、SQL注入的原理、Union關鍵詞的用法、字段數的判斷、數據庫名查詢、表名查詢、字段名查詢、表中數據查詢等,步驟較多,完整講解和演示這些內容需要花費大量時間[1-3]。如果先將所有知識講解完畢,再讓學生動手操作,初學者很難一次性完全掌握,動手實踐時往往無從下手。

傳統的Union SQL 注入教學一般使用sqli-labs 平臺,學生需要花費大量時間在本機搭建環境,且sqli-labs平臺題目眾多,對初學者而言針對性不足。而傳統的實驗報告形式的課程考核,無法很好地體現學生的實際動手操作能力,還容易出現學生抄襲作業的現象,教師的作業批改也需要耗費大量時間。

CTF(CaptureTheFlag)競賽又稱奪旗賽,是網絡空間安全專業非常重要的一類競賽,將CTF競賽題型引入網絡安全類課程的教學中,可以提升學生的學習積極性和學習后的成就感[47],并有效解決上述問題。本文使用GZCTF這一開源的CTF平臺,可在服務器上方便地搭建該平臺,使用自建的GZCTF平臺進行實驗教學,最關鍵的是設計出針對性強、能夠進行有效考核的實驗題。

1 相關技術介紹

1.1 CTF競賽

CTF競賽中,參賽選手對題目給出的環境進行分析、滲透攻擊,最終獲取Flag(一段文本,即題目的答案),將Flag提交到CTF平臺即可得分,一場CTF競賽通常包含多道賽題,CTF平臺上可查看所有參賽選手的總得分和排名。

1.2 容器技術

容器技術將軟件運行的依賴項打包在容器鏡像中,只需使用對應的容器鏡像,軟件就能正確運行,解決了開發環境與部署環境可能不一致的問題,在保持軟件運行性能的前提下,提高了軟件部署的效率[8-10]。此外,容器技術將軟件可獲取的計算機資源限制在特定范圍內,增強了軟件運行的安全性。

在使用GZCTF平臺時,若將題目配置成容器形式,那么每個學生開啟的每道題都運行在獨立的容器中,互不影響,且平臺會為每個題目對應的容器生成隨機的Flag,也就是說,對于同一道題,不同學生需要提交的答案各不相同,這在一定程度上避免了學生作弊的情況。

2 設計思路

為了解決傳統教學中的問題,本文將UnionSQL注入的步驟拆分成幾個知識點,每個知識點設計更具針對性的實驗題。在教學時,先講解完一個知識點,再讓學生動手實操對應知識點的實驗題,之后再進行下一個知識點的教學。因此,相關知識點的實驗題設計至關重要,首先,實驗題必須與對應的知識點強相關,盡可能少地涉及無關的其他知識,使學生動手操作時,可以更加專注于該知識點的練習和理解;其次,實驗題在用于對學生的課程考核時,為更大程度地防止學生抄襲作業,應設計更多的隨機性,如每個學生做題的環境中查詢語句的字段數、數據庫名、表名、字段名、表中數據都可能不同,這樣學生就不能直接使用其他同學的SQL語句,要求學生理解SQL注入的原理,至少知道修改SQL語句的哪些部分,以及如何找到SQL語句中的數據庫名、表名、字段名、表中的數據。

課程實驗平臺搭建在學校ARM64架構的服務器上,平臺使用GZCTF,GZCTF平臺有官方發布的ARM64的容器鏡像,可直接使用該鏡像運行GZCTF平臺。每個題目都需要對應專屬的題目容器鏡像,SQL注入相關的題目一般使用的環境包含三部分:PHP用于運行網站的后端、MySQL用于存儲數據、Nginx用于做反向代理。這里使用開源的基礎環境,網址為 https://github.com/CTFTraining/base_image_nginx_mysql_php_73.git,該項目已集成了上述三部分,但官方只提供了X86架構的容器鏡像,如果需要在ARM64架構的服務器運行,需要使用該項目的鏡像源碼構建ARM64架構的容器鏡像。使用該基礎鏡像,一般需要定制flag.sh和網站源碼,基于該基礎鏡像的容器在啟動時,會運行flag.sh腳本文件,該腳本文件可以用來做一些網站的初始化工作,如保存實驗平臺傳入的flag、向數據庫中初始化一些題目需要的數據等。

3 題目設計

3.1 登錄框繞過

登錄框繞過是理解SQL注入原理的一個簡單而直觀的示例,如圖1所示,為用于該題容器鏡像的flag.sh的內容:第1行表示該文件是shell腳本文件,若未指定運行該文件的程序,則使用/bin/sh運行該文件;第4行定義了一個函數,該函數從Linux內核獲取一個隨機的uuid值,對該值調用md5sum命令計算md5值,由于md5sum命令會同時打印md5值和文件名(此處操作的文件為標準輸入文件,在輸出時,文件名顯示為“-”),還需要使用awk命令截出md5sum命令輸出的第一列,即為需要的md5值,使用該md5值作為隨機長字符串(長度為32個字符);第10行,定義用戶名為username_跟上隨機長字符串;第13行,定義密碼為passwd_跟上隨機長字符串;第15行,運行MySQL客戶端命令,指定登錄MySQL服務器的用戶名為root,密碼為root,使用-e選項指定要執行的SQL語句,這里SQL語句首先檢查是否存在hzuctf數據庫,若不存在,則創建該數據庫,之后使用該數據庫,創建一個users表,該表包括id、username、passwd三個字段,最后向users 表中插入一行數據,該行數據中用戶名和密碼分別為第10行、第13行定義的隨機長字符串;第17行,使用 sed命令修改文件login.php,將實驗平臺生成的隨機flag字符串(即該題需要提交的答案,平臺在啟動題目容器時,自動為容器添加一個名稱為GZCTFFLAG的環境變量,其值為平臺生成的隨機flag字符串)以php變量的形式添加到文件login.php的第3行后面;第18、19行,清除GZCTF_FLAG環境變量的值,防止學生通過非預期方法獲取flag字符串。

"

如圖2所示,為該題目的網站,該網站會去users表中查詢用戶名和密碼,由于題目容器在啟動時初始化了一個用戶,該用戶的用戶名、密碼都是隨機長字符串,用戶在登錄時,無法猜測到網站的用戶名和密碼,也不可能通過弱密碼或暴力破解用戶名、密碼的方式來登錄。這時引導學生使用上課時講授的登錄框繞過的知識,怎么樣構造SQL語句來繞過用戶名、密碼的檢查。為了方便學生理解,題目網站中還顯示了網站后端使用的SQL語句,學生在輸入用戶名anyone’or 1=1#, 密碼為空,然后點擊“登錄”按鈕,根據網站提供的SQL語句,將用戶名、密碼填入后,得到最終的SQL語句為:“select* from users where username=’anyone’or 1=1# andpasswd=’’limit 0,1”,其中#在SQL語句中表示注釋符,其后都為注釋,username=’anyone’為假(數據庫中沒有名叫anyone的用戶,只有一個用戶名為隨機長字符串的用戶,這里的anyone可以改成其他字符串,不影響整條SQL語句的結果), 1=1 為真,假和真相或,結果為真,所以where后的條件始終滿足,最終可以查詢出users表中的用戶,登錄繞過成功,網站會顯示出該題的flag(即答案)。

"

通過登錄框繞過的實驗題,學生在動手實踐中更加深刻地理解了SQL注入的基本原理,為后續其他類型的SQL注入打好了基礎。

3.2 數據庫名注入

登錄框繞過類型的SQL注入雖然能夠巧妙地繞過登錄驗證,但其局限性在于無法直接獲取網站數據庫中的數據。為了深入挖掘數據,接下來需要講授如何利用UnionSQL注入攻擊來獲取數據庫信息,而獲取數據庫名是這一過程中的第一步。為了幫助學生更好地理解這個步驟,專門設計了一個實驗題來演示。

如圖3所示,該實驗題的容器flag.sh初始化腳本中包含了以下內容:第4行的genRandomStr函數用于生成一個長度為9個字符的隨機字符串;第10行定義了一個名為databaseName的變量,用來存儲隨機生成的數據庫名,其中的randomStr就是genRandomStr函數生成的隨機字符串;第12行利用databaseName變量的值作為名稱創建了數據庫,并在其中建立了users表,向表中插入了若干行用戶信息;第14行通過sed命令對題目網站源代碼進行修改,將隨機生成的數據庫名嵌入網站源代碼中;第15行在題目網站根目錄下創建一個文件,文件名即為databaseName變量的值,在這個文件中寫入了flag字符串(即答案)。

"

如圖4所示,這是該實驗題網站的源代碼。上述flag.sh初始化腳本會將隨機生成的數據庫名添加到源代碼的第3行后面。由于每個學生開啟的題目容器都是獨立的,并且都會運行flag.sh初始化腳本,因此每個學生題目環境中的數據庫名都是隨機的。這樣一來,每個同學解題時使用的payload(HTTP請求的內容)都不相同,在一定程度上有效避免了學生抄襲作業的情況。源代碼第10行提示學生傳入id參數,以查詢對應id的用戶信息;第12行是查詢用戶使用的SQL語句,其中的id變量即為學生通過HTTP請求傳入的id參數;第 16~18 行負責打印出查詢到的用戶的用戶名和密碼;第24行提示學生:“網站根目錄下有個以數據庫名命名的文件,fag就在這個文件里面”,所以要獲得答案,必須先獲取數據庫名。

"

學生可以通過將id參數設置為-1'unionselect1,2,database(#來獲取數據庫名。id參數中的-1表示去查詢一個不存在的id,得到的查詢結果為空;而select1,2,database(會查詢得到1、2和數據庫名。對這兩部分執行union操作后,結果為后者,網站會回顯查詢出來的第2、3個字段,即數字2和數據庫名。獲取到數據庫名之后,去訪問網站根目錄下以這個數據庫名命名的文件,獲取這個文件的內容,作為答案提交即可。

該題中,為防范作弊,每個學生做題時步驟中的數據庫名、最終的答案都是隨機的。

3.3 字段數的判斷

學生在使用select1,2,database(時,可能會對其中的字段數感到困惑。為了加深學生對字段數判斷方法的理解,新增一道實驗題。在上一題的基礎上,在容器初始化腳本fag.sh中添加了如圖5所示的代碼。這段代碼會生成一個名為randomColumns的變量,它的值由隨機數量(這里設置為 1~4 個)的“,1”字符串相連而成,表示新增字段查詢出來的結果都是1。之后,使用命令sed-i\"/TODO_RANDOM_COLUMNS/a \\mathbf { \Sigma } = \mathbf { \Sigma }\"randomColumns\";\"/var/www/html/index.php將randomColumns的值傳入網站源代碼中。在網站源代碼中,使用的SQL語句改為selectid,username,passwd\$random_columnsfromuserswhereid='\$id'limit O,1,其中id、username、passwd為固定的三個字段,\$random_columns為隨機數量的字段(這里設置為 1~4 個)。

"

學生在執行UnionSQL注入時,需要通過注入的方式來判斷字段數。可以使用orderby n ,其中 n 為字段數,分別使用1-n進行測試。若報錯,則說明不存在該字段數;若不報錯,則存在該字段數。假設查詢語句中,固定字段和隨機字段數一共6個,那么orderby6時不會報錯,而orderby7時會報錯。通過這種方法,學生可以判斷出一共有6個字段。之后,學生可以使用-1'unionselect1,2,3,4,5,6# 在網站上回顯數據,將第2個字段改為database(后,即可回顯數據庫名。

該題中,為防范作弊,每學生做題時步驟中的查詢用的字段數、數據庫名、最終的答案都是隨機的。

3.4 表名注入

在上一題的基礎上(隨機數據庫名、隨機SQL查詢語句中的字段數),新增了一道實驗題用于講解數據庫表名注入。在容器初始化腳本flag.sh中添加了代碼:調用genRandomStr函數,獲取一個長度為9個字符的隨機字符串,用來生成變量tableName,使用該變量的值作為表名創建一個新表,而題目網站查詢時用的表仍然是users表。該實驗題要求學生運用前兩題的知識,先判斷網站查詢用的字段數,再注入獲取到隨機數據庫名,然后利用表名注入方法,獲取到所有表名,其中就包括題目隨機生成的表名。在網站根目錄中,有一個文件以該隨機表名命名,獲取它的內容即為該題的答案。

該題中,為防范作弊,每學生做題時步驟中的查詢用的字段數、數據庫名、表名、最終的答案都是隨機的。

3.5 字段名注入

在上一題的基礎上(隨機數據庫名、隨機SQL查詢語句中的字段數、隨機表名),再新增了一道實驗題用于講解字段名的注入。在容器初始化腳本flag.sh中添加了代碼:調用genRandomStr函數,獲取一個長度為9個字符的隨機字符串,用來生成變量columnName,在創建以隨機表名命名的表時,使用該columnName變量的值作為其中一個字段名,而題目網站查詢時用的表仍然是users表。該實驗題要求學生運用前三題的知識,先判斷網站查詢用的字段數,再注入獲取到隨機數據庫名,之后注入獲取到隨機表名,再利用字段名注入方法,獲取隨機表名對應表的所有字段名,其中就包括隨機字段名。在網站根目錄中,有一個文件以該隨機字段名命名,獲取它的內容即為該題的答案。

該題中,為防范作弊,每個學生做題時步驟中的查詢用的字段數、數據庫名、表名、字段名、最終的答案都是隨機的。

3.6表中數據的注入

在上一題的基礎上(隨機數據庫名、隨機SQL查詢語句中的字段數、隨機表名、隨機字段名),再新增了一道實驗題用于講解表中數據的注入。在容器初始化腳本flag.sh中,向隨機表名的表中插入數據時,使用GZCTFFLAG環境變量的值(即為該題的答案)作為隨機字段名對應字段的值,而題目網站查詢時用的表仍然是users表。該實驗題要求學生運用前四題的知識,先判斷網站查詢用的字段數,再分別通過注入獲取到隨機數據庫名、隨機表名、隨機字段名,再使用獲取到的隨機表名、隨機字段名,直接從隨機表名的表中查詢隨機字段名對應的字段,查詢的結果中包含flag字符串(即答案)。

該題中,為防范作弊,每學生做題時步驟中的查詢用的字段數、數據庫名、表名、字段名、表中數據(即最終的答案)都是隨機的。

4結論

針對網絡空間安全專業中UnionSQL注入教學的不足,如學生理解困難、環境搭建費時、考核方式的局限性等,本文提出了一種新的教學方法。該方法引入CTF競賽題型,并采用GZCTF這一開源平臺進行實驗教學,通過將UnionSQL注入的教學內容拆解為多個小知識點,每個知識點都設計針對性的實驗題,并在題目中設置一定的隨機性,學生在學習過程中能夠逐步深入,先理解基本概念,再通過實踐操作鞏固所學知識。這種方法不僅提高了學生的學習積極性和動手能力,同時也有效防止了學生之間的抄襲行為,使課程考核更加公正和準確。

參考文獻:

[1]袁也,陸余良,趙家振,等.SQL注入漏洞挖掘技術研究[J].物聯網技術,2024,14(3): 86-89+92 業

[2]王安琪,楊蓓,張建輝,等.SQL注入攻擊檢測與防御技術研究綜述[J].信息安全研究,2023,9(5):412-422.

[3]劉洋,王慧玲,徐苗,等.基于SQL注入攻擊檢測綜述[J].計算機與網絡,2024,50(1):63-73.

[4]曾煌存.CTF競賽融入網絡安全課程教學的研究[J]網絡安全技術與應用,2024(6):90-92.

[5]胡忠旭,常鳳,徐小華,等.欠發達地區高校網絡安全人才培養研究—基于CTF競賽[J].云南民族大學學報:自然科學版,2024,33(5):666-670.

[6]曾煌存.CTF競賽融入網絡安全課程教學的研究[J]網絡安全技術與應用,2024(6):90-92.

[7]高瑩,張宗洋,伍前紅,等.基于CTF模式的信息安全數學基礎課程實驗教學改革[J].計算機教育,2023(3):5-8+13.

[8]張沛.Docker容器技術在高職院校中的應用[J].軟件,2024,45(9):181-183.

[9]陳應虎,艾傳鮮.基于Docker技術的跨平臺應用開發與實踐[C]//第39次全國計算機安全學術交流會.西安:中國計算機學會,2024:152-158.

[10]李慧春,梁楠,黃偉,等.基于Docker的計算機基礎實驗在線環境建設[J].吉林大學學報:信息科學版,2024,42(4):754-759.

作者簡介:向訓文(1991一),男,漢族,湖南邵陽人,助教,碩士,研究方向:網絡安全、軟件開發。

主站蜘蛛池模板: 欧美成人精品一级在线观看| 一本视频精品中文字幕| 国产香蕉97碰碰视频VA碰碰看| 一本大道视频精品人妻| 亚洲av中文无码乱人伦在线r| 免费毛片网站在线观看| 999精品视频在线| 国产精品美女在线| 亚洲国产成人超福利久久精品| 国产幂在线无码精品| 成年人午夜免费视频| 久草视频中文| 日韩av电影一区二区三区四区| 蜜臀AV在线播放| 国产免费精彩视频| 欧美日韩一区二区三| 999福利激情视频| 2021国产精品自产拍在线| 97视频免费在线观看| 日韩在线播放中文字幕| av在线无码浏览| 久久精品亚洲专区| 91免费观看视频| 免费一级毛片在线观看| 色哟哟精品无码网站在线播放视频| 人人爽人人爽人人片| 在线观看免费国产| 无码专区国产精品第一页| 国产麻豆91网在线看| 蜜臀av性久久久久蜜臀aⅴ麻豆| 亚洲天堂首页| 激情六月丁香婷婷四房播| h网站在线播放| 国产97视频在线| 欧美不卡视频在线观看| jizz在线观看| 亚洲色成人www在线观看| 精品91视频| 国产视频大全| 国产97公开成人免费视频| igao国产精品| 欧美激情第一欧美在线| 日韩欧美中文在线| 日本91视频| 欧美日韩v| 亚洲视频在线观看免费视频| 日韩欧美国产精品| 亚洲精品成人7777在线观看| 全部免费毛片免费播放| 91po国产在线精品免费观看| 国产在线观看一区精品| WWW丫丫国产成人精品| 免费看美女毛片| 999国产精品| 97视频精品全国免费观看| 日韩精品亚洲一区中文字幕| 无码精品国产dvd在线观看9久 | 色婷婷成人网| 中文字幕无线码一区| 无码一区18禁| 永久免费av网站可以直接看的 | 免费人成网站在线高清| 极品尤物av美乳在线观看| 亚洲av综合网| 久久国产精品77777| 99re精彩视频| 欧美日韩资源| 2022国产无码在线| 久久福利网| 香蕉eeww99国产在线观看| 人妻少妇久久久久久97人妻| 亚洲国产综合精品一区| 免费国产无遮挡又黄又爽| 久久人人爽人人爽人人片aV东京热| 国产白浆视频| 国产麻豆精品久久一二三| 无码有码中文字幕| 亚洲精品另类| 国产极品美女在线观看| 99久久99视频| 欧美成人影院亚洲综合图| 久久99国产视频|