设为首页 收藏本站
查看: 551|回复: 0

[经验分享] SQL資料隱碼攻擊

[复制链接]

尚未签到

发表于 2016-11-12 01:01:16 | 显示全部楼层 |阅读模式
SQL攻擊(SQL injection,中国大陆称作SQL注入攻击,台湾称作SQL资料隐码攻击),简称隱碼攻擊,是發生於應用程式之資料庫層的安全漏洞。簡而言之,是在輸入的字串之中夾帶SQL指令,在設計不良的程式當中忽略了檢查,那麼這些夾帶進去的指令就會被資料庫伺服器誤認為是正常的SQL指令而執行,因此遭到破壞。
有部份人認為SQL隱碼攻擊是只針對Microsoft SQL Server而來,但只要是支援批次處理SQL指令的資料庫伺服器,都有可能受到此種手法的攻擊。

原因

在應用程式中若有下列狀況,則可能應用程式正暴露在SQL Injection的高風險情況下:

在應用程式中使用字串聯結方式組合SQL指令。
在應用程式連結資料庫時使用權限過大的帳戶(例如很多開發人員都喜歡用sa(內建的最高權限的系統管理員帳戶)連接Microsoft SQL Server資料庫)。
在資料庫中開放了不必要但權力過大的功能(例如在Microsoft SQL Server資料庫中的xp_cmdshell延伸預存程序或是OLE Automation預存程序等)
太過於信任使用者所輸入的資料,未限制輸入的字元數,以及未對使用者輸入的資料做潛在指令的檢查。
[编辑] 作用原理
SQL命令可查詢、插入、更新、刪除等,命令的串接。而以分號字元為不同命令的區別。(原本的作用是用於SubQuery或作為查詢、插入、更新、刪除……等的條件式)
SQL命令對於傳入的字串參數是用單引號字元所包起來。《但連續2個單引號字元,在SQL資料庫中,則視為字串中的一個單引號字元》
SQL命令中,可以夾帶註解《連續2個減號字元——後的文字為註解,或“/*”與“*/”所包起來的文字為注解》
因此,如果在組合SQL的命令字串時,未針對單引號字元作取代處理的話,將導致該字元變數在填入命令字串時,被惡意竄改原本的SQL語法的作用。
[编辑] 例子
某個網站的登入驗證的SQL查詢代碼為

strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"
惡意填入

userName = "' OR '1'='1";


passWord = "' OR '1'='1";
時,將導致原本的SQL字串被填為

strSQL = "SELECT * FROM users WHERE (name = '' OR '1'='1') and (pw = '' OR '1'='1');"
也就是實際上运行的SQL命令會變成下面這樣的

strSQL = "SELECT * FROM users;"
因此達到無帳號密碼,亦可登入網站。所以SQL隱碼攻擊被俗稱為駭客的填空遊戲。

[编辑] 可能造成的傷害
資料表中的資料外洩,例如個人機密資料,帳戶資料,密碼等。
資料結構被駭客探知,得以做進一步攻擊(例如SELECT * FROM sys.tables)。
資料庫伺服器被攻擊,系統管理員帳戶被竄改(例如ALTER LOGIN sa WITH PASSWORD='xxxxxx')。
取得系統較高權限後,有可能得以在網頁加入惡意連結以及XSS。
經由資料庫伺服器提供的作業系統支援,讓駭客得以修改或控制作業系統(例如xp_cmdshell "net stop iisadmin"可停止伺服器的IIS服務)。
破壞硬碟資料,癱瘓全系統(例如xp_cmdshell "FORMAT C:")。
[编辑] 避免的方法
在設計應用程式時,完全使用參數化查詢(Parameterized Query)來設計資料存取功能。
在組合SQL字串時,先針對所傳入的參數作字元取代(將單引號字元取代為連續2個單引號字元)。
如果使用PHP開發網頁程式的話,亦可開啟PHP的魔術引號(Magic quote)功能(自動將所有的網頁傳入參數,將單引號字元取代為連續2個單引號字元)。
其他,使用其他更安全的方式連接SQL資料庫。例如已修正過SQL資料隱碼問題的資料庫連接元件,例如ASP.NET的SqlDataSource物件或是 LINQ to SQL。
使用SQL防注入系统。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-298904-1-1.html 上篇帖子: Monitoring the Performance of Your Tomcat Application Server Using JavaMelody 下篇帖子: sql反模式分析1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表