htb-starting point
Meow(telnet)
怎么先完成vpn的配置,记得上面的vpn数字要选一样的,不然ping不通,
还有一点就是先关闭靶机在关闭vpn,不然的话得等好几个小时才能重新连接vpn
先ping一下,看一下靶机是否存活
有返回了,代表存活
然后扫一下端口
发现23端口是打开的,并且是telnet服务的
因为telnet是远程登录服务器服务,尝试用这个服务区登录一下
telnet xxxxxxxx
最后猜的root用户,然后登录成功
拿到flag
Fawn(ftp)
可以ping通,说明主机存活
然后进行nmap扫描
-sV 探测服务/版本信息 我们可以看到 开放21端口的ftp协议 版本是 vsftpd 3.0.3
目标上运行的操作系统类型是Unix
对ftp进行补充一下
FTP没有账户时候我们的username: anonymous 采用匿名访问;
对于FTP我们每次操作服务器都会给我们回应状态码 不同状态码对应不同的的含义:
比如用户登录成功 服务器就会返回230状态码;
在这个ftp服务器上是不能直接cat读取文件的,我们得进行get外带
下载文件
下载文件通常用ge ...
nssctf-web-刷题记录
[NSSRound#1 Basic]basic_check这里的考点是put方法
题目
就这点东西,然后我们去信息收集,扫一下目录啥的,然后啥也没扫到
最后是利用nikto这个工具才发现的考点 nikto工具的介绍
发现可以使用put方法,这个方法就是可以直接写内容到自定义的文件里
这里就发现1.php创建成功了
然后就成功写入shell,然后就直接去rce就行了
学到了个新的知识点了
[NSSRound#4 SWPU]ez_rce考点
CVE-2021-41773
CVE-2021-41773(42013) Apache HTTP Server路径穿越漏洞复现
payload
bp —> POST发包
1/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh
因为这里的话flag藏的有点深,直接查找不出来所以就得利用grep命令
[NSSRound#8 Basic]MyDoor考点
这里的话题目的url给了url/index.php?file= 然后就猜一下伪协议,然后拿到源码,然后直接rc ...
动态类加载
视频地址 动态类加载
学习这个东西得需要两个代码
Person.java
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253package org.example;import java.io.FileInputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.Serializable;public class Person implements Serializable{ public String name; private int age; public Person() { //构造函数 System.out.println("无参person"); } public static int id; sta ...
java反序列化-cc3
cc3这条链和前面的cc1和cc6是不同的,这个执行命令用的是动态类加载
不是Runtime.getRuntime.exec()
InvokerTransformer所以说学这条链子之前得去学下啥是动态类加载
因为动态类加载的时候会调用loadclass,然后loadclass最后就会调用到defineclass,然后因为最后调用的defineclass不是public的,所以我们得去找哪个类里边重写了这个函数,并且是public的
这个函数参数的找不到有重写然后是public的调用他
然后发现了这种类型的defineclass有函数调用
然后还是default类型的(这个类型说明了这个包里可以调用他)
然后我们跟进去,看谁调用了这个default的defineclass
在他自身类里边的这个函数调用了default方法,但是这个是private的,所以我们就继续找哪个public调用了他
然后找到了一个private方法里面有个实例化的方法,
所以我们就接着往下找,找哪个public方法里面调用了他
最后找到这个public就找完了
然后我们就得想想怎么控制这个实例化对象 ...
java反序列化-cc6
由于jdk1.8_71以后对AnnotationInvocationHandler这个类进行了处理,然后就导致了cc1链用不了了,然后就诞生了个cc6的链子
就是修改了这个类里边的readObject方法
这就是链子的构造
不受jdk版本的影响,这里的话就直接跟着图片上的链子来走了
这里简单说一下就是这里的话是先HashMap里面的readObject方法,然后到调用到里面的hash方法,然后hash方法就会调用到hashcode方法,然后就接着下面写的就行
就是找到了这个类(TiedMapEntry)
然后找到这个类里边的hashcode方法,这个方法里面调用了getValue
然后getValue里面就会调用到get方法,然后map可控,可以传为Lazymap,然后后面的就和cc1一样了
这里就先把之前写的cc1的东西给复制过来
这里就先进行补充,这里利用put给hashmap里面赋值(hashmap构造函数不能赋值),这里在序列化的时候会调用hashmap里的readObject方法,然后调用里面的hash方法,hash方法里面就会调用tiedMapEntry的has ...
ctfshow-代码审计
web301题目(给了源码)
checklogin.php
123456789101112131415161718192021222324252627<?phperror_reporting(0);session_start();require 'conn.php';$_POST['userid']=!empty($_POST['userid'])?$_POST['userid']:"";$_POST['userpwd']=!empty($_POST['userpwd'])?$_POST['userpwd']:"";$username=$_POST['userid'];$userpwd=$_POST['userpwd'];$sql="select sds_password from sds_user where sds_username='&q ...
java反序列化-cc1
我是看这个视频来进行学习的 cc1
这里的话不要跳过视频里的那个安装调试包的代码,跳过的话就会复现不了,得一步一步跟着做
这个cc1链的危险方法就是发现了Transformer接口
然后利用里面的这个transform函数
这里话就是本篇文章主要讲的地方,就是利用这个函数,来进行操作
这里面还写一个反射调用,并且里面的值还可控,这就是造成任意方法调用了,所以这就是这个链子的入口
这里的话,我们可以尝试利用这个函数来弹个计算器
这里是InvokerTransformer的构造函数方法,结合上面的图片,可知通过这个构造函数传参从而弹个计算器
这就成功弹出了一个计算器
发现这里可以任意函数调用后,那么我们就得去找谁的里面调用transformer
查找后发现有21个调用,那么我们就得从里面找到一个合适的方法
(得找一个不同名的函数里面时调用transformer的)
然后我们就找到了这个方法是调用transformer的(是在TransformedMap类里边的)
然后我们就跟进看一下valueTransformer是什么东西
是有一个保护的函数方法来给他赋值,那我们继续跟进 ...
nodejs-污染
这里我是看p牛的文章来进行学习的,所以下面的内容也是根据p牛的文章来写一点自己的见解
这里p牛进行了总结,可以根据p牛写的这个代码来进行理解
12345678910function Foo() { this.bar = 1}Foo.prototype.show = function show() { console.log(this.bar)}let foo = new Foo()foo.show()
这里就是在Foo类用了prototype后,那么接下来实例化Foo类的对象,将会有Foo类里面的属性和方法。
再给一个代码来进行理解上面写的解释
12345678910111213function Father() { this.first_name = 'Donald' this.last_name = 'Trump'}function Son() { this.first_name = 'Melania'}Son. ...
java动态代理
这个和反射不同的地方在于,这个东西有接口
这里话进行学习的话得需要四个java代码
一个接口和其他三个class
这里的IUser是一个接口
UserImpl是一个继承于IUser接口,里面重写了IUser接口里的show()方法
UserProxy也是一个继承IUser接口,里面也是重写了show方法
ProxyTest是个产生代理对象的类
在这个产生代理对象的类里边进行操作
这里因为UserImpl类是继承了IUser接口,所以这里的类型得定义为IUser.
然后这里就会调用UserImpl类里边的show方法
接下来使用另一个类
这里是会输出两个展示,因为UserProxy里面有一个有参构造函数,传的值是别人传入的对象,因为这里传入的对象是UserImpl的,所以在UserProxy调用show方法时,就会调用到UserImpl类里边的show方法
以上展示的就是静态代理了
动态代理
这里出现的动态代理就是因为静态代理有缺点,因为如果接口里面有很多函数的话,日志(UserImpl)里面也要重写很多函数的方法,代理类(UserProxy)里边也要重写很多类的方法 ...