扇区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

快云科技,美国VPS 2H5G独享20M 仅售19.8/月  年付仅需148

快云科技已稳步运行进两年了 期间没出现过线路不稳 客户不满意等一系列问题 本司资质齐全 持有IDC ICP ISP等正规手续 有独特的网站设计理念 在前几天刚是参加过魔方系统举行的设计大赛拿获最佳设计奖第一名 本公司主营产品 香港弹性云服务器,美国vps和日本vps,香港物理机,国内高防物理机以及美国日本高防物理机 2020年的国庆推出过一款香港的回馈用户特惠机 已作为传家宝 稳定运行 马上又到了...

Sharktech:鲨鱼机房1Gbps无限流量美国服务器;丹佛$49/月起,洛杉矶$59/月起

sharktech怎么样?sharktech鲨鱼机房(Sharktech)我们也叫它SK机房,是一家成立于2003年的老牌国外主机商,提供的产品包括独立服务器租用、VPS主机等,自营机房在美国洛杉矶、丹佛、芝加哥和荷兰阿姆斯特丹等,主打高防产品,独立服务器免费提供60Gbps/48Mpps攻击防御。机房提供1-10Gbps带宽不限流量服务器,最低丹佛/荷兰机房每月49美元起,洛杉矶机房最低59美元...

UCloud:美国云服务器,洛杉矶节点大促,低至7元起/1个月

ucloud美国云服务器怎么样?ucloud是国内知名云计算品牌服务商家,目前推出全球多地机房的海外云服务器。UCloud主打的优势是海外多机房,目前正在进行的2021全球大促活动参与促销的云服务器机房就多达18个。UCloud新一代旗舰产品快杰云服务器已上线洛杉矶节点,覆盖北美和亚太地区,火热促销中, 首月低至7元,轻松体验具备优秀性能与极高性价比的快杰云服务器。点击进入:ucloud美国洛杉矶...

asp木马为你推荐
国家网络安全部国家安全部每年怎么招人?都是啥时候招人?招人的条件是啥?沙滩捡12块石头价值近百万捡块石头价值一亿 奇石到底应该怎么定价敬汉卿姓名被抢注身份证号码被别人抢注了12306帐号怎么办杰景新特萨克斯吉普特500是台湾原产的吗杰景新特谁给我一个李尔王中的葛罗斯特这个人物的分析?急 ....先谢谢了www.99cycy.com谁在这个http://www.sifangmall.com网站上买过东西?www.idanmu.com腾讯有qqsk.zik.mu这个网站吗?www.toutoulu.com外链方案到底应该怎么弄呢bihaiyinsha谁知道长葛洗浴中心如何消费?干支论坛天干地支???
郑州服务器租用 vps服务器 greengeeks 骨干网 linode 站群服务器 亚洲小于500m 架设服务器 北京双线 idc是什么 亚马逊香港官网 中国网通测速 支付宝扫码领红包 能外链的相册 双12 外贸空间 沈阳主机托管 服务器维护 可外链的相册 腾讯网盘 更多