成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

如何通過注入SQL語句盜取網站管理權限

運維 數據庫運維
筆者向破解了一個活動網站的同學請教了破解原理和破解步驟,并自己加以整理,成為了這篇文章。當然,隨意破解他人網站不好,但是也是一個警鐘,可以引以為戒。

我們知道網站后臺需要驗證用戶的輸入, 如果不這樣做, 用戶甚至可以輸入一些SQL語句操作后臺的數據庫, 這么好玩的事情一直沒有真正體驗過. 前幾日學校搞了一個"你最喜歡的輔導員"投票活動, 網站估計是給某個學生團隊做的, 結果經同學破解了這個網站的管理員帳號和密碼, 我遂向他請教了原理, 也了解了他破解的步驟, 自己又實踐了一遍. 感謝經同學, 沒有他我就不知道這些, 也不可能有這篇博客.

本文破解網站的網址是http://xgc.nuist.edu.cn/vote/vote_login.asp. 可能活動過后, 這個網址就打不開了, 也有可能寫這個網站的同學意識到了漏洞的嚴重性, 并進行了改正, 那么本文的內容就不適用于這個網站了.我整理了詳細的破解過程跟大家分享, 文中的邏輯比較強, 需要讀者耐心的看.  但文本講述的是破解步驟, 是一般思路, 如果您有疑問, 請留言, 我們交流討論 :)

一  網站是否存在SQL注入漏洞

網站一般包含一張用戶表(用戶名和密碼)和一張管理員信息表(管理員名稱和密碼), 輸入用戶名和密碼之后, 一般做法是后臺都會執行一條SQL語句, 查詢有沒有對應的用戶和密碼, 比如SELECT * FROM SomeTable WHERE UserName = '$UserName' AND pwd = '$pwd', 如果這條語句返回真, 那么登錄操作就完成了.

試想一下如果在學號和密碼文本框中輸入'or'='or', 并提交的話, 上面提到的SQL語句就變成了SELECT * FROM SomeTable WHERE UserName = ''or'='or'' AND pwd = ''or'='or'', 這個語語句變成了一個邏輯表達式, 表達式包含幾段, 分別為:

  1. SELECT * FROM SomeTable WHERE UserName = ''    (假)   
  2. or   
  3. '='    (真)   
  4. or   
  5. ''    (假)   
  6. and 
  7. pwd = ''    (假)   
  8. or   
  9. '='    (真)   
  10. or   
  11. ''    (假) 

最后整個邏輯表達式為0|1|0&0|1|0, 這個結果為真(在執行到"0|1|..."的時候整個表達式省略號中的就不計算了, 因為"或"前面已經是真), 因此可以登錄成功, 事實上也登錄成功了.

二  破解后臺數據庫的原理

在用戶名和密碼的文本框中輸入'or'='or', 截至上面所示的第2步, 表達式值為真, 因為后面緊接了一個"或", 所以無論在這后面的表達式是什么, "真或者假""真或者真"都是為真的. 關鍵就是'or'='or'中間的那個'=', '='表示一個字符, 永遠為真. 如果我們將這個'='改成某個SQL表達式, 如果這個表達式為真, 那么整個表達式就為真.

后面的幾個步驟要求用戶名和密碼文本框中都輸入同樣的文本, 原因是: 后臺的語句格式可能是SELECT * FROM SomeTable WHERE UserName = '$UserName' AND pwd = '$pwd', 也有可能是SELECT * FROM SomeTable WHERE pwd = '$pwd' AND UserName = '$UserName', 無論哪一種情況, 只要用戶名和密碼都輸入的文本是一樣的, 只要文本中包含的SQL表達式為真, 那么整個表達式就為真. 這樣寫帶來的另一個好處是復制粘貼很方便.

通過寫一些SQL表達式來一次一次的測試出數據庫里的內容.

三  獲取后臺數據庫的表名

