From c3ac7e2fb3ff6de1b54ff804303c6767b58ece4d Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 5 Sep 2023 08:24:19 +0200 Subject: [PATCH 1/4] pyny writeup please gimme meme points for that solution --- DownUnderCTF 2023/beginner/pyny/README.md | 50 ++++++++++++++++++ .../beginner/pyny/justuseltrace.jpg | Bin 0 -> 39556 bytes 2 files changed, 50 insertions(+) create mode 100644 DownUnderCTF 2023/beginner/pyny/README.md create mode 100644 DownUnderCTF 2023/beginner/pyny/justuseltrace.jpg diff --git a/DownUnderCTF 2023/beginner/pyny/README.md b/DownUnderCTF 2023/beginner/pyny/README.md new file mode 100644 index 00000000..fe888ac3 --- /dev/null +++ b/DownUnderCTF 2023/beginner/pyny/README.md @@ -0,0 +1,50 @@ +# pyny + +You probably want to do some easy stuff, like.. "decoding", and sure you can do that apparently. + +Well I'm different, and went for the debugger route. Sadly the debugger shipped with Pycharm and VSCode seems to be incapable of running this punycode. +So if a python is based on C and the python debugger is not an option, what do you do? Correct, you step through the literal python elf with gdb. Set a breakpoint at several Functions that might compare memory and get ready to cramp from the constant Enter Spam in order to continue through that binary. At Some point you will get the flag, but that can be optimised. + +Luckily some guy called Juan Cespedes, might have had a similar problem and decided to do something: + +![](justuseltrace.jpg) + +And thats what i did (plus some minor modification to shrink the output): + +```bash +$ echo abc | ltrace python3 pyny.py 2>&1 | grep "DUCTF" -A 10 +memcpy(0x7f4171ffbe90, "'DUCTF{%s}'", 11) = 0x7f4171ffbe90 +__ctype_b_loc() = 0x7f41724fbfe0 +memcpy(0x7f4171fe9e30, "\340\253\377qA\177\0\005\037rA\177\0\0p:\004rA\177\0\0\020\262\245\0\0\0\0\0"..., 192) = 0x7f4171fe9e30 +memset(0xdb2210, '\0', 24) = 0xdb2210 +strlen("DUCTF{%s}'") = 10 +strchr("DUCTF{%s}'", '\\') = nil +memcpy(0x7f4172043be0, "DUCTF{%s}", 9) = 0x7f4172043be0 +memcpy(0x7f417203f620, "", 0) = 0x7f417203f620 +memcpy(0x7f4172008b20, "\001\0\0\0\0\0\0\0\200Y\225\0\0\0\0\0\037\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"..., 100) = 0x7f4172008b20 +memcpy(0x7f41720501d0, "\341\265\226\312\270\341\265\227\312\260\302\272\342\201\277_\312\267\302\252\312\263\341\265\220\341\265\230\341\265\226", 31) = 0x7f41720501d0 +strlen("\341\265\226\312\270\341\265\227\312\260\302\272\342\201\277_\312\267\302\252\312\263\341\265\220\341\265\230\341\265\226") = 31 +memcpy(0x7f4172008b20, "\001\0\0\0\0\0\0\0\200Y\225\0\0\0\0\0\037\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"..., 100) = 0x7f4172008b20 +strlen("NFKC") = 4 +memcpy(0x7f4172050220, "NFKC", 4) = 0x7f4172050220 +strlen("NFC") = 3 +memcmp(0x7f4172050220, 0x85ba56, 3, 0xa476e0) = 8 +strlen("NFKC") = 4 +-- +memcpy(0x7f4172198560, "DUCTF{", 6) = 0x7f4172198560 +memcpy(0x7f4172198566, "python_warmup", 13) = 0x7f4172198566 +memcpy(0x7f4172198573, "}", 1) = 0x7f4172198573 +memcpy(0x7f417203edd0, "\001\0\0\0\0\0\0\0\200Y\225\0\0\0\0\0m\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377"..., 69) = 0x7f417203edd0 +memset(0x7f417203f708, '\0', 32) = 0x7f417203f708 +strlen("sep") = 3 +memcmp(0x9888f0, 0x7f41720504e0, 3, 0xd47b70) = 0 +strlen("end") = 3 +memcpy(0x7f41720504e0, "end", 3) = 0x7f41720504e0 +memcmp(0x968390, 0x7f41720504e0, 3, 0xd47b70) = 0 +``` + +And we can literally see python move that flag into memory and grab it for some quick points. + +``` +DUCTF{python_warmup} +``` \ No newline at end of file diff --git a/DownUnderCTF 2023/beginner/pyny/justuseltrace.jpg b/DownUnderCTF 2023/beginner/pyny/justuseltrace.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab94f0fba29b820db8fd9649cc535a5ac2ff1637 GIT binary patch literal 39556 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 Date: Tue, 5 Sep 2023 11:28:02 +0200 Subject: [PATCH 2/4] Update DownUnderCTF 2023/beginner/pyny/README.md --- DownUnderCTF 2023/beginner/pyny/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/DownUnderCTF 2023/beginner/pyny/README.md b/DownUnderCTF 2023/beginner/pyny/README.md index fe888ac3..306a3c18 100644 --- a/DownUnderCTF 2023/beginner/pyny/README.md +++ b/DownUnderCTF 2023/beginner/pyny/README.md @@ -1,5 +1,15 @@ # pyny +## Source + +``` +#coding: punycode +def _(): pass +('Correct!' if ('Enter the flag: ') == 'DUCTF{%s}' % _.____ else 'Wrong!')-gdd7dd23l3by980a4baunja1d4ukc3a3e39172b4sagce87ciajq2bi5atq4b9b3a3cy0gqa9019gtar0ck +``` + +## Solve + You probably want to do some easy stuff, like.. "decoding", and sure you can do that apparently. Well I'm different, and went for the debugger route. Sadly the debugger shipped with Pycharm and VSCode seems to be incapable of running this punycode. From 4ff011a5654009e0871dbf9e93274b3366a5ce8b Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 5 Sep 2023 11:28:39 +0200 Subject: [PATCH 3/4] Update DownUnderCTF 2023/beginner/pyny/README.md --- DownUnderCTF 2023/beginner/pyny/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownUnderCTF 2023/beginner/pyny/README.md b/DownUnderCTF 2023/beginner/pyny/README.md index 306a3c18..7c05b14f 100644 --- a/DownUnderCTF 2023/beginner/pyny/README.md +++ b/DownUnderCTF 2023/beginner/pyny/README.md @@ -13,7 +13,7 @@ def _(): pass You probably want to do some easy stuff, like.. "decoding", and sure you can do that apparently. Well I'm different, and went for the debugger route. Sadly the debugger shipped with Pycharm and VSCode seems to be incapable of running this punycode. -So if a python is based on C and the python debugger is not an option, what do you do? Correct, you step through the literal python elf with gdb. Set a breakpoint at several Functions that might compare memory and get ready to cramp from the constant Enter Spam in order to continue through that binary. At Some point you will get the flag, but that can be optimised. +So if python is based on C and the python debugger is not an option, what do you do? Correct, you step through the literal python elf with gdb. Set a breakpoint at several Functions that might compare memory and get ready to cramp from the constant Enter Spam in order to continue through that binary. At Some point you will get the flag, but that can be optimised. Luckily some guy called Juan Cespedes, might have had a similar problem and decided to do something: From 533328e7a7ffcc7ec651bf7b0759c3a194f78481 Mon Sep 17 00:00:00 2001 From: simon Date: Tue, 5 Sep 2023 11:29:05 +0200 Subject: [PATCH 4/4] Update DownUnderCTF 2023/beginner/pyny/README.md --- DownUnderCTF 2023/beginner/pyny/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DownUnderCTF 2023/beginner/pyny/README.md b/DownUnderCTF 2023/beginner/pyny/README.md index 7c05b14f..103a92e5 100644 --- a/DownUnderCTF 2023/beginner/pyny/README.md +++ b/DownUnderCTF 2023/beginner/pyny/README.md @@ -13,7 +13,7 @@ def _(): pass You probably want to do some easy stuff, like.. "decoding", and sure you can do that apparently. Well I'm different, and went for the debugger route. Sadly the debugger shipped with Pycharm and VSCode seems to be incapable of running this punycode. -So if python is based on C and the python debugger is not an option, what do you do? Correct, you step through the literal python elf with gdb. Set a breakpoint at several Functions that might compare memory and get ready to cramp from the constant Enter Spam in order to continue through that binary. At Some point you will get the flag, but that can be optimised. +So if python is based on C and the python debugger is not an option, what do you do? Correct, you step through the literal python elf with gdb. Set a breakpoint at several functions that might compare memory and get ready to cramp from the constant Enter Spam in order to continue through that binary. At Some point you will get the flag, but that can be optimised. Luckily some guy called Juan Cespedes, might have had a similar problem and decided to do something: