首页 > 代码库 > 第一个Shellcode(Xp sp3)
第一个Shellcode(Xp sp3)
研究挖0day有一阵了,先是汇编后来是逆向,最近才开始尝试第一个shellcode,我是用这个程序尝试溢出的:
/* * fb.c * * Created on: 2014年5月3日 * Author: yuris */ #include<stdio.h> #include<windows.h> #define PASSWORD "1234567" int verify_password (char *password) { int authenticated; char buffer[44]; authenticated=strcmp(password,PASSWORD); strcpy(buffer,password); return authenticated; } main() { int valid_flag=0; char password[1024]; FILE *fp; LoadLibrary("user32.dll"); if(!(fp=fopen("password.txt","rw+"))) { exit(0); } fscanf(fp,"%s",password); valid_flag = verify_password(password); if(valid_flag) { printf("incorrect password!\n\n"); } else { printf("Congratulation! You have passed the verification!\n"); } fclose(fp); }
其实这是0day书中的例子,这里故意载入了user32.dll方便我们调个框。很容易看出来问题在strcpy那里,它没有检查输入。于是我们试着这样输入:
43214321432143214321432143214321432143214321
这样能通过验证,那么同样的原理我们可以让他跳到任意地址,比如我们可以让他跳到正确的分支:
43214321432143214321432143214321432143214321432143210@
……具体是使用winhex输入的,所以看起来是乱码,其实就是把ret覆盖成正确跳转处的地址。那么,再进一步,我们是不是还可以转到自己的代码,其实我们只要把代码放在缓冲区里,然后转到就好,那么可以这样构造:
3跾hsfkuhyuri嬆SPPS戈誻袗悙悙悙悙悙悙悙悙悙悙悙悙悙悙?
可以看见一个弹框(winxp sp3),但是换了一个系统就会有问题,于是加上一个jmp esp定位:
悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙悙S撘w冹"3跾hsfkuhyuri嬆SPPS戈誻蠸?藖|袗悙悙
这里还加入了exit,防止结束后弹框。但是我们发现这样在别的系统上还是有问题,于是我们要让shellcode自己找到api基址,自己加出来地址(这部分还未做),那么就能在所有win系统上使用了。
研究中………………
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。