- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
decode函数吗jsp_蚁剑改造计划之实现JSP⼀句话
前⾔
本⼈有意写⼀份系列⽂章,主要内容是分享蚁剑改造过程中的⼀些技巧与经验。
因为蚁剑的相关⽂档实在⽐较少,可能很多同学都像⾃⼰当初⼀样想要⼆次开发可是不知如何下⼿。
不敢贸然称之为教程,只是把改造的过程发出来供⼤家借鉴,希望其他同学能够少⾛弯路。
正⽂
基本原理
由于Java中没有所谓的eval函数,⽆法对直接传递的代码进⾏解析执⾏。所以不管是蚁剑还是菜⼑对于JSP的shell⼀直是采⽤custom模
式,即把要执⾏的代码提前写在shell中,然后每次只需要传递要调⽤的函数名以及对应的参数即可。
虽然可以实现相应的功能,但是带来⼀个问题就是shell体积⾮常巨⼤。菜⼑的jsp脚本有7kb⼤⼩,蚁剑的jsp custom脚本即使去掉注释后
还有17k之多,⽤起来⾮常的不⽅便。
冰蝎的作者rebeyond⼤佬在⽂章 利⽤动态⼆进制加密实现新型⼀句话⽊马之Java篇 中提出了⼀种新的jsp⼀句话的实现⽅式:利⽤
classloader直接解析编译后的class字节码,相当于实现了⼀个java的eval 功能。
反复阅读rebeyond⼤佬的⽂章,不得不感叹思路的巧妙。
⾃⼰以前通过类反射+动态加载字节码的⽅式实现了⼀个命令执⾏后门,但是是在shell中获取的输⼊输出。参数个数也不可控,只能⼀股脑
按最⼤数传进去,还会有类反射的特征。
然⽽冰蝎是直接重写了Object类的equals⽅法,并且把pageContext传了进去。熟悉jsp的同学都知 道,通过pageContext就可以控制⼏
乎所有的页⾯对象,也就可以在payload中动态控制输⼊输出。
冰蝎的⽅法既没有类反射之类的特征,⼜便于控制输⼊输出,实在是妙。
但是冰蝎很久没更新了,并且暂时没有开源,有些⼩BUG修改起来⾮常⿇烦。我就想能否把这个功能给移植到蚁剑上。
冰蝎的操作是直接⽤asm框架来修改提前写好的字节码⽂件,把要传⼊的参数直接编译进去。由于冰蝎 ⾃⾝就是java写的,所以动态产⽣字
节码具有天⽣的优势。但是蚁剑的后端是nodejs,这怎么办呢?
思路的选择
⼤概有以下三种思路 :
(1)⽤nodejs来修改java字节码。
(2)写⼀个专门⽤来⽣成payload的jar包,每次执⾏前调⽤此jar 包,把需要编译的参数通过命令⾏传⼊,然后获取回显。
(3)在蚁剑中硬编码payload,然后通过getParameter把参数传进去。
三种⽅式各有利弊,第⼀个想法最简单,但是难度⼤。超出了本⼈菜鸟教程上学来的java跟node⽔平。
⾃⼰本来是想采⽤第⼆个思路,跟yan表哥交流后放弃。就不说⽤exec调⽤会不会产⽣命令注⼊这种东西,采⽤第⼆种⽅式需要修改蚁剑原
有的模式框架,并且还需要配置java 环境。⽽蚁剑从设计之初就是想着能尽量减少对环境的需求。尽管从2.0系列推出加载器后不再需要
node环境就可以运⾏蚁剑,但是 ⽬前还是有⼀堆⼈连安装蚁剑都有困难。
所以在本⽂中实现的是第三种思路,硬编码payload+其他参数传参。
⾸先根据现成的custom脚本来编写payload,然后把custom的模板给复制⼀份,把传递的函数名替换成payload即可。
采⽤这种模式的话就跟其他shell发送payload的模式相同,不需要对蚁剑原有的框架进⾏⼤改。只不过其他类型传递的是可见的代码,jsp
传递的是编译后的字节码。
具体实现
编译环境的选择
⾸先是编译环境的问题。要知道java是向下兼容的,也就是说jdk1.6编译出来的字节码在1.8上可以运⾏,但是1.8的字节码在1.6上就不⼀
定跑得起来。所以在实现的时候采⽤了jdk1.6编译,依赖的jar包也采⽤了跟冰蝎相同的tomcat7的jar。
编译命令
javac -cp D:/xxxx/lib/servlet-api.jar;D:/xxx/lib/jsp-api.jar Test.java
保存编译后的class字节码
base64 -w 0 Test.class Test.txt
乱码问题的解决
然后是让⼈头秃的乱码问题。
众所周知windows采⽤的是GBK,不是UTF-8。本来想学习⼀下蚁剑custom脚本中是如何实现的,结果发现了⼀个存在了四年的编码逻辑
错误。
在php版的custom中对于编码是这样处理的:
其中EC是识别charset的,也就是分辨UTF8还是GBK,然后⽤mb_convert_encoding函数转换到指定的编码中。
decode函数是对字符串进⾏解码,⽐如说base64、hex这种。
但是难道不应该先base6
您可能关注的文档
- 商务谈判的语言礼仪要求.pdf
- 2011年地方大学生入警培训岗前培训政工计划.pdf
- FM90.0长春生活故事广播香蕉电台改版为年代音乐台.pdf
- 2022年南京中考作文邓稼先的故事演讲稿600字(3篇).pdf
- FPGA可编程逻辑器件芯片XC7K325T-2FFG676C中文规格书.pdf
- 《少年中国说》演讲稿.pdf
- 五年级上册数学第一单元分析.pdf
- 五年级上册语文27课导学案.pdf
- GossipGirl绯闻少女剧本超级学习笔记第二季第一集.pdf
- 三基培训计划.pdf
- 人教版七年级语文上册期末试卷及答案下载.pdf
- 2021年高三上学期数学(理)第十五周周二晚测试题含答案.pdf
- 上海民办金苹果学校必修二第一章《立体几何初步》测试(包含答案解析).pdf
- 2021-2022学年华师大版七年级数学下册《第8章一元一次不等式》同步达标测试(附答案).pdf
- 2021年度1+x婴幼儿照护测试题.pdf
- 七年级数学上册一次函数每日一练(一)每周一练(二)(新版)鲁教版-(新版)鲁教版初中七年级上册数学.pdf
- 2018-2019学年四川省成都市高新区七年级(上)期中数学试卷(解析版).pdf
- DB51-T588-2006塔式起重机安装与拆卸规则.pdf
- 2017年高考真题全国3卷化学(附答案解析).pdf
- 2021-2022学年四川省广安市高一下学期期末考试数学试题(理科)(解析版).pdf
最近下载
- 塔望食品品牌策划:品牌就是生意,功能饮料行业如何正确品牌定位.pdf VIP
- 2023春国开电大《行政法与行政诉讼法》形考任务(形成性考核作业1)试题及答案.pdf VIP
- HGT20592_20635-2009钢制管法兰、垫片和紧固件(法兰选取).pdf VIP
- 中国脱硫脱硝除尘项目商业计划书.docx VIP
- 国家电网有限公司营销现场作业安全工作规程(试行).docx VIP
- 全科医生转岗培训考试(理论考核)题库及答案(2025年深圳).docx VIP
- 手工贴标工艺培训.pptx
- 电梯(困人)机房救援说明.doc VIP
- Power BI数据分析与可视化案例教程.pptx
- 建设法规测验.doc VIP
文档评论(0)