목록Hack/DreamHack (74)
CIDY
// Name: bypass_syscall.c // Compile: gcc -o bypass_syscall bypass_syscall.c -lseccomp #include #include #include #include #include #include #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } void sandbox() { scmp_filter_ctx ctx; ctx = seccomp_init(SCMP_ACT_ALLOW); if (ctx == NULL) { exit(0); } seccomp_rule_add(ctx, SCMP_ACT_KILL, SCMP_SYS(open), 0); seccomp_rul..
// Name: tcache_poison.c // Compile: gcc -o tcache_poison tcache_poison.c -no-pie -Wl,-z,relro,-z,now #include #include #include int main() { void *chunk = NULL; unsigned int size; int idx; setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); while (1) { printf("1. Allocate\n"); printf("2. Free\n"); printf("3. Print\n"); printf("4. Edit\n"); scanf("%d", &idx); switch (idx) { case 1: printf("Size: ..
// gcc -o hos hos.c -fno-stack-protector -no-pie // 64-bit, partial relro, nx #include #include #include #include #include char *ptr[10]; void alarm_handler() { exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } void get_shell() { execve("/bin/sh", NULL, NULL); } int main() { char name[32]; int idx, i, s..
복습 겸 1레벨부터 문제를 다시 풀어보려고 한다. 새롭게 보이는 것도 있지 않을까.. // Compile: gcc -o shell_basic shell_basic.c -lseccomp // apt install seccomp libseccomp-dev // 64-bit, full relro, nx, pie #include #include #include #include #include #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void init() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGA..
6자리면 브포할만하다 생각해서 위와 같은 코드를 돌렸는데 한 시도마다 저렇게 확인 버튼을 눌러줘야 하는 문제가 생겼다. 그래서 소스를 수정해 return alert(wrong)을 return 0으로, 맞는 경우를 return 1로 바꾼 다음 html을 따로 저장해서 그걸로 브포를 돌렸다. 근데 생각보다 브포가 오래걸리는데, 생각해보면 이 6자리 비밀번호는 년월일을 의미하기 때문에 시도가 필요없는 숫자들이 엄청 많다. -> 년월일을 나누어 for문을 3중으로 쓰면 효율을 높일 수 있다. for (var Y = 0; Y
#!/usr/bin/python3 from flask import Flask, request, render_template, make_response, redirect, url_for app = Flask(__name__) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' users = { 'guest': 'guest', 'user': 'user1234', 'admin': FLAG } session_storage = { } @app.route('/') def index(): session_id = request.cookies.get('sessionid', None) try: username = session_storage[ses..
// 64-bit, canary, partial relro #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } int main() { char buf[16]; size_t size; long value; void (*jump)(); initialize(); printf("stdout: %p\n", stdout); printf("Size: "); scanf("%ld",..
얘도 검증조건 찾는 문제인 것 같다. 함수보러가자... 간단한 문제다. 브루트포스로 해결해보자. checktable = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0x0A5, 0x9D, 0x45] arr = "A" * len(checktable) arr = list(map(ord, arr)) check = 1 for i in range (24): if checktable[i] != ((i ^ arr[i]) + 2*i): check = 0 if check == 1: print("Correct") else: print("Wro..