本地搭建Visual Regexp

搭建原因大家应该都懂吧,一个是正则可视化实在是很香很必要,其次线下没网的话没有个离线工具就很容易gg,同类工具还有cyberchef

Visual Regexp在线地址 | github仓库

git clone之后首先肯定是npm install,出现vulnerabilities很正常,直接npm audit fix --force,一次不行就两次

奇葩的是作者自己的visual-regex包一直是以快捷方式的形式被安装(后来发现是整个项目的package.json编写的问题)

image-20211114182010887

解决方法:删除快捷方式,单独安装npm i visual-regex,用everything查找到该包具体存在的位置,复制到node_modules目录下

之后到build目录下node .\build.js

image-20211114182307150

报错hightlight.js并没有引入./lib/highlight,查看\highlight.js\package.json的exports部分,发现第90行的引用是".",将其改为"./lib/highlight"

img

再次build提示*‘NODE_ENV’ is not recognized as an internal or external command, operable program or batch file.*(此处截图走丢了),解决方法npm install -g win-node-env

之后node .\build.js即可成功build,在devlist文件夹下的index.html即可正常使用相关功能

无法打开jar包应用

这个应该属于常见问题了,一般原因是java版本不对

很多人选择设置不同名字的环境变量,比如java8,java11,我的话是只有java11是环境变量,在有些jar需要java8的环境时直接用everything搜索java.exe,复制路径之后xxx\java.exe -jar xyz.jar这样来运行

image-20211117132839594

远程调试Node.js

场景:用vulhub或其它已经打包好的docker环境复现cve需要远程调试

首先修改对应的docker文件:package.json的"scripts"字段的"start"部分增加--inspect=0.0.0.0:port,指名调试时的监听端口

image-20211117160017724

docker-compose.yml中增加监听端口"8000:9229",之后正常docker-compose up -d

本地先下载好一样的文件,用vscode生成一个调试文档lauch.json

image-20211117155743006

需要改的配置有address(远程ip),port(远程监听端口),localRoot(本地路径),remote(远程路径),之后即可打断点调试

出现unbound breakpoint正常,大概率是你的交互就没执行到打断点的地方,所以没什么反应

VirtualBox给虚拟机磁盘扩容

当初给kali只分配了16G(无奈啊,谁让我主机也就512,得省着用),导致今天pip一个包都失败

之后我直接用自带的主机介质管理器增加盘片的大小

image-20220113110156096

当我把下面显示大小的条滑到24G的时候我觉得稳了,这还能不够用???于是自信开机

笑死,GParted没识别出来,df -h也完全没变化,我就又多分配了4G,结果裂开,还是没识别

然后我发现问题在于快照的存储是单独有一个uuid的vdi的,而扩容时我选择在最上层的kali.vdi扩容,导致不会同步到下面的快照的存储信息

解决方法就是把前面所有的快照删除掉,之后再开机就可以识别了

image-20220113112010762

由于未分配和/dev/sda1之间隔着扩展分区和swap,所以先删除这两个,扩容后再新建加回来

应用修改之后自信开机,发现怎么kali的龙半天都不蓝…… 一番排错,之后发现是因为swap分区的uuid发生改变导致swap没有正常挂载(swapon --show回显为空)

输入blkid复制/dev/sda5的uuid,将其复制粘贴到/etc/fstab的对应位置,就好啦

usage of api documented as @since xxx

idea->Project Structure->Project Settings->Language level

tomcat&部署war包

傻逼Java,总是一堆问题

首先是打war包,用Maven

image-20220301201126717

将会导出war到target目录下,将它复制到tomcat/webapps目录下,启动,结果直接来了404

  • org.apache.catalina.core.StandardContext.startInternal 一个或多个listeners启动失败,更多详细信息查看对应的容器日志文件

在tomcat下的logs目录查看localhost.year-month-day.log,发现详细报错为org.apache.catalina.core.StandardContext.listenerStart 配置应用程序监听器[org.apache.shiro.web.env.EnvironmentLoaderListener]错误

于是考虑是打包时没有带上依赖,查看war打包时的lib文件夹发现都不缺

image-20220301200217537

再回看完整报错,在最后有Caused by: java.lang.ClassNotFoundException: javax.servlet.ServletContextListener,发现问题和我们打包无关 而是tomcat版本的问题

img

通过下载tomcat9版本来解决报错,此处是下载链接,直接解压

./bin/catalina.sh run
# 用这个命令为了让简短报错直接打印在console

image-20220301200041360

idea远程调试java web项目(jar/tomcat)

  • java -jar方式启动

以复现CVE-2020-13933为例,这里java项目直接-jar即可启动,无需依赖tomcat作web服务器

docker pull jackey0/cve-2020-11989
docker cp <container-id>:/springboot-shiro-0.0.1-SNAPSHOT.jar /home/name/t3mp/
# 8426对外web端口, 8001对外调试端口
docker run -p 8426:8080 -p 8001:1456 <image-id> /bin/sh -c 'java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1456  /springboot-shiro-0.0.1-SNAPSHOT.jar'

image-20211026033544920

此处添加参数与docker的相同

  • tomcat加载war包方式

编辑tomcat目录下./bin/catalina.sh,搜索JPDA_ADDRESS,修改

