<?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://wiki.zenk-security.com/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://wiki.zenk-security.com/feed.php">
        <title>Zenk - Security exploit_exercises_protostar</title>
        <description></description>
        <link>http://wiki.zenk-security.com/</link>
        <image rdf:resource="http://wiki.zenk-security.com/lib/tpl/dokuwiki/images/favicon.ico" />
       <dc:date>2026-05-05T10:42:39+02:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:final0&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:final1&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format0&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format1&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format2&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format3&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format4&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:heap0&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:heap1&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:heap2&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net0&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net1&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net2&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net3&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack0&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack1&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack2&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack3&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack4&amp;rev=1491744837&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack5&amp;rev=1346503701&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack6&amp;rev=1346504633&amp;do=diff"/>
                <rdf:li rdf:resource="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack7&amp;rev=1491744837&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://wiki.zenk-security.com/lib/tpl/dokuwiki/images/favicon.ico">
        <title>Zenk - Security</title>
        <link>http://wiki.zenk-security.com/</link>
        <url>http://wiki.zenk-security.com/lib/tpl/dokuwiki/images/favicon.ico</url>
    </image>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:final0&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:final0</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:final0&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &quot;../common/common.c&quot;

#define NAME &quot;final0&quot;
#define UID 0
#define GID 0
#define PORT 2995

/*
* Read the username in from the network
*/