如果將表達式替換為(SELECT COUNT(*) FROM 表名)<>0, 這個表達式用來獲取一個表中有多少條記錄, 需要做的就是猜這個表名是什么, 猜中了的話, 那么這個表中的記錄條數肯定就不會等于0, 那么這個表達式的值就是真的. 常用的表名也就是那么一些, 一個個的代進去試, 最后發現有個叫做admin的表, 它的字段不為空. 很顯然, 這個表是用來存放管理員信息的.

四  獲取后臺數據庫表的字段名

現在已經知道這個表叫做admin了, 接下來想辦法得到這個表中的字段.

把表達式替換成(SELECT COUNT(*) FROM admin WHERE LEN(字段名)>0)<>0, 這個表達式用來測試admin這個表中是否包含這個字段. LEN(字段名)>0表示這個字段的長度大于0, 在這個字段存在的情況下, LEN(字段名)>0是始終為真的. 如果包含的話這個字段的話, 整條SELECT語句返回的數字肯定不為0, 也就是說整個表達式為真, 從而得到字段名.

按照這樣的方法, 靠猜共得出了三個很關鍵的字段:id, admin, pass.

五  獲取字段的長度

目前已得到的信息是有個admin表, 表中有id, admin, pass字段. 后臺中存儲用戶名和密碼, 常規做法是存儲它們進行MD5加密后的值(32位), 現在測試一下是不是這樣.

把表達式替換為(SELECT COUNT(*) FROM admin WHERE LEN(字段名)=32)<>0, 將admin和pass代進去結果是真, 說明后臺存儲管理員帳號和密碼用的是加密后32位的字段.

六  獲取管理員帳號和密碼

MD5加密后的字符串包含32位, 且只可能是由0-9和A-F這些字符組成.

1. 獲取管理員帳號

將表達式改成(SELECT COUNT(*) FROM admin WHERE LEFT(admin,1)='A')>0, 意思是我猜測某個adimin帳號的第一個字符是A, 如果成功則表達式成立. 失敗的話, 把A換成0-9和B-F中的任意字符繼續試, 知道成功. 如果成功了, 我再繼續猜這個帳號的第二個字符, 假如第一個字符是5, 我猜測第二個字符是A, 那將表達式改成(SELECT COUNT(*) FROM admin WHERE LEFT(admin,2)='5A')>0. 可以發現字符串中LEFT()函數中的1變成了2, 另外'5A'代碼左邊兩個字符是5A, 其中5已經確定下來了. 就這樣重復不斷的猜, 直到得到整個32位的MD5加密后的字符串.

2. 獲取該帳號對應的的id

為什么需要獲取該帳號對應的id? 原因如下: 按照上一條是可以得到帳號和密碼的, 但一張表中可以有若干個管理員帳號和密碼, 怎么對應起來呢? 需要通過id. 一個id對應一條記錄, 一條記錄只有一對匹配的帳號和密碼.

將表達式改成(SELECT COUNT(*) FROM admin WHERE LEFT(admin,1)='5' AND id=1)>0, 上一條假設了某帳號第一個字符是5, 只要這個表達式中的"AND id = 1"正確, 那么就可以得知該帳號的id是1. 如果不是1, 換成其它的數字一個個的試一試.

3. 獲取帳號對應的密碼

現在已經猜出了某管理員的帳號, 并且知道對應的id是多少(假設得出來是4), 現在只要得到該條記錄中記錄的密碼是什么. 同理, 將表達式改成(SELECT COUNT(*) FROM admin WHERE LEFT(pass,1)='A' AND id=4)>0, 注意id已經是知道了的4, 現在要一個個的猜pass中從第1個到第32個字符是什么, 方法同"獲取管理員帳號"方法. 最后可以得到一個32位的MD5加密后的字符串(密碼).

*注: 如果嫌手工得到每個字符是什么太麻煩, 可以自己用C#寫一個程序, 模擬一下登錄, 通過控制一個循環, 可以很快得到結果.

七  將MD5加密后的帳號和密碼轉成明文

網上有一些網站數據庫里存儲了海量(幾萬億條)的MD5加密后的暗文對應的明文, 只需輸入你需要查找的MD5加密后的字符串就可以查看到明文是什么.

八  尋找網站管理員登錄界面

