psp3000刷机图片下载图片漏洞读

后使用快捷导航没有帐号?
查看: 13883|回复: 65
新人欢迎积分0 阅读权限40积分550精华0UID4806687帖子金钱272 威望0
Lv.4, 积分 550, 距离下一级还需 450 积分
UID4806687帖子威望0 多玩草20 草信仰力0
tiff图像文件格式是个漏洞百出的格式,不管在psp上,还是在ps上,甚至在iphone上都频繁出现,windows,linux,苹果的mac操作系统也曾经出现过TIFF漏洞,远程攻击者可能利用此漏洞通过诱使用户打开恶意文档控制用户系统,微软也在这个漏洞上摔过几次,sony更是在这种格式上吃了不少亏,相信有ps3的同学都知道ps3防破解如此完美但还是出现了tiff漏洞,甚至传出可用tiff漏洞运行ps2游戏的传闻(虽然最后证明是假的),但毕竟这也是方向之一,ps2也出现了TIFF漏洞,并被用来升级固件,以前的psp也出现过tiff漏洞,并且被利用过一次,相关信息请看ps。
& & 因此,综上所述,这次的3000出现TIFF漏洞也很可能会被完全利用,有同学可能想知道,da不是说过3000的ipl无法被导出或者修改所以没办法破解么?我跟你说吧,da那种方法是终极的方法,只要他成功了,那么sony除了再次改电路板换cpu之外就拿他没办法了,这种想法很好但是难度极高,降一个档次的就是找漏洞了,这次的TIFF漏洞估计会被用来开发各种模拟器,gba的,iso的等等,还有可以运行自制程序,但是要用这个漏洞做自制系统还是有很高难度,最重要的就是ipl的问题,不过总比现在当砖头好多了吧??
& &&&看来sony真的要在同一个地方跌倒3次,甚至4次了,其实不能怪sony的,毕竟微软苹果也在TIFF上摔过,所以sony摔得不冤,不过,记得psp2一定要支持TIFF格式哦!!!sony我们看好你!!
附1:我在玩家网3月22号发的TIFF漏洞消息,国内最早,其他都是转载的,地址如下,可见本人眼光是可以的
附2,psp2.0~2.6系统时代的TIFF漏洞报告
信息提供:安全公告(或线索)
漏洞类别:系统攻击
攻击类型:远程攻击
发布日期:
更新日期:
受影响系统:Sony PlayStation Portable (PSP) 2.x
安全系统:无
漏洞报告人:
最初在libTIFF内发现由:Tavis Ormandy, Google Security Team.
例外在PSP内发现由:psp250, Skylark, Joek2100, CSwindle, JimP, and Fanjita
漏洞描述:Secunia Advisory:SA21672
便携式Sony PlayStation被发现一个漏洞,该漏洞可被恶意攻击者操作危及到用户系统的安全。
该漏洞是由libTIFF内的一个错误导致的,在一个特殊处理过的TIFF图像在Photo Viewer中打开时该漏洞可被操作执行任意代码。
更多漏洞可见如下漏洞#1 in:SA21304
该漏洞已经在版本2.60被确定并且已经在版本2.00至2.80中被报告。
测试方法:无
解决方法:不打开不信任文件。
追加TIFF漏洞机理,便于有兴趣的同学研究……
TIFF(TagImageFileformat)是Mac中广泛使用的图像格式,它由Aldus和微软联合开发,最初是出于跨平台存储扫描图像的需要而设计的。它的特点是图像格式复杂、存贮信息多。正因为它存储的图像细微层次的信息非常多,图像的质量也得以提高,故而非常有利于原稿的复制。该格式有压缩和非压缩二种形式,其中压缩可采用LZW无损压缩方案存储。不过,由于TIFF格式结构较为复杂,兼容性较差,因此有时你的软件可能不能正确识别TIFF文件(现在绝大部分软件都已解决了这个问题)。目前在Mac和PC机上移植TIFF文件也十分便捷,因而TIFF现在也是微机上使用最广泛的图像文件格式之一。
& & 要分析这个漏洞,一定要能够重现这个漏洞,然后通过跟踪和调试来分析它。m大神发布的漏洞我分析了一下,有两种利用方式,,一个是直接在目录下就溢出,也就是说当你用psp打开了畸形tiff文件所在的目录时,漏洞就已经使寄存器溢出了;另一个是可以用来做自制程序,也就是说,当你打开了畸形tiff文件,那个就会在你本地发生寄存器栈溢出,从而执行任意代码,即shellocde。
& &&&理解了如何利用,现在我们的关键就是需要掌握一些tiff图像文件格式规范,不需要很专业的掌握,只要对这种文件格式的基础知识有所了解就足够我们分析漏洞了。下面我来描述一下文件的基本规范,考虑到看英文比较难受的朋友,我特意翻译了一把,希望对大家有所帮助。需要英文原文的朋友也可以从本文的光盘相关中得到。
& &&&一个完整的tiff文件首先有8字节的头部(header),头部中含有一个指针指向一个图像文件目录,简称IFD(image file directory),每个IFD包含了重要的图像信息,这些信息是一条一条的存储在IFD中的,称为目录条目,简称DE(directory entry)。具体的说,可以用下面这个图示来说明他们之间的逻辑关系。
首部Header
字节0-1:字节序
& &&&“II”(4949.H)----小印第安,低字节存储在内存的低地址
& &&&“MM”(4D4D.H)----大印第安,低字节存储在内存的高地址
字节2-3:TIFF文件标识
最好选用42(十进制),同时要看前面的字节序,如果是小印第安,这里就写2A00.H;否则写002A.H
字节4-7:第一个图像文件目录(IFD)在文件中的偏移量(offset)
?&&图像文件目录(IFD)
每一个图像文件目录(IFD)中首先有两个字节表示目录条目(DE)的个数,接着的连续的每12个字节是一个目录条目,每个IFD最后4个字节表示的是下一个IFD的偏移量,如果没有后继IFD的话用一个4字节数字0来结尾。
?&&目录条目(DE)
每一个12字节的DE拥有同样的结构:
字节0-1:本域的标记(Tag)
字节2-3:本域类型(Type)
字节4-7:值的个数
字节8-11:具体的值,或者是一串多个值存储于文件的偏移量
其中类型有多种,最常见的有一下几种:
1=BYTE& & 8位无符号整数
2=ASCII& &8位,其中前7位表示一个ASCII码;最后一位必须是NUL(二进制的0)
3=SHORT& &16位无符号整数
4=LONG& &32位无符号整数
5=RATIONAL&&两个LONG,第一个表示分子;第二个表示分母
有了以上的基本文件格式规范知识后,我们就可以开始研究上面perl代码生成的ms07-055.tif文件了。首先我们来看看文件头部的8个字节,如下:
h: 49 49 2A 00 90 3E 00 00 80 3F E0 50 38 24 16 0D ; II*.?..EUR??8$..
&&根据上面的知识很容易知道其中的含义,49 49表示小印第安字节序;2A 00是TIFF文件文件标识;90 3E 00 00表示该文件的第一个IFD在文件的00003E90偏移量处。
&&那么我们下一步很自然的去00003E90偏移量处去解析第一个IFD,可见该文件中只有这样一个IFD。
00003e90h: 0F 00&&FE 00 04 00 01 00 00 00 00 00 00 00&&00 01 ; ..?............
00003ea0h: 03 00 01 00 00 00 80 02 00 00&&01 01 03 00 01 00 ; ......EUR.........
00003eb0h: 00 00 00 02 00 00&&02 01 03 00 FF 00 00 00 DA 3B ; ..........?...?
00003ec0h: 00 00&&03 01 03 00 01 00 00 00 05 00 00 00&&06 01 ; ................
00003ed0h: 03 00 01 00 00 00 02 00 00 00&&11 01 04 00 56 00 ; ..............V.
00003ee0h: 00 00 38 3D 00 00&&15 01 03 00 01 00 00 00 03 00 ; ..8=............
00003ef0h: 00 00&&16 01 04 00 01 00 00 00 06 00 00 00&&17 01 ; ................
00003f00h: 04 00 56 00 00 00 E0 3B 00 00&&1A 01 05 00 01 00 ; ..V...?........
00003f10h: 00 00 CA 3B 00 00&&1B 01 05 00 01 00 00 00 D2 3B ; ..?..........?
00003f20h: 00 00&&1C 01 03 00 01 00 00 00 01 00 00 00&&28 01 ; ..............(.
00003f30h: 03 00 01 00 00 00 02 00 00 00&&3D 01 03 00 01 00 ; ..........=.....
00003f40h: 00 00 01 00 00 00&&0 0 00 00 00& && && && && && & ; ..........
&&其中大头的0F 00表示这个IFD中有15个DE,每个DE含有12个字节,我在上面把他们隔开了。为了让大家对这个15个DE有更清楚的了解,我把他们按照含义列成一个表,如下所示:
序号&&标记Tag&&类型Type&&值个数Count&&值获偏移量Value/Offset
3&&&&0000 00FF&&0000 3BDA
10&&011A&&
11&&011B&&
12&&011C&&
14&&013D&&
在这15个DE中,最值得关注的是第4个,也就是上面用黑底绿字标出的一行,这个DE告诉我们,它的数值个数有0000 00FF个,也就是255个;数值类型均是SHORT(0003),16位,占两个字节;这255个数值在文件中的偏移量是0000 3BDA。以我的直觉来看,我认为这255个数值就是最后造成栈溢出的直接凶手,可能就是在程序中处理这255个数值时,经这个数值读入某函数的局部变量(可能是个数组)时,由于开辟的数组元素数有限,而且没有比较255这个数和开辟的数组元素个数的大小关系,就开始读入,最终导致了缓冲区溢出的发生。----这也只是我的合理预测和猜想,到底是不是如我所说,需要跟踪调试才能证明。下面我们就用OllyDBG来调试一把。
&&由于程序控制的EIP最终为0c0c0c0c,如果不修改一下的话,跟踪调试的时候,调试器是不会停下来的,那么很简单,直接把0c0c0c0c改为FFFFFFFF即可,这样调试器会发现程序在执行非法内存地址的指令,就会停下来。停下来后,你可以去检查栈中的蛛丝马迹。根据函数调用的原理,我们可以知道覆盖EIP为FFFFFFFF前执行的指令应该是RET指令,在这个指令执行前一定有一个函数被调用,而这个函数也很有可能就是最终发生溢出的函数,那么在ESP指向的栈空间的上部一定有一些返回地址,那么我们可以把几个可以的返回地址记下来,然后在下一次程序加载了这个地址所属的dll文件或exe文件时拦截,并把断点下到刚才记录下来的地址紧邻的前一条指令处,那么一旦断下来,有两种境况,第一种情况是,栈还未被覆盖,说明溢出还没有发生,那么只要单步跟踪仔细调试,就可以跟到发生溢出的那行代码;第二种境况是,栈已经被覆盖了,那说明记录下来的几个可疑地址是不正确的,根本就没有在这些函数内部发生溢出,这就需要在刚才发生了溢出后的栈中继续前溯,一定会在溢出之前断下程序,因为无论如何程序在溢出之前一定调用过某个程序。而这个程序的返回地址会保存在栈中。
我用这种办法,首先发现了两个可疑地址:内存中的690B 3F71和690B 3163,最后发现断到690B 3163时还尚未发生溢出,那么我就F7跟进去,最终通过单步调试的方法,终于找到了溢出发生的函数。原来是在read()函数中溢出的。
为什么会在这个read()函数中溢出呢?我们首先来看看read()函数的定义:
_read()读文件函数
原形:int _read(handle,buffer,count)
   //文件句柄
   void *//存放读出数据的缓冲区
   //一次读出的字节数
功能:从由handle指定的文件中读取由count指定字节数的数据到buffer
返回值:0-0xfffe(实际读出的字节数);-1(错误)
&&再来看看给read()函数传入的三个参数是什么,其中handle是一个句柄,就是前面那个畸形文件的句柄;buf是一个内存地址,指向了栈空间的一个内存单元;len=1FE=FF×2。结合前面的分析,连起来就是说,这里调用read()函数的目的是要把前面那255个2字节数值全部复制到内部某个变量中。而且在调用read()函数之前并没有做任何长度上的检查,因此这是一定能导致溢出的,因为内部变量的空间是有限的,而文件中存储的数值个数却是不确定的。我想到此,本漏洞导致的根本原因已经找到了,就是未检查文件DE指定的数值个数和长度就开始往内部变量中写入,最终覆盖了previous EBP和返回地址,导致发生栈溢出。
& && &回顾本漏洞的重现过程和分析过程,我们首先学习了TIFF文件格式的一些基本规范,由于利用程序中没有详细的注释为什么那样构造畸形文件,因此我们需要掌握一定的文件格式规范。接着我们结合利用程序对其生成的畸形tiff文件,根据格式规范来分析,发现在第一个IFD中的第4个DE有一定的可疑,该DE指定了数值类型为16位的无符号整数,一共指定了连续的FF个这样的数值。最终通过跟踪调试的方法,定位到了栈溢出发生的函数----read()函数,这是微软下的c标准运行库中的一个函数,功能是从由handle指定的文件中读取由count指定字节数的数据到buffer。而在对tiff文件做处理的文件中调用read()函数时,传入的buffer竟然是内部变量,而且从文件中读取并写入这个内部变量前没有做任何的检查操作。这就是导致漏洞发生的根本原因。
[ 本帖最后由 windrarara 于
21:58 编辑 ]
支持自转!其实先玩上模拟游戏和使用自制程序 ...
感谢你帮助玩友O(∩_∩)O
总评分:&金钱 + 50&
新人欢迎积分0 阅读权限30积分136精华0UID1465978帖子金钱26 威望0
Lv.3, 积分 136, 距离下一级还需 114 积分
UID1465978帖子威望0 多玩草10 草信仰力0
沙发 高手啊& &推测下 破解成功的概率多大啊
新人欢迎积分1 阅读权限50积分1093精华0UID4734272帖子金钱1966 威望1
Lv.5, 积分 1093, 距离下一级还需 1407 积分
UID4734272帖子威望1 多玩草14 草信仰力0
Love♀Pink
新人欢迎积分5 阅读权限80积分15019精华0UID4551214帖子金钱19680 威望10
因包含敏感字符被屏蔽
Lv.8, 积分 15019, 距离下一级还需 4981 积分
UID4551214帖子威望10 多玩草25 草信仰力0
又长见识了[ddt12]
Edward Elric
新人欢迎积分0 阅读权限40积分859精华0UID4186385帖子金钱571 威望0
Lv.4, 积分 859, 距离下一级还需 141 积分
UID4186385帖子威望0 多玩草10 草信仰力0
我看过原文啊
希望迟迟不来 苦死了等的人
新人欢迎积分1 阅读权限40积分624精华0UID4374856帖子金钱12 威望0
Lv.4, 积分 624, 距离下一级还需 376 积分
UID4374856帖子威望0 多玩草10 草信仰力0
那你再预测一下啥时候破解呢
新人欢迎积分1 阅读权限60积分2965精华0UID4844791帖子金钱1608 威望1
Lv.6, 积分 2965, 距离下一级还需 2035 积分
UID4844791帖子威望1 多玩草45 草信仰力0
牛& &顶一下&&
新人欢迎积分1 阅读权限50积分1965精华0UID4732759帖子金钱2760 威望1
Lv.5, 积分 1965, 距离下一级还需 535 积分
UID4732759帖子威望1 多玩草503 草信仰力0
谢谢LZ的无私奉献!~
<朝三暮四郎。
新人欢迎积分1 阅读权限50积分1784精华0UID4002539帖子金钱1759 威望0
还没开始就想到结束了
Lv.5, 积分 1784, 距离下一级还需 716 积分
UID4002539帖子威望0 多玩草36 草信仰力0
期待3K早些破解
新人欢迎积分0 阅读权限40积分372精华0UID4031406帖子金钱229 威望0
Lv.4, 积分 372, 距离下一级还需 628 积分
UID4031406帖子威望0 多玩草10 草信仰力0
新人欢迎积分0 阅读权限50积分1536精华0UID568381帖子金钱1264 威望0
Lv.5, 积分 1536, 距离下一级还需 964 积分
UID568381帖子威望0 多玩草20 草信仰力0
老师好有型啊!!!你太敞亮啦!!!!!
崩溃的小潴
新人欢迎积分1 阅读权限40积分990精华0UID4166873帖子金钱767 威望0
Lv.4, 积分 990, 距离下一级还需 10 积分
UID4166873帖子威望0 多玩草15 草信仰力0
五一前就破解吧 五一时涨价 我们有小3的准备开始耍游戏
新人欢迎积分1 阅读权限50积分1191精华0UID4805641帖子金钱601 威望0
Lv.5, 积分 1191, 距离下一级还需 1309 积分
UID4805641帖子威望0 多玩草10 草信仰力0
好好学习啦
新人欢迎积分0 阅读权限40积分550精华0UID4806687帖子金钱272 威望0
Lv.4, 积分 550, 距离下一级还需 450 积分
UID4806687帖子威望0 多玩草20 草信仰力0
我是楼主,我觉得顺利的话,两个星期之内会出模拟器,反正6月前一定会有个结果,过几天放的可能是更复杂的自制程序,或者真的是模拟器,不然不叫 a bit of awesomeness (作者原话),英文里能称为awesome的东西不多,那是真正的突破才叫awesome,估计要超过爆冲赛车那个漏洞了,MaTiAz是psp破解界的老人,1000时代的很多事情就是他的小组干的,因此他的话应该很可信,我们等着吧……
新人欢迎积分0 阅读权限40积分550精华0UID4806687帖子金钱272 威望0
Lv.4, 积分 550, 距离下一级还需 450 积分
UID4806687帖子威望0 多玩草20 草信仰力0
咦怎么沉掉了……%…………
超级棒棒糖
超级棒棒糖
需要金钱:1100
手机盒子客户端点击或扫描下载
Powered by

参考资料

 

随机推荐