char *get_username()
{
    char buffer[512];
    char *q;
    int i;

    memset(buffer, 0, sizeof(buffer));
    gets(buffer);

    /* Strip off trailing new line characters */
    q = strchr(buffer, '\n');
    if(q) *q = 0;
    q = strchr(buffer, '\r');
    if(q) *q = 0;

    /* Convert to lower case */
    for(i = 0; i &lt; strlen(buffer); i++) {
     …</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:final1&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:final1</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:final1&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &quot;../common/common.c&quot;

#include &lt;syslog.h&gt;

#define NAME &quot;final1&quot;
#define UID 0
#define GID 0
#define PORT 2994

char username[128];
char hostname[64];

void logit(char *pw)
{
    char buf[512];
    snprintf(buf, sizeof(buf), &quot;Login from %s as [%s] with password [%s]\n&quot;, hostname, username, pw);
    syslog(LOG_USER|LOG_DEBUG, buf);
}

void trim(char *str)
{
    char *q;

    q = strchr(str, '\r');
    if(q) *q = 0;
    q = strchr(str, '\n');
    if(q) *q = 0;
}

void parser()
{
    char …</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format0&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:format0</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format0&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

void vuln(char *string)
{
	volatile int target;
	char buffer[64];

	target = 0;

	sprintf(buffer, string);
	
	if(target == 0xdeadbeef) {
		printf(&quot;you have hit the target correctly :)\n&quot;);
	}
}

int main(int argc, char **argv)
{
	vuln(argv[1]);
}</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format1&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:format1</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format1&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int target;

void vuln(char *string)
{
	printf(string);
	
	if(target) {
		printf(&quot;you have modified the target :)\n&quot;);
	}
}

int main(int argc, char **argv)
{
	vuln(argv[1]);
}</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format2&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:format2</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format2&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int target;

void vuln()
{
	char buffer[512];

	fgets(buffer, sizeof(buffer), stdin);
	printf(buffer);
	
	if(target == 64) {
		printf(&quot;you have modified the target :)\n&quot;);
	} else {
		printf(&quot;target is %d :(\n&quot;, target);
	}
}

int main(int argc, char **argv)
{
	vuln();
}</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format3&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:format3</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format3&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int target;

void printbuffer(char *string)
{
	printf(string);
}

void vuln()
{
	char buffer[512];

	fgets(buffer, sizeof(buffer), stdin);

	printbuffer(buffer);
	
	if(target == 0x01025544) {
		printf(&quot;you have modified the target :)\n&quot;);
	} else {
		printf(&quot;target is %08x :(\n&quot;, target);
	}
}

int main(int argc, char **argv)
{
	vuln();
}</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format4&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:format4</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:format4&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int target;

void hello()
{
	printf(&quot;code execution redirected! you win\n&quot;);
	_exit(1);
}

void vuln()
{
	char buffer[512];

	fgets(buffer, sizeof(buffer), stdin);

	printf(buffer);

	exit(1);	
}

int main(int argc, char **argv)
{
	vuln();
}</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:heap0&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:heap0</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:heap0&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;sys/types.h&gt;

struct data {
	char name[64];
};

struct fp {
	int (*fp)();
};

void winner()
{
	printf(&quot;level passed\n&quot;);
}

void nowinner()
{
	printf(&quot;level has not been passed\n&quot;);
}

int main(int argc, char **argv)
{
	struct data *d;
	struct fp *f;

	d = malloc(sizeof(struct data));
	f = malloc(sizeof(struct fp));
	f-&gt;fp = nowinner;

	printf(&quot;data is at %p, fp is at %p\n&quot;, d, f);

	strcpy(d-&gt;name, argv[1])…</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:heap1&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:heap1</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:heap1&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;string.h&gt;
#include &lt;stdio.h&gt;
#include &lt;sys/types.h&gt;

struct internet {
	int priority;
	char *name;
};

void winner()
{
	printf(&quot;and we have a winner @ %d\n&quot;, time(NULL));
}

int main(int argc, char **argv)
{
	struct internet *i1, *i2, *i3;

	i1 = malloc(sizeof(struct internet));
	i1-&gt;priority = 1;
	i1-&gt;name = malloc(8);

	i2 = malloc(sizeof(struct internet));
	i2-&gt;priority = 2;
	i2-&gt;name = malloc(8);

	strcpy(i1-&gt;name, argv[1]);
	strcpy(i2-&gt;name,…</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:heap2&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:heap2</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:heap2&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;string.h&gt;
#include &lt;sys/types.h&gt;
#include &lt;stdio.h&gt;

struct auth {
	char name[32];
	int auth;
};

struct auth *auth;
char *service;

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

	while(1) {
		printf(&quot;[ auth = %p, service = %p ]\n&quot;, auth, service);

		if(fgets(line, sizeof(line), stdin) == NULL) break;
		
		if(strncmp(line, &quot;auth &quot;, 5) == 0) {
			auth = malloc(sizeof(auth));
			memset(auth, 0, sizeof(auth));
			if(strlen(line + 5) &lt; 31) {
	…</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net0&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:net0</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net0&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &quot;../common/common.c&quot;

#define NAME &quot;net0&quot;
#define UID 999
#define GID 999
#define PORT 2999

void run()
{
    unsigned int i;
    unsigned int wanted;

    wanted = random();

    printf(&quot;Please send '%d' as a little endian 32bit int\n&quot;, wanted);

    if(fread(&amp;i, sizeof(i), 1, stdin) == NULL) {
        errx(1, &quot;:(\n&quot;);
    }

    if(i == wanted) {
        printf(&quot;Thank you sir/madam\n&quot;);
    } else {
        printf(&quot;I'm sorry, you sent %d instead\n&quot;, i);
    }
}

int main(int argc, cha…</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net1&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:net1</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net1&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &quot;../common/common.c&quot;

#define NAME &quot;net1&quot;
#define UID 998
#define GID 998
#define PORT 2998

void run()
{
    char buf[12];
    char fub[12];
    char *q;

    unsigned int wanted;

    wanted = random();

    sprintf(fub, &quot;%d&quot;, wanted);

    if(write(0, &amp;wanted, sizeof(wanted)) != sizeof(wanted)) { 
        errx(1, &quot;:(\n&quot;);
    }

    if(fgets(buf, sizeof(buf)-1, stdin) == NULL) {
        errx(1, &quot;:(\n&quot;);
    }

    q = strchr(buf, '\r'); if(q) *q = 0;
    q = strchr(buf, '\n'); if(q) …</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net2&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:net2</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net2&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &quot;../common/common.c&quot;

#define NAME &quot;net2&quot;
#define UID 997
#define GID 997
#define PORT 2997

void run()
{
    unsigned int quad[4];
    int i;
    unsigned int result, wanted;

    result = 0;
    for(i = 0; i &lt; 4; i++) {
        quad[i] = random();
        result += quad[i];

        if(write(0, &amp;(quad[i]), sizeof(result)) != sizeof(result)) { 
            errx(1, &quot;:(\n&quot;);
        }
    }

    if(read(0, &amp;wanted, sizeof(result)) != sizeof(result)) {
        errx(1, &quot;:&lt;\n&quot;);
    }


   …</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net3&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:net3</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:net3&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &quot;../common/common.c&quot;

#define NAME &quot;net3&quot;
#define UID 996
#define GID 996
#define PORT 2996

/*
* Extract a null terminated string from the buffer 
*/

    int get_string(char **result, unsigned char *buffer, u_int16_t len)
{
    unsigned char byte;

    byte = *buffer;

    if(byte &gt; len) errx(1, &quot;badly formed packet&quot;);
    *result = malloc(byte);
    strcpy(*result, buffer + 1);

    return byte + 1;
}

/*
* Check to see if we can log into the host
*/

    int login(unsigned char *buf…</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack0&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:stack0</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack0&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;

int main(int argc, char **argv)
{
	volatile int modified;
	char buffer[64];

	modified = 0;
	gets(buffer);

	if(modified != 0) {
		printf(&quot;you have changed the 'modified' variable\n&quot;);
	} else {
		printf(&quot;Try again?\n&quot;);
	}
}</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack1&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:stack1</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack1&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main(int argc, char **argv)
{
	volatile int modified;
	char buffer[64];

	if(argc == 1) {
		errx(1, &quot;please specify an argument\n&quot;);
	}

	modified = 0;
	strcpy(buffer, argv[1]);

	if(modified == 0x61626364) {
		printf(&quot;you have correctly got the variable to the right value\n&quot;);
	} else {
		printf(&quot;Try again, you got 0x%08x\n&quot;, modified);
	}
}</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack2&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:stack2</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack2&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

int main(int argc, char **argv)
{
	volatile int modified;
	char buffer[64];
	char *variable;

	variable = getenv(&quot;GREENIE&quot;);

	if(variable == NULL) {
		errx(1, &quot;please set the GREENIE environment variable\n&quot;);
	}

	modified = 0;

	strcpy(buffer, variable);

	if(modified == 0x0d0a0d0a) {
		printf(&quot;you have correctly modified the variable\n&quot;);
	} else {
		printf(&quot;Try again, you got 0x%08x\n&quot;, modified);
	}

}</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack3&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:stack3</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack3&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

void win()
{
	printf(&quot;code flow successfully changed\n&quot;);
}

int main(int argc, char **argv)
{
	volatile int (*fp)();
	char buffer[64];

	fp = 0;

	gets(buffer);

	if(fp) {
		printf(&quot;calling function pointer, jumping to 0x%08x\n&quot;, fp);
		fp();
	}
}</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack4&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:stack4</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack4&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

void win()
{
	printf(&quot;code flow successfully changed\n&quot;);
}

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

	gets(buffer);
}


Si vous n'avez aucune base en buffer overflow classique, je vous conseil de lire cet article : &lt;http://www.ghostsinthestack.org/article-13-les-buffers-overflows.html&gt;</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack5&amp;rev=1346503701&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2012-09-01T14:48:21+02:00</dc:date>
        <title>exploit_exercises_protostar:stack5</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack5&amp;rev=1346503701&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

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

	gets(buffer);
}


Le niveau est le même que le précédent, sauf que cette fois ci nous devons faire sauter le programme sur notre propre shellcode. On décidé de stocker notre shellcode dans une variable d'environnement.</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack6&amp;rev=1346504633&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2012-09-01T15:03:53+02:00</dc:date>
        <title>exploit_exercises_protostar:stack6</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack6&amp;rev=1346504633&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

void getpath()
{
	char buffer[64];
	unsigned int ret;

	printf(&quot;input path please: &quot;); fflush(stdout);

	gets(buffer);

	ret = __builtin_return_address(0);

	if((ret &amp; 0xbf000000) == 0xbf000000) {
		printf(&quot;bzzzt (%p)\n&quot;, ret);
		_exit(1);
	}

	printf(&quot;got path %s\n&quot;, buffer);
}

int main(int argc, char **argv)
{
	getpath();
}</description>
    </item>
    <item rdf:about="http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack7&amp;rev=1491744837&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-04-09T15:33:57+02:00</dc:date>
        <title>exploit_exercises_protostar:stack7</title>
        <link>http://wiki.zenk-security.com/doku.php?id=exploit_exercises_protostar:stack7&amp;rev=1491744837&amp;do=diff</link>
        <description>#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;

char *getpath()
{
	char buffer[64];
	unsigned int ret;

	printf(&quot;input path please: &quot;); fflush(stdout);

	gets(buffer);

	ret = __builtin_return_address(0);

	if((ret &amp; 0xb0000000) == 0xb0000000) {
		printf(&quot;bzzzt (%p)\n&quot;, ret);
		_exit(1);
	}

	printf(&quot;got path %s\n&quot;, buffer);
	return strdup(buffer);
}

int main(int argc, char **argv)
{
	getpath();
}</description>
    </item>
</rdf:RDF>
