扇区asp木马
asp木马 时间:2021-04-04 阅读:(
)
高级木马之Grub篇CoolQ主要内容主要内容前言Grub的启动过程装载指定文件的可能性技术细节应用检测注意,本文的环境是Linux/Ext2/3前言前言1989年出现了第一个木马修改utmp,wtmp和lastlog,躲避who,w,last命令LRK4/LRK5替换用户态程序,例如ps,ls,netstat…knark/adore/adore-ng内核模块形式,针对2.
2/2.
4/2.
6SuckIT通过/dev/kmem模块注入技术静态内核补丁还有什么地方没有考虑还有什么地方没有考虑BootLoader!
GrubLilo.
.
.
GrubGrub的启动过程的启动过程综述stage1stage1stage1.
S大小512字节位于MBR或者分区的启动扇区里具体的工作将指定扇区(stage2_sector)装载到0200:0000如果配置stage1.
50800:0000如果没配置stage1.
5stage1.
5stage1.
5和和stage2stage2-rw-r--r--1rootroot82Feb511:24device.
map-rw-r--r--1rootroot10848Feb511:24e2fs_stage1_5-rw-r--r--1rootroot9744Feb511:24fat_stage1_5-rw-r--r--1rootroot8864Feb511:24ffs_stage1_5-rw-------1rootroot800Jun614:53grub.
conf-rw-------1rootroot800Jun614:53menu.
lst-rw-r--r--1rootroot9248Feb511:24minix_stage1_5-rw-r--r--1rootroot12512Feb511:24reiserfs_stage1_5-rw-r--r--1rootroot54044Sep520:01splash.
xpm.
gz-rw-r--r--1rootroot108328May2314:21stage2-rwxr-xr-x1rootroot512May2213:31stage1-rw-r--r--1rootroot8512Feb511:24vstafs_stage1_5文件列表编译过程编译过程e2fs_stage1_5:gcc-oe2fs_stage1_5.
exec-nostdlib-Wl,-N-Wl,-Ttext-Wl,2000e2fs_stage1_5_exec-start.
oe2fs_stage1_5_exec-asm.
oe2fs_stage1_5_exec-common.
oe2fs_stage1_5_exec-char_io.
oe2fs_stage1_5_exec-disk_io.
oe2fs_stage1_5_exec-stage1_5.
oe2fs_stage1_5_exec-fsys_ext2fs.
oe2fs_stage1_5_exec-bios.
oobjcopy-Obinarye2fs_stage1_5.
exece2fs_stage1_5编译过程编译过程((续续))Stage2gcc-opre_stage2.
exec-nostdlib-Wl,-N-Wl,-Ttext-Wl,8200pre_stage2_exec-asm.
opre_stage2_exec-bios.
opre_stage2_exec-boot.
opre_stage2_exec-builtins.
opre_stage2_exec-common.
opre_stage2_exec-char_io.
opre_stage2_exec-cmdline.
opre_stage2_exec-disk_io.
opre_stage2_exec-gunzip.
opre_stage2_exec-fsys_ext2fs.
opre_stage2_exec-fsys_fat.
opre_stage2_exec-fsys_ffs.
opre_stage2_exec-fsys_minix.
opre_stage2_exec-fsys_reiserfs.
opre_stage2_exec-fsys_vstafs.
opre_stage2_exec-hercules.
opre_stage2_exec-serial.
opre_stage2_exec-smp-imps.
opre_stage2_exec-stage2.
opre_stage2_exec-md5.
oobjcopy-Obinarypre_stage2.
execpre_stage2catstartpre_stage2>stage2文件结构文件结构e2fs_stage1_5[start.
S][asm.
S][common.
c][char_io.
c][disk_io.
c][stage1_5.
c][fsys_ext2fs.
c][bios.
c]stage2[start.
S][asm.
S][bios.
c][boot.
c][builtins.
c][common.
c][char_io.
c][cmdline.
c][disk_io.
c][gunzip.
c][fsys_ext2fs.
c][fsys_fat.
c][fsys_ffs.
c][fsys_minix.
c][fsys_reiserfs.
c][fsys_vstafs.
c][hercules.
c][serial.
c][smp-imps.
c][stage2.
c][md5.
c]其中start.
S就是stage1装载的扇区,512Bstart.
Sstart.
S的扇区列表的扇区列表blocklist_default_start:.
long2/*thisisthesectorstartparameter,inlogicalsectorsfromthestartofthedisk,sector0*/blocklist_default_len:/*thisisthenumberofsectorstoread*/#ifdefSTAGE1_5.
word0/*thecommand"install"willfillthisup*/#else.
word(STAGE2_SIZE+511)>>9#endifblocklist_default_seg:#ifdefSTAGE1_5.
word0x220#else.
word0x820/*thisisthesegmentofthestartingaddresstoloadthedatainto*/#endiffirstlist:/*thislabelhastobeafterthelistdata!
!
!
*/一个例子一个例子#hexdump-x-n512/boot/grub/stage2.
.
.
00001d0[0000000000000000][0000000000000000]00001e0[62c7002600641600][62af002600101400]00001f0[6287002600201000][61d00026003f0820]我们应该从后往前看,每次8个字节将从0x2661d0扇区开始的0x3f个扇区装载到从0820:0000开始的内存中将从0x266287扇区开始的0x20个扇区装载到从1000:0000开始的内存中将从0x2662af扇区开始的0x10个扇区装载到从0x1400:0000开始的内存中将从0x2662c7扇区开始的0x64个扇区装载到从0x1600:0000开始的内存中有了这个列表,stage1.
5就不需要依靠文件系统来装载自己了stage1.
5stage1.
5与与stage2stage2的关系的关系如果配置了stage1.
5,stage1首先将stage1.
5的第一个扇区(start.
S)读入内存,依靠start.
s的扇区列表将stage1.
5全部读入内存,然后stage1.
5会用自己的文件系统将stage2读入内存.
此时stage2的start.
S的扇区列表不被使用.
如果没有配置stage1.
5,stage1会将stage2的第一个扇区(start.
S)读入内存,然后依靠扇区列表将stage2全部读入内存因此,如果把/boot/grub/stage2改名为stage2.
bak,在配置了stage1.
5的情况下,启动会失败;如果没有配置,启动仍然不受影响.
GrubGrub工具工具#grubgrub>find/grub/stage2如果你有单独的启动分区grub>find/boot/grub/stage2如果你没有有单独的启动分区(hd0,0)root(hd0,0)设置启动分区的根grub>setup(hd0)如果你想把grub装在mbr中grub>setup(hd0,0)如果你想把grub装载启动扇区里Checkingif"/boot/grub/stage1"exists.
.
.
yesCheckingif"/boot/grub/stage2"exists.
.
.
yesCheckingif"/boot/grub/e2fs_stage1_t"exists.
.
.
yesRunning"embed/boot/grub/e2fs_stage1_5(hd0)".
.
.
22sectorsareembededsucceeded.
current_ino=INODE_OF_FILE_FAKE(在某些条件下)4)跳回如何实现如何实现current_inocurrent_ino=INODE_OF_FILE_FAKE=INODE_OF_FILE_FAKEintext2fs_dir(char*dirname){intcurrent_ino=EXT2_ROOT_INO;/*startattheroot*/intupdir_ino=current_ino;/*theparentofthecurrentdirectory*/.
.
优化的情况"movl$2,%reg""movl%reg,0xffffXXXX($esp)""movl%reg,0xffffYYYY($esp)"其它的情况可能性较低xor%eax,%eax;inc%eax;inc%eaxxor%eax,%eax;movb$0x2,%al我们的方法我们的方法push%ebpjmpembedmov%esp,%ebpPush%edipush%esisub$0x42c,%espmov$2,0xfffffbe4(%esp)mov$2,0xfffffbe0(%esp)back:push%ebpmov%esp,%ebpmush%edipush%esisub$0x42c,%espmov$2,0xfffffbe4(%esp)mov$2,0xfffffbe0(%esp)jmpbackpush%ebpmov%esp,%ebpmush%edipush%esisub$0x42c,%espmov$,0xfffffbe4(%esp)mov$,0xfffffbe0(%esp)jmpbacknot_change_inodechange_inodeINODE_OF_FAKE_FILEext2fs_dirembed保存环境比较字符串如果符合,转1否则转21:恢复环境jmpchange_inode2:恢复环境jmpnot_change_inode如何定位如何定位ext2fs_dirext2fs_dir函数函数由于stage2是由objcopy生成的,因此所有的ELF信息都被去除了,没有符号表,定位ext2fs_dir就必须另找他法.
尝试一尝试一#definelong2(n)ffz(~(n))static__inline__unsignedlongffz(unsignedlongword){__asm__("bsfl%1,%0":"=r"(word):"r"(~word));returnword;}group_desc=group_id>>log2(EXT2_DESC_PER_BLOCK(SUPERBLOCK));ffz是__inline__,因此最后的编译结果难以预测,可能展开,也可能不展开,放弃!
尝试二尝试二SUPERBLOCK->s_inodes_per_groupgroup_id=(current_ino-1)/(SUPERBLOCK->s_inodes_per_group);#defineRAW_ADDR(x)(x)#defineFSYS_BUFRAW_ADDR(0x68000)#defineSUPERBLOCK((structext2_super_block*)(FSYS_BUF))structext2_super_block{.
.
.
__u32s_inodes_per_group/*#Inodespergroup*/.
.
.
SUPERBLOCK->s_inodes_per_group位于0x68028,往回寻找函数的开始问题如何寻找RET单纯往回寻找0xc3如何确定ext2fs_dir开始函数的对齐(4/8/16字节,指令不定)结论:可行但不可靠尝试三尝试三最后,我们注意到了fsys_tablestructfsys_entryfsys_table[NUM_FSYS+1]={.
.
.
#ifdefFSYS_FAT{"fat",fat_mount,fat_read,fat_dir,0,0},#endif#ifdefFSYS_EXT2FS{"ext2fs",ext2fs_mount,ext2fs_read,ext2fs_dir,0,0},#endif#ifdefFSYS_MINIX{"minix",minix_mount,minix_read,minix_dir,0,0},#endif.
.
.
};fsys_table是这样被调用的:if((*(fsys_table[fsys_type].
mount_func)1)我们的方法我们的方法1)在stage2中搜索"ext2fs"字符串,获得它在stage2中的偏移量,并转换成在内存中的地址(stage2从0800:0000开始),记作addr_12)在stage2中搜索addr_1,获得它的偏移量,并继续读取5个int,记作(A,B,C,D,E),然后判断Aopen_device()->attemp_mount()for(fsys_type=0;fsys_typemount_func)1;fsys_type++);Fat在ext2fs前面,因此fat_mount在ext2fs_mount前运行最后,我们选择了minix_dir如何变得更隐蔽如何变得更隐蔽上述方法的缺点:改变了stage2的校验和对策:让stage1装载stage2_fake注意事项:重写stage2_fake的扇区列表如果没有配置stage1.
5,修改stage1直接调用stage2_fake(stage2_sector填入stage2_fake的扇区地址),这样有可能修改MBR如何变得更隐蔽如何变得更隐蔽(Cont.
)(Cont.
)如果配置了stage1.
5直接修改stage1跳过stage1.
5,装载stage2(修改stage2_sector,stage2_address,stage2_segment)问题:MBR改变/启动信息改变利用相似的技术修改stage1.
5的文件系统,重写stage1.
5的扇区列表你可以继续隐藏stage2_fake和file_fakeWannaanti-FSCKNoproblem…应用应用与静态补丁相结合1)cpkernel.
origkernel.
fake2)对kernel.
fake打静态补丁3)cpstage2stage2.
fake4)hack_grubstage2.
fakekernel.
originode_of_kernel.
fake5)隐藏kernel.
fake和stage2.
fake(可选)应用应用(Cont.
)(Cont.
)与模块注射相结合1)cpinitrd.
img.
originitrd.
img.
fake2)对initrd.
img.
fake进行模块注入,例如.
ext3.
[k]o3)cpstage2stage2.
fake4)hack_grubstage2.
fakeinitrd.
imginode_of_initrd.
img.
fake5)隐藏initrd.
img.
fake和stage2.
fake(可选)使用假的grub.
confMore…检测检测1)注意MBR以及后边的63个扇区,还要关注每个分区的启动分区2)如果没有1),那么a)如果配置了stage1.
5,从第三个扇区开始(绝对扇区,第一个扇区是MBR)与/boot/grub/e2fs_stage1_5做比较b)如果没有配置stage1.
5,看stage2_sector是否指向真实的/boot/grub/stage2文件3)检查/boot/grub/stage2文件和/boot/grub/e2fs_stage1_5的文件完整性4)如果3)也无法完成,就比较困难了(不合格的管理员)a)如果怀疑内核有问题,可以与磁盘上的内核文件进行逐字节的比较b)如果怀疑模块有问题,可以把它dump出来并进行反汇编LiloLilo呢呢Lilo没有文件系统,因此不需要像Grub那样给内建的mini-FS打补丁Lilo主要依靠/boot/bootsect.
b和/boot/map.
b一个懒的方法:lilo–Cfake_config更多的细节Dependsonyourself…感谢感谢本文的许多地方得到了madsys和grip2的帮助测试使用的多个发行版的stage2文件由airsupply及热心网友提供全文由zhtq帮助审稿参考参考DesignandImplementationoftheSecondExtendedFilesystemStaticKernelPatchingInfectingLoadableKernelModulesmoduleinjectionin2.
6kernelWaystohidefilesinext2/3filesystemWaystofind2.
6kernelrootkitsQuestions&AnswersQuestions&Answers
cloudcone经常性有特价促销VPS放出来,每次的数量都是相当有限的,为了方便、及时帮助大家,主机测评这里就做这个cloudcone特价VPS补货专题吧,以后每次放货我会在这里更新一下日期,方便大家秒杀!官方网站:https://cloudcone.com/预交费模式,需要充值之后方可使用,系统自动扣费!信用卡、PayPal、支付宝,均可付款购买!为什么说cloudcone值得买?cloudc...
ZJI发布了一款7月份特别促销独立服务器:香港邦联四型,提供65折优惠码,限量30台(每用户限购1台),优惠后每月520元起。ZJI是原来Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务。下面列出这款服务器的配置信息。香港邦联四型CPU:2*E5-2...
80vps怎么样?80vps最近新上了香港服务器、美国cn2服务器,以及香港/日本/韩国/美国多ip站群服务器。80vps之前推荐的都是VPS主机内容,其实80VPS也有独立服务器业务,分布在中国香港、欧美、韩国、日本、美国等地区,可选CN2或直连优化线路。如80VPS香港独立服务器最低月付420元,美国CN2 GIA独服月付650元起,中国香港、日本、韩国、美国洛杉矶多IP站群服务器750元/月...
asp木马为你推荐
硬盘工作原理硬盘的读写原理bbs.99nets.com怎么制作RO单机rawtools相机中的RAW是什么意思?www.bbb336.comwww.zzfyx.com大家感觉这个网站咋样,给俺看看呀。多提意见哦。哈哈。m.kan84.net那里有免费的电影看?javbibibibi直播是真的吗杨丽晓博客明星的最新博文www.bbb551.com广州欢乐在线551要收费吗?www.idanmu.com万通奇迹,www.wcm77.HK 是传销么?baqizi.cc曹操跟甄洛是什么关系
大连虚拟主机 上海vps 个人域名备案 中国万网虚拟主机 香港加速器 asp.net主机 hawkhost优惠码 java主机 sockscap seovip http500内部服务器错误 2017年万圣节 免费网络电视 长沙服务器 湖南服务器托管 qingyun gspeed 七夕快乐英文 刀片服务器的优势 徐正曦 更多