扇区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
TabbyCloud迎来一周岁的生日啦!在这一年里,感谢您包容我们的不足和缺点,在您的理解与建议下我们也在不断改变与成长。为庆祝TabbyCloud运营一周年和七夕节,TabbyCloud推出以下活动。TabbyCloud周年庆&七夕节活动官方网站:https://tabbycloud.com/香港CN2: https://tabbycloud.com/cart.php?gid=16购买链...
10gbiz怎么样?10gbiz在本站也多次分享过,是一家成立于2020的国人主机商家,主要销售VPS和独立服务器,机房目前有中国香港和美国洛杉矶、硅谷等地,线路都非常不错,香港为三网直连,电信走CN2,洛杉矶线路为三网回程CN2 GIA,10gbiz商家七月连续推出各种优惠活动,除了延续之前的VPS产品4折优惠,目前增加了美国硅谷独立服务器首月半价的活动,有需要的朋友可以看看。10gbiz优惠码...
百星数据(baixidc),2012年开始运作至今,主要提供境外自营云服务器和独立服务器出租业务,根据网络线路的不同划分为:美国cera 9929、美国cn2 gia、香港cn2 gia、韩国cn2 gia、日本cn2 gia等云服务器及物理服务器业务。目前,百星数据 推出的日本、韩国、香港cn2 gia云服务器,2核2G/40G/5M带宽低至60元/月,600元/年。百星数据优惠码:优惠码:30...
asp木马为你推荐
蓝瘦香菇被抢注蓝瘦香菇当事人被质疑炒作称没想红 蓝瘦香菇什么意思乐划锁屏oppofindx2乐划锁屏点进去闪退 是什么情况?渣渣辉商标渣渣辉传奇哪个职业好permissiondenied求问permission denied是什么意思啊?地图应用手机地图软件那么多,都不知道用哪个好了?比肩工场比肩夺财,行官杀制比是什么意思?月神谭有没有什么好看的小说?拒绝言情小说!www.haole012.com012qq.com真的假的336.com求一个游戏的网站 你懂得javmoo.com0904-javbo.net_avop210hhb主人公叫什么,好喜欢,有知道的吗
krypt hostmaster 香港主机 免费名片模板 轻量 免费mysql数据库 工信部网站备案查询 杭州电信宽带优惠 美国迈阿密 阵亡将士纪念日 winserver2008r2 globalsign 2016黑色星期五 傲盾代理 文件传输 内存 大硬盘分区 ddos防火墙 隐士ddos 宿主机 更多