JPDA_ADDRESS="0.0.0.0:8000"

然后idea设置与上面相同,tomcat启动

./catalina.sh jpda run

idea的远程看着花哨,有一堆设置可以选,但是那个看起来方便的tomcat remote server调试实际远不如这样,垃圾

之后打断点调试即可,熟练掌握右键->add as a library的方式调试核心jar

idea打jar包(非maven)

maven的话相当简单,直接用右侧maven工具栏即可完成build

非maven下,以通达OA综合利用工具为例

image-20220325175858329

注意到根目录下就有.idea文件夹,但是直接idea打开并build并不会得到编译好的jar,排错后发现manifest file指定的com.xxx主类有问题,是项目的module没有设置好

image-20220325180109708

需要在这里设置Content Root,这样才可以在Artifacts处正确读取到Manifest File(不然是不正常的),并且module sdk也要设置好(不然为空)

image-20220325180213012

之后勾选Include in project build,再build就正常了

idea打jar包(maven)

以冰蝎3.0.11为例,下载github上已经反编译好的源码(感谢带佬的反编译)

git clone https://github.com/MountCloud/BehinderClientSource.git

idea打开,首先把项目sdk之类的改成jdk8,然后就是排错之路:

  • pom.xml的com.sun的systemPath改为绝对路径

默认是取用系统环境变量,我本机主要还是java11,而com.sun的那个包在java8下面,所以我改成了绝对路径

  • idea虽然可以自动解决maven依赖缺失问题,但是可能会由于烂网导致某个依赖下载一半留下一堆sha1, part文件却没有主体jar,只需要把这个依赖的主文件夹删掉,再maven reload即可重新下载

其它问题就没有了,直接maven package即可得到目标jar

  • 还有部分包的问题,可以省事都改成<scope>provided</scope>,有依赖会好些

  • net.rebeyond.behinder.dao.ShellManager#ShellManager()的DB_PATH修改为./data.db,把资源文件中的data.db放入target下 和最后的jar包同目录即可

idea在build项目时报错 internal java compiler error

有以下几个需要排错的地方

  • Project Structure

image-20220401113924920

image-20220401113939224

  • Settings

image-20220401114013043

  • pom.xml

image-20220401114103768

java rmi调试报错解决

亲测用-D方式添加参数没用(可能是我本地环境太垃圾了 破win10)

System.setProperty("java.rmi.server.useCodebaseOnly","false");
System.setProperty("java.security.policy","E:\\client.policy");
System.setProperty("java.rmi.server.codebase","http://nxo90f9obuj1boi0bzbdanmca3gt4i.burpcollaborator.net/");
if(System.getSecurityManager() == null){
	System.out.println("Setup SecurityManager...");
	System.setSecurityManager(new SecurityManager());
}
grant {
permission java.security.AllPermission;
};

参考:https://coderanch.com/t/654168/java/java-security-AccessControlException-access-denied

windows+vscode使用gmp库(静态库)

下载gmpmsys2,修改msys的pacman的

# msys2.exe
pacman -Sy	# 刷新软件包数据
pacman -S mingw-w64-x86_64-toolchain	# 安装64位mingw
# mingw64.exe
pacman -Ss msys/gcc
pacman -Ss msys/make
cd D:/gmp	# 以下步骤并不会特别耗时 半个小时内应该就可
./configure	
make
make check
make install

生成的静态库文件在gmp内的.libs目录下,使用时

#include <D:/gmp-6.2.1/gmp.h>

在vscode的tasks.json中添加这样的参数

image-20220506013507059

"-I",
"D:\\gmp-6.2.1",    // gmp.h所在文件夹
"-L",
"D:\\gmp-6.2.1\\.libs",  // .libs文件夹路径 静态库所在处
"-l",
"gmp"   // 表示libgmp.a库

继续f5即可(因为我是把f5当编译用的 runcode不行 f5行(((

————最后吐槽一下windows上编译c程序的繁琐问题(仅针对vscode 没用过vc)。最开始学c的时候顺着python用vscode的习惯就想着用vscode写c,然后根据教程配好了环境:下载MinGW、配置.vscode的调试信息、下载vscode的相关插件,终于写出了hello word,但是之后问题也没断过,比如大家都清楚的控制台gbk和utf-8,以及chcp 65001和chcp 936的永恒之争,最后我妥协的方式是把所有的c文件编码格式设为gbk,同时将调试参数改为-finput-charset=GBK -fexec-charset=GBK;第二个问题就是MinGW64这个坑货了,当时安装时我完全没注意到还有很多选项,直接zip解压的

gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

后来做免杀发现寄了,这个seh的版本不能编译32位的文件,即使加了-m32也不行,草,妈的。我当时不想再破坏主机的环境,所以在虚拟机装了sjlj版的,终于可以用-m32

再然后就是现在,为了用gmp库我还得借助msys,用它的make,那你MinGW的cmake是干什么吃的?????

而且,而且,mysys下通过pacman安装的MinGW64也无法正确编译32位程序

最后的解决方法是把sjlj版的直接覆盖掉我用不到的MinGW32文件夹里,然后实现了顺滑的-m32

总之。还是。非常无语。