版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Web安全课程设计
第八章命令执行点击添加文本点击添加文本点击添加文本点击添加文本目录01020304Java反序列化介绍Struts2介绍实战操作
命令执行介绍第十一章暴力破解点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行远程命令执行漏洞,攻击方式灵活,且攻击成功后一般返回继承了web组件(如apache,weblogic,tomcat等)权限的shell,危害相当严重。命令执行漏洞涉及很多的方面,大致可分为以下几类:网站应用,如asp,jsp,php编写的网站,没有对其使用的一些函数进行过滤,导致远程代码执行;web服务中间件,如jboss,weblogic,tomcat等负责提供解析网站程序的容器;数据库,提供数据存储的sqlserver,mysql,oracle等;客户端应用程序,即需要在用户主机上进行安装的.客户端程序,如浏览器,apk程序等;操作系统端,如linux,windows自身系统中存在的漏洞缺陷,没有合理的处理空指针,导致存在溢出,执行远程命令。本章只介绍web应用中存在的命令执行漏洞。由于开发人员编写源码,没有针对代码中可执行的特殊函数入口做过滤,导致客户端可以提交恶意构造语句,并交由服务器端执行。命令注入攻击中WEB服务器没有过滤类似system(),eval(),exec()等函数,是该漏洞攻击成功的最主要原因。命令执行介绍点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行我们接下来将使用DVWA平台来演示远程命令执行漏洞,在commandexecution模块中来测试这个远程命令执行漏洞,当输入一个IP地址之后,点击submit按钮,可以看到有返回数据,其中发送3个数据包,返回3个数据包,数据包没有丢失,说明本机tcp/ip协议正常通信,说明这个模块的功能可以正常使用。命令执行实战点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行当我们查看模块源代码时发现如下情况:命令执行实战Shell_exec()函数可以调用操作系统命令,返回多行数据,$target参数也没有进行有效性检查,在windows或linux操作系统中可以使用&&,|,||,;,&等连接符,在一个命令行中执行多条命令。A&&B:先执行命令A,成功之后再执行B。A||B:表示先执行命令A,不成功再执行命令B,命令A执行成功,则不再执行命令B。点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行在知道了系统命令可以连接执行之后,如果web应用程序没有过滤好输入,就变得相当危险,在应用程序运行权限非常高的情况下,服务器可被轻易获取权限。在CommandExcution模块中,输入“&&Command“,系统将会执行输入的Command命令,这就是命令执行漏洞。命令执行实战点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行代码执行PHP中提供了一个eval()的函数,“中国菜刀”中的PHP客户端就使用了这个函数<?phpeval($_POST[‘x’])?>。Eval()函数可以把字符串按照PHP代码来执行,换句话说就是可以动态地执行php代码,使用eval函数需要注意的是:输入的字符串必须是合法的PHP代码,且必须以分号结尾。Cmd.php中存在代码:<?phpeval($_POST[cmd]);?>命令执行实战使用相关的连接工具,可以成功获取系统权限。点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行动态函数调用PHP支持动态函数调用,代码如下:命令执行实战PHP解释器可以根据$fun函数值来调用对应的函数,当变量$fun的值为“A”时,那么$fun()对应的函数为A(),虽然这样给开发带来了极大的便利,但却存在安全隐患,输入URL:33/cmd2.php?fun=phpinfo,当$fun值为phpinfo时,$fun()函数对应的函数即为phpinfo()。访问此链接即可打印phpinfo页面。点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行可能有些同学会认为最多能执行一个phpinfo,并没有太多影响,这样的想法是错误的。例如:程序员还想给函数传递参数,代码可能如下:命令执行实战点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行当用户提交URL为:33/system.php?fun=system&par=cat/etc/passwd时,最终执行函数为:system(‘cat/etc/passwd’),这样就存在了远程命令执行漏洞命令执行实战点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行PHP函数代码执行漏洞在PHP中,代码执行漏洞出现较多,像preg_replace()、ob_start()、array_map()等函数都存在代码执行的问题,在此以array_map()函数为例说明,代码如下:命令执行实战Array_map()函数作用是返回用户自定义函数处理后的数组,现在输入URL:33/array_map.php?arr=phpinfo后,发现phpinfo代码已经被执行。点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行命令执行实战点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行什么是Struts2漏洞?Struts是Apache软件基金会(ASF)赞助的一个开源项目,通过采用JavaServlet/JSP技术,实现基于JavaEEWeb应用的MVC设计模式的应用框架,Struts2是Struts的下一代产品,是在Struts1和WebWork的技术基础上进行了合并的全新的Struts2框架。Struts2框架广泛应用于政府、公安、交通、金融行业和运营商的网站建设,作为网站开发的底层模板使用。Struts2漏洞,主要指的是J2EE开源框架struts2出现的命令执行漏洞,危害巨大,可导致远程执行任意系统命令,进而获取系统控制权,数据库控制权,导致信息泄露。所有使用struts2框架开发的系统都会受到影响。Struts2攻防对抗历史简要回顾。Struts2的代码执行问题最早要追溯到2010年,当时来自GoogleSecurityTeam的MederKydyraliev发现可以通过用unicode编码的形式绕过参数拦截器对特殊字符“#”的过滤,造成代码执行问题,官方漏洞编号S2-003,这也是最早的存在记录的一个structs2远程代码执行漏洞。对于第一个出现的structs2远程代码执行漏洞官方当时并没有意识到这已经打开了潘多拉的魔盒,通过传递非法参数绕过过滤调用OGNL表达式,这也就是后来多数的structs远程代码执行漏洞的利用流程。对于S2-003官方只是简单的用正则将含有”\u0023”的请求全部过滤掉,由于”\u0023”在传递的过程中被转义为”\\u0023”所以正则根本没有匹配上。导致漏洞的第一次修补实际上失败了。Struts2代码执行漏洞介绍点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行OGNL表达式可以调用java的静态方法,开发者后来也意识到命令执行的危害。后来OGNL上下文中一些命名空间中的属性,比如将#_memberAccess.allowStaticMethodAccess设置为true,#context["xwork.MethodAccessor.denyMethodExecution"]设置为false。但是通过unicde编码绕过过滤规则的问题依然存在。比如将”\u0023”换成八进制的“\43”,即可绕过官方当时的修复。后来官方终于意识到了问题的严重性,在过滤的时候更加严谨的改写了正则,过滤掉了出现\,@等字符的请求内容,官方修改的正则表达式如下。Struts2代码执行漏洞介绍修补后的正则虽然更为严谨但是问题依然存在。大概是在11年GoogleSecurityTeam的一位成员又提出了新的利用思路(CVE-2011-3923),借助action实例中的私有变量的set方法执行OGNL调用java静态方法执行任意命令。对于这个CVE的修复官方依然是通过正则过滤的方式来修复此问题,官方修复如下。点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行S2-032漏洞技术分析此次漏洞存在于struts2的动态方法引用功能。只要在struts2配置文件中开启该功能,就可能被利用。<constantname=”struts.enable.DynamicMethodInvocation”value=”true”/>如果我们请求http://localhost/index.action?method:OGNL的情况下,请求的OGNL表达式会被执行,造成命令执行。method后面跟的方法名会被struts2进行解析,代码位于DefaultActionMapper.java中。Struts2代码执行漏洞介绍点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行可以看到mapping.setMethod(key.substring(METHOD_PREFIX.length()));将我们传入的方法加入到map中。然后在DefaultActionInvocation.java中,被invokeAction引用。Struts2代码执行漏洞介绍点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行可以invokeAction首先获取方法字符串,然后调用ognlUtil.getValue来执行方法并获取方法结果。问题就出在传给ognl的methodName没有进行严格的过滤,尤其是没有过滤ognl关键字,从而造成命令执行。通过对比2.3.28和,可以发现修补的位置:Struts2代码执行漏洞介绍点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行可以在进行方法添加的时候,对传进来的方法进行了过滤,调用了cleanupActionName。cleanupActionName的定义如下:Struts2代码执行漏洞介绍其中allowedActionNames定义是protectedPatternallowedActionNames=Ppile(“[a-zA-Z0-9._!/\\-]*”);所以代码的意思是去除一切不在上述范围的字符。点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行Struts2漏洞检测工具有很多,但实现功能都大同小异,K8安全团队的这个检测程序是其中经典之一,通过这个工具,可检测的漏洞范围如下,操作也很简单,在目标地址栏处输入网站地址,再选择相应漏洞名称,点击获取信息,即可检查网站是否存在相关漏洞:Struts2代码执行漏洞介绍点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,类ObjectInputStream类的readObject()方法用于反序列化。下面是将字符串对象先进行序列化,存储到本地文件,然后再通过反序列化进行恢复的样例代码:Java反序列化代码执行漏洞介绍点击添加文本点击添加文本点击添加文本点击添加文本第八章命令执行序列化就是把对象转换成字节流,便于保存在内存、文件、数据库中;反序列化即逆过程,由字节流还原成对象。Java中的ObjectOutputStream类的writeObject()方法可以实现序列化,类ObjectInputStream类的readObject()方法用于反序列化。下面是将字符串对象先进行序列化,存储到本地文件,然后再通过反序列化进行恢复的样例代码:问题在于,如果Java应用对用户输入,即不可信数据做了反序列化处理,那么攻击者可以通过构造恶意输入,让反序列化产生非预期的对象,非预期的对象在产生过程中就有可能带来任意代码执行。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026贵州毕节大方大山乡人民政府招聘沙土村安置点自管委主任的1人备考题库含答案详解(突破训练)
- 2026云南楚雄州武定县公安局发窝派出所招聘辅警1人备考题库及答案详解(夺冠系列)
- 2026四川三江汇海商业保理有限公司第一批员工招聘6人备考题库附答案详解(综合题)
- 2026年来安县公开招聘2名政府购买服务工作人员备考题库含答案详解(b卷)
- 2026重庆市万州区白羊镇人民政府招聘非全日制公益性岗位9人备考题库附参考答案详解(典型题)
- 雨课堂学堂在线学堂云《食品酶学(江南)》单元测试考核答案
- 汽车维修厂维修管理制度
- 4.4+戏曲之美+课件高中音乐湘教版(2019)必修音乐鉴赏下篇
- 医院陪护服务合同
- 2026云南昆明华航技工学校蒙自校区招聘12人备考题库含答案详解(综合卷)
- 中考数学专题复习-等腰三角形与直角三角形(含答案)
- 航道巡查工作制度
- 电动车安全责任制度
- 酒店前台服务标准流程及客户接待指导
- GB/T 46914-2025养老机构生活照料服务基本规范
- 2025年卫生健康行业网络与数据安全技能大赛备赛试题附答案
- 如何做好科研实验记录课件
- 2025年宣城市广德县辅警招聘考试题库附答案解析
- 2026年咨询工程师咨询宏观经济考前冲刺重点知识考点总结笔记
- 中学生防诈骗安全课件
- 2025年青岛市中考生物试卷真题(含答案)
评论
0/150
提交评论