欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]WarGame-narnia6 解题思路

[原创]WarGame-narnia6 解题思路

Narnia6源码如下

/*

    This program is free software; you can redistribute it and/or modify

    it under the terms of the GNU General Public License as published by

    the Free Software Foundation; either version 2 of the License, or

    (at your option) any later version.

    This program is distributed in the hope that it will be useful,

    but WITHOUT ANY WARRANTY; without even the implied warranty of

    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the

    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License

    along with this program; if not, write to the Free Software

    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

*/

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

extern char **environ;

// tired of fixing values...

// - morla

unsigned long get_sp(void) {

       __asm__("movl %esp,%eax\n\t"

               "and $0xff000000, %eax"

               );

}

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

	char b1[8], b2[8];

	int  (*fp)(char *)=(int(*)(char *))&puts, i;

	if(argc!=3){ printf("%s b1 b2\n", argv[0]); exit(-1); }

	/* clear environ */

	for(i=0; environ[i] != NULL; i++)

		memset(environ[i], '\0', strlen(environ[i]));

	/* clear argz    */

	for(i=3; argv[i] != NULL; i++)

		memset(argv[i], '\0', strlen(argv[i]));

	strcpy(b1,argv[1]);

	strcpy(b2,argv[2]);

	//if(((unsigned long)fp & 0xff000000) == 0xff000000)

	if(((unsigned long)fp & 0xff000000) == get_sp())

		exit(-1);

	setreuid(geteuid(),geteuid());

    fp(b1);

	exit(1);

}

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功