如果找不到管理員登錄界面, 就算現在已經有了管理員的帳號和密碼同樣也登錄不了. 針對這個網站, 提供給普通學生登錄的地址是http://xgc.nuist.edu.cn/vote/vote_login.asp.

猜猜也知道管理員的登錄地址很可能是http://xgc.nuist.edu.cn/vote/login.asp, 事實上就是它.

九  登錄網站后臺

十  總結

回頭看看這個網站安全性...

  1. 如果它在用戶輸入帳號密碼之后進行一下驗證, 或許后面的事情就不會發生...
  2. 如果數據庫的表名不是這么呆瓜的話, 或許后面的事情就不會發生...
  3. 如果數據庫的字段名不是這么呆瓜的話, 或許后面的事情就不會發生...
  4. 如果管理員登錄地址不是這么呆瓜的話, 或許后面的事情就不會發生...

如何驗證用戶輸入? 最簡單的方法是過濾掉用戶輸入的'符號. 除此方法之外, 可以以參數的方式進行數據庫查詢, 如SELECT * FROM SomeTable WHERE UserName = '" & UserName & "' AND pwd = '" & pwd & "', 而不是直接的把用戶輸入的信息直接插入到數據庫查詢語句中. 如果想增加破解難度的話, 還可以在登錄的時候要求輸入驗證碼等等...

地球太危險了. 上面寫的都是查詢語句來獲取想得到的信息, 如果輸入的是一個DROP TABLE命令, 后果不堪設想! 以后自己做網站的時候, 一定要注意這些問題.

原文鏈接:http://www.cnblogs.com/technology/archive/2011/04/16/2018350.html

【編輯推薦】

  1. SQL Server 2008中的代碼安全
  2. SQL Server 2005數據庫SA的相關安全性設置
  3. SQL Server與Oracle數據庫在安全性上的異同
  4. Sql server安全設置九大措施
  5. sql server安全的兩層模型
責任編輯:艾婧 來源: 博客園
相關推薦

2017-01-17 15:29:59

2011-09-02 11:39:53

2021-12-19 07:23:54

黑客WordPress網絡攻擊

2022-07-20 17:41:46

漏洞黑客網絡攻擊

2011-08-24 13:24:52

2021-04-22 21:58:08

Windows 10Windows微軟

2017-06-14 14:33:58

2011-10-28 10:17:11

2011-10-28 09:03:39

2009-08-06 08:42:42

Windows 7文件管理員權限

2010-09-27 11:17:31

2009-03-14 16:50:38

網站安全meter程序

2012-12-19 10:36:06

2023-07-03 12:03:08

2022-03-10 15:11:46

分布式數據管理鴻蒙

2021-07-27 11:01:02

Windows

2010-09-13 14:03:58

2023-12-30 08:16:34

Django權限控制

2023-10-18 11:15:28

2018-03-05 21:48:10

IoT設備AWS IoT管理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美多人在线 | 国产精品美女www爽爽爽 | cao视频| 久久青青| 亚洲欧美成人 | 欧美日韩国产中文字幕 | 99热碰 | 日韩欧美精品一区 | 久久久男人的天堂 | 国产高清免费视频 | 日本精品视频 | 国产在线观看一区二区 | 亚洲美女网站 | 91亚洲国产| 欧美日韩亚洲国产综合 | 国产精品地址 | 欧美日韩一区在线 | 91精品久久久久久久久中文字幕 | 欧美日韩中文字幕在线 | 99成人在线视频 | 中文字幕在线观看一区二区 | av在线亚洲天堂 | 日韩在线欧美 | 福利视频亚洲 | 久久国产电影 | 成人三级av | 亚洲3级| 欧美精品乱码99久久影院 | 日韩在线视频免费观看 | 国产欧美精品一区二区色综合朱莉 | 福利网站在线观看 | 亚洲视频欧美视频 | 国产一区影院 | 久草在线在线精品观看 | 鸳鸯谱在线观看高清 | 国产韩国精品一区二区三区 | 99日韩| 久久久久国产精品一区二区 | 国产美女视频一区 | 欧美亚洲在线 | 中文字幕在线观看精品 |