作者:hacker 日期:2023-02-22 分类:网络黑客
确认当前终端 tty 使用的 Shell 类型渗透shell工具使用技巧:
第一个 Shell 环境是 Thompson Shell 渗透shell工具使用技巧,在贝尔实验室开发并于1971年发布。
现代 Shell 最突出的祖先是被称为 sh 的 BourneShell ,这是以在 AT&T 工作的创始人 Stephen Bourne 命名的。
Shell 一直在基于这个概念,不断添加各种新功能,演变出很多种的 Shell 。
例如,很早版本的 OS X 中使用的是:
在 OS X 10.3 版与 10.4 版之后,默认的 Shell 是:
除渗透shell工具使用技巧了默认的 bash ,现在 macOS 中,默认的 Shell 变成了 zsh 。这是一种由 Paul Falstad 于1990年开发的。它是一个 Bourne 式 Shell ,它使用 bash 和 previous shell 的特性,并添加了更多的特性:
在使用命令行工具时,我们可能会遇到一些教程,可能需要你把一些配置写入到 .bashrc 、 .bash_profile 或者 .zshrc 等。那么这几个文件到底有什么作用和区别?
首先,从文件名称判断 .bashrc 、 .bash_profile 是给 Bash 来使用的。而 .zshrc 是给 zsh 来使用的。
当调用 Shell 时, Shell 从一组启动文件中读取信息并执行命令。读取什么文件就取决于 Shell 是作为交互式登录还是非登录调用。
换言之, Shell 分为交互式的或非交互式的:
交互式 Shell 可以是登录 Shell ,也可以是非登录 Shell 。
当用户通过 ssh 或本地远程登录到终端时,或者使用 --login 选项启动时,将调用登录 shell 。
当作为交互式登录 Shell 调用时, Bash 会先查找 /etc/profile 文件,如果该文件存在,它将运行文件中列出的命令。然后,搜索
~/.bash_profile , ~/.bash_login 以及 ~/.profile 文件,顺序读取。
当 Bash 作为交互式非登录 shell 调用时,会读取 ~/.bashrc 。
所以说, .bashrc 和 .bash_profile 之间的区别是, .bash_profile 当 Bash 作为交互式登录 shell 调用时被读取并执行,而 .bashrc 对于交互式非登录 shell 被执行。
大多数 Linux/Unix 发行版都使用 ~/.profile 代替 ~/.bash_profile 。 ~/.profile 所有 shell 都读取该文件,而 ~/.bash_profile 只有 Bash 才会读取该文件。
~/.zshrc 是 zsh 的交互式 shell 的用户配置。
对于 Bash ,它们的工作方式如下:
对于 zsh ,它们的工作方式如下:
在 tty 中执行 echo $0 ,输出的 Shell 如果前面带 - ,说明是登录 Shell 。
都是以 #!/bin/bash 开头
PS1 指Shell前面的提示符
终端就是一个大型的 shell 函数,所以我们可以直接操作
先做一个参数解析的脚本
find命令从指定的起始目录开始,递归地搜索其各个子目录,查找满足寻找条件 的文件并对之采取相关的操作。
该命令提供的寻找条件可以是一个用逻辑运算符 not、and、or 组成的复合条件。
-name '字串' 查找文件名匹配所给字串的所有文件,字串内可用通配符 *、?、[ ]。
查询多组文件注意要用 -o链接,通过括号包裹,并且需要转义字符
find ./mm.xcframework \( -name "*.framework" -o -name "*.o" \)
-exec 命令名称 {} 对符合条件的文件执行所给的命令,而不询问用户是否需要执行该命令。
{}表示命令的参数即为所找到的文件渗透shell工具使用技巧;命令的末尾必须加上终结符,终结符有两个:";"和"+"结束。其中";"会对每一个find到的文件去执行一次cmd命令。而"+"让find到的文件一次性执行完cmd命令。也需要添加转义字符。
find ./mm.xcframework \( -name "*.framework" -o -name "*.o" \) -exec echo {} \;
grep是大小写敏感的,可以添加 -i 来解决
grep "eof" -i find_api.sh
-E --extended-regexp # 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。
grep -E "Some|weak" test.m
首先记住一点, 不加引号的 * 首先会被bash进行扩展,所以 find . -name test* 在执行 find 命令前,bash先把 test* 替换成了 test1 test2 ... 然后 find 命令看到的参数实际上是 test1 test2 ..., 加了引号,bash就不去做替换了,那么 find 命令看到的参数就是 test*
set -x 展开输入的命令
=~ 表示是通过zhneg'ze
Xshell创建会话之后要如何连接SSH会话渗透shell工具使用技巧,具体操作如下:
1.在“文件”菜单选择“打开”。
2.在会话目录中选择可连接会话后点击“连接”即出现SSH用户名对话框。
图1: SSH用户名对话框
3.输入用户名后点击“确定”即出现SSH用户身份验证对话框。
图2: SSH用户身份验证对话框
4.如要进行Password验证渗透shell工具使用技巧,请在“密码”项输入密码后点击“确定”。
5.如要进行PublicKey验证,请先在目录中选择用户密钥后在“密码”项输入所选用户密钥后点击”确定”。如还没有设置密钥渗透shell工具使用技巧的用户可以参考“公钥用户身份验证”
6.如要进行Keyboard Interactive验证,请点击“确定”后回答在连接过程中出现的提问。
作为强大的安全终端模拟软件渗透shell工具使用技巧,Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色,帮助用户在复杂的网络环境中享受他们的工作。但是作为新手,可能有很多不明白的地方,本节就介绍一些Xshell入门使用教程。
一、设置窗口不透明度
步骤一渗透shell工具使用技巧:打开选项对话框。在Xshell 软件的主界面单击上方菜单栏“工具”菜单,在其下拉选项选择“选项”命令,这样就可以打开选项对话框。
图1:选择选项命令
步骤二:在选项对话框单击查看选项,勾选“使窗口透明”,将不透明度设置为85%,如下图所示。
图2:设置不透明度
设置二、取消断开连接设置
在选项对话框单击高级选项,然后将如下图所示的三个选项里的勾都取消掉,最后单击确定。
设置三、在默认界面取消显示按钮栏和状态栏
单击“查看”菜单,在其下拉选项下的工具栏下取消勾选“标准按钮”,然后取消勾选状态栏,如下图所示。
按照上面的方法进行设置后,最终的Xshell软件主界面如下图所示:
图5:Xshell软件主界面
以上介绍渗透shell工具使用技巧了Xshell的一些杂项设置,设置完成后,Xshell软件窗口看起来就不是那么复杂了。在掌握了Xshell软件的使用技巧后,就可以帮助管理你的远程终端服务器。
php调用shell的方法技巧
一、配置
查看php.ini中配置是否打开安全模式,主要是以下三个地方
safe_mode = (这个如果为off下面两个就不用管了)
disable_functions =
safe_mode_exec_dir=
二、使用
由于PHP基本是用于WEB程序开发的,所以安全性成了人们考虑的一个重要方面。于是PHP的设计者们给PHP加了一个门:安全模式。如果运行在安全模式下,那么PHP脚本中将受到如下四个方面的限制:
① 执行外部命令
② 在打开文件时有些限制
③ 连接MySQL数据库
④ 基于HTTP的认证
在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在php.ini文件中用 safe_mode_exec_dir指令,或在编译PHP是加上--with-exec-dir选项来指定,默认是/usr/local/php /bin。
如果你调用一个应该可以输出结果的外部命令(意思是PHP脚本没有错误),得到的'却是一片空白,那么很可能你的网管已经把PHP运行在安全模式下了。
三、如何做?
在PHP中调用外部命令,可以用如下三种方法来实现:
1) 用PHP提供的专门函数
PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。
system()
原型:string system (string command [, int return_var])
system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
例子:
复制代码 代码如下:system("/usr/local/bin/webalizer/webalizer");
exec()
原型:string exec (string command [, string array [, int return_var]])
exec() 函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。
例子:
复制代码 代码如下:exec("/bin/ls -l");
exec("/bin/ls -l", $res);
#$res是一个数据,每个元素代表结果的一行
exec("/bin/ls -l", $res, $rc);
#$rc的值是命令/bin/ls -l的状态码。成功的情况下通常是0
passthru()
原型:void passthru (string command [, int return_var])
passthru() 只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix 下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。
例子:
复制代码 代码如下:header("Content-type: image/gif");
passthru("./ppmtogif hunte.ppm");
希望本文所述对大家的PHP程序设计有所帮助。
;
配置网络
在VM虚拟机中按照下边的网络拓扑进行配置网络。网络拓扑图如下:
win7具有双网卡,其中外网ip是192.168.8.133,内网网段是52。三台机器彼此互通,但是win server 2008和win2003不通外网。用我mac作为攻击机,来对这个靶场环境进行渗透测试。
外网打点
在win7这台靶机上,使用PHPStudy让网站可以运行起来。在攻击机上,访问 可以看到是一个phpStudy 探针。对这网站进行渗透,因为本文主要写在内网渗透过程中对不出网主机的渗透,所以此处外网打点就不写的很详细了。
针对此靶场进行外网渗透拿权限大致有这几种方法:
通过phpmyadmin弱口令,进入phpmyadmin后台。然后知识点就变成了,通过phpmyadmin进行getshell,这个点又分为,得到网站绝对路径后,使用select into outfile的方式写shell和利用日志写shell。在此处,我是使用日志写shell的方法拿到权限。因为secure_file_priv配置为null,禁止修改目录下的文件,也就不能使用into outfile的方式写入shell。
通过目录扫描可以扫出beifen.rar,备份文件。在源码中可以找到登陆后台的账号密码:admin/123456和登陆路径/index.php?r=admin,在前台模板文件中添加一句话木马连接也可获取shell。
获得webshell的信息收集
通过外网打点获得的webshell,可以进行一波信息收集,摸清我是谁?我在哪?有没有内网环境?有没有杀软?通过拿到webshell后的信息收集的结果来评估一下有没有必要继续深入或者初步了解继续深入的话需要哪些手段。
我是谁?
蚁剑已经给出基础信息
我在哪?
使用ipconfig /all 看一下网络信息
目标有两个网卡,并且存在域环境,那么就有打它内网的必要了。
有没有杀软?
tasklist查看一下进程信息
根据进程查一下是否有杀软
目标没有使用杀软,还有域环境那么让它直接cs上线。
内网渗透
cs上线
内网信息收集
信息收集每个人都有自己的习惯,信息收集的顺序和信息收集的项目也都不太一样,只要根据自己的习惯和嗅觉,针对目标具体情况进行收集,以求尽快的拿下目标就好。信息收集的越全面突破口也就会越多,考虑到篇幅和文章内容匹配度等因素,此处并没有写出大量信息收集方法。
使用cs自带的net view查看域信息。
使用cs自带功能进行端口扫描,分别对8和52两个网段进行扫描进行完这两个步骤以后,cs会把扫到的目标列出来。
因为拿到的是管理员权限,可以先抓一波密码。用 cs 的 hashdump 读内存密码,用 mimikatz 读注册表密码:logonpasswords。
此处打码的地方是因为配置靶机登陆时靶机提示重置密码,我给靶机改了个包含个人信息的密码。蠢哭。拿到密码后,目标主机没有开启防火墙,可以使用cs自带的psexec做一波横向,因为抓到很多域中机器密码,域控密码也抓到了。
内网横向(通过登录凭证)
这个靶机设置的比较简单,抓到密码后,因为抓到了域控登陆的凭证,那么使用psexec即可横向内网所有机器。因为,另外两台内网的机器不出网,那么就到了本文着重练习的点了,打不出网的机器。
不出网机器上线一般有以下几种方式:
使用smb beacon
配置listener通过HTTP代理上线
使用pystinger搭建socks4代理
这几种方式之前有师傅也在先知写过 《不出网主机上线方法》 。此处我采用的SMB beacon这个方法。
SMB Beacon使用命名管道通过父级Beacon进行通讯,当两个Beacons链接后,子Beacon从父Beacon获取到任务并发送。因为链接的Beacons使用Windows命名管道进行通信,此流量封装在SMB协议中,所以SMB beacon相对隐蔽。SMB beacon不能直接生成可用载荷, 只能使用 PsExec 或 Stageless Payload 上线。
首先得到内网中一台主机的beacon,抓取密码后进行smb喷射,得到另一台开放445端口的机器上的administrator账户密码,在目标机器不出网的情况下,可以使用Smb beacon使目标主机上线
使用条件
具有 SMB Beacon 的主机必须接受 445 端口上的连接。
只能链接由同一个 Cobalt Strike 实例管理的 Beacon。
利用这种beacon横移必须有目标主机的管理员权限或者说是拥有具有管理员权限的凭据。
使用方法:
1.建立smb的listener
2.在cs中使用psexec进行横向移动,选择现有的beacon作为跳板,这里凭据必须是administrator ,即拥有目标主机管理员权限
3.连接成功,可以看到smb beacon上线的主机右侧有∞∞标识
使用这种方法上线的机器,主要是通过出网机作为一个中间人,不出网主机成功上线后,如果出网机一断开,这个不出网主机也会断。
内网横向(通过ms-17010)
在拿下win7的时候,可以给它传一个fscan,给win7做一个内网大保健。上传fscan后,运行扫一下内网。
发现存在ms17010。
ms17010常见的几种打法:
msf
ladon/ladon_ms17010
从msf分离出的exe
nessus里的exe
cs插件
这几种打法,我在这个环境中都做过尝试。过程就不一一叙述了,直接说我测试的结果。msf是最稳定的,但是打起来有稍许的麻烦因为要设置监听模块和选择攻击模块等配置。ladon_ms17010方便但是不太稳有时候会打不成功。cs插件也不稳,并且在这种不出网网络不稳定的情况下成功率会变的更低。
这个图片的ip可能跟上边配置符不起来,因为我在测试过程中,网断过几次,ip就变了。所以,在打的时候,如果ladon和分离出的exe没有打成,不要轻易放弃,用msf在打打试试,毕竟工具就是工具,不能过分依赖某个工具。
在这种不出网的情况下,可以优先考虑使用从msf分离出的exe和ladon_ms17010来打,打成功会直接通过自定义的dll新建一个用户并加入管理员组,开启3389端口。根据实际情况,可考虑在合适的时间段和条件下直接远程登入,翻一下敏感数据,往往会因为运维人员的很多“好习惯”而给渗透带来很多便利,比如说“密码本.txt”。
msf打不出网机器的ms17010
msf在单兵作战的时候还是很稳定很香的。首先,让出网机器先在msf上线,可以用cs直接传递会话,或者生成个msf马直接运行一下。在这的方法就很多了。win7在msf上线后,因为我们已经提前知道了,存在52这个不出网的段,那么就需要在msf中添加路由。
查看路由
run get_local_subnets
添加路由
run autoroute -s 192.168.52.0/24
查看添加的路由
run autoroute -p
把shell切换到后台,然后使用ms17010模块进行漏洞利用,监听时使用正向监听,即可
小贴士:
漏洞检测方法:
use auxiliary/scanner/smb/smb_ms17_010
之后设置一下目标ip和线程即可,这里因为已经扫出存在漏洞的机器了,也就不在叙述。
漏洞利用常使用的是:
auxiliary/admin/smb/ms17_010_command
exploit/windows/smb/ms17_010_eternalblue
exploit/windows/smb/ms17_010_psexec
这里的第一个和第三个模块需要目标开启命名管道,并且比较稳定。第二个模块只要存在漏洞即可,但是会有概率把目标打蓝屏,而且杀软拦截也会比较严格,如果有杀软就基本可以放弃这个模块了。
在打ms17010的时候,不妨使用auxiliary/admin/smb/ms17_010_command模块探测一下是否可以使用命名管道。
use auxiliary/admin/smb/ms17_010_commandsetrhosts192.168.164.156192.168.164.161setcommandtasklistshow optionsrun
如果命令执行成功的话就可以优先考虑
auxiliary/admin/smb/ms17_010_commandexploit/windows/smb/ms17_010_psexec
这两个模块进行利用。
我在上边打得时候因为目标机器没有杀软就直接使用exploit/windows/smb/ms17_010_eternalblue来打了,期间为了测试打过多次,确实出现了把目标机器打重启的情况。
总结
这个靶场设计的技能点比较基础,外网打点获得shell后,直接可以通过cs上线,在管理员权限下,抓取密码,新建一个smb beacon然后使用psexec对内网两台不出网的机器进行横向。
在平时或者线下AWD的时候,有一个shell管理器可以让我们打到事半功倍的效果。
前提你要能获得别人shell,不然这个也没什么用了。
我这里写好的这个只是一个思路,真正的后渗透工具,远比这个强大。
[图片上传失败...(image-80d3db-1514974826506)]
控制端
主要是三个模块:
获得sock和地址,判断是哪个机器和我们连接的。
以及发送命令出去。进行编码解码。这里有一个坑。
py2和py3的socket我感觉好像不一样,编码自己出现了问题买就去百度解决吧,我这里没啥问题,在我的机器调试好了。
还有就是命令行选项,可以发挥你们的想象自行添加。
得到的shell列表,将其list出来,按照id和ip分开:
如图:
建立一个简单的线程,因为 shellList 好几个函数需要用到,就设置为全局变量。
最后的主函数。建立scoket套接字,加入线程。
讲一下socket对象中两个参数的含义,
socket.AF_INET 代表使用IPv4协议 ,socket.SOCK_STREAM
代表使用面向流的Tcp协议,
也就是说我们创建了一个基于IPv4协议的Tcp Server。
当有多个台机器连接到控制端时,我们要记录这些机器的socket对象
,以便我们可以选择不同的操作对象
服务端
服务端主要就是接受命令并执行发送给控制端。
python调用系统命令有这几种方法,更多的欢迎补充
一开始我是用subprocess,但是有些命令很慢,os.popen简便些。
code:
argparse模块也很好用,智能化一点。
[图片上传失败...(image-f524d5-1514974826506)]
GAME OVER!
已有5位网友发表了看法:
访客 评论于 [2023-02-22 11:58:53] 回复
末尾必须加上终结符,终结符有两个:";"和"+"结束。其中";"会对每一个find到的文件去执行一次cmd命令。而"+"让find到的文件一次性执行完cmd命令。也需要添加转义字符。 find ./mm.xcframework \( -name "*.fr
访客 评论于 [2023-02-22 18:39:06] 回复
7010来打,打成功会直接通过自定义的dll新建一个用户并加入管理员组,开启3389端口。根据实际情况,可考虑在合适的时间段和条件下直接远程登入,翻一下敏感数据,往往会因为运维人员的很多“
访客 评论于 [2023-02-22 15:31:33] 回复
象pbmplus(Unix 下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。 例子: 复制代码 代码如下:header("Content-type: image/gif"); passthru("./ppmt
访客 评论于 [2023-02-22 22:14:10] 回复
。 最后的主函数。建立scoket套接字,加入线程。 讲一下socket对象中两个参数的含义, socket.AF_INET 代表使用IPv4协议 ,socket.SOCK_STREAM 代表使
访客 评论于 [2023-02-22 18:56:25] 回复
可用载荷, 只能使用 PsExec 或 Stageless Payload 上线。 首先得到内网中一台主机的beacon,抓取密码后进行smb喷射,得到另一台开放445端口的机器上的administrator账户密码,在目标机器不出网的情况下,可以使用Smb beacon使目标主机上线