전체 글

Write up (Wargame)/Pwnable

[pwnable.xyz] misalignment 풀이

이번 문제는 misalignment인데, 드림핵 master_canary를 풀이하려다가 계속 이해가 안 돼서(아니 이게 왜 안됨?) xyz를 풀기로 했다. 이것도 안되면 어쩔 수 없고..ㅠ 분석 쓰다보니 생각났는데 노션이나 다른게 더 이쁘다. 역시 티스토리는 이제 거를 때가 온다. 일단 보호기법은 다 걸려있다. IDA에서는 win이라는 함수가 있고 이를 실행시켜야 하는 듯. 코드를 이해하려면 포인터 이해가 필요..! 경계를 잘못 지정해서 s[1]에 마지막 부분 0x0000000000000000 에서부터 s[2] 0x0000000000000000 까지 0xDEADBEEF 를 대입한다. 그렇게 대입이 되면 s[1] s[2] 순서로 0xEF00000000000000 0x0000000000DEADBE 이렇게 들..

Develop & CS/Baekjoon

[Baekjoon] [1654 : 랜선자르기] 이진탐색과 문제풀이

문제 설명 https://www.acmicpc.net/problem/1654 1654번: 랜선 자르기 첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 www.acmicpc.net 지난 인증시험 이후 충격을 많이 받았기에 차근차근 코딩 문제도 풀어보려고 합니다. solved ac에서 티어를 올릴 생각으로 차근차근 푸는데, 이번 문제는 이진탐색을 사용하지 않으면 시간초과가 뜨는 문제였습니다. 입력받을 선의 갯수를 말하고, 원하는 갯수가 들어오면 그 갯수를 만들 수 있는 최대로 자르는 길이를 출력하는 문제인데 갯수가 몇 개인지는 그냥 입력..

Write up (Wargame)/Pwnable

[Dreamhack Wargame] Bypass SECCOMP-1 풀이

이제 풀이를 잘 공개하지 않으려 했는데, 이건 커리큘럼에 있는 문제이고 shellcraft 설명이 (shellcode 설명 때부터) 미흡한 부분이 있어서 그냥 블로그에 글을 쓰고자 한다. system hacking advanced 에 있는 문제이다. 분석 // 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_..

Security/시스템 해킹(PWN, System)

mov와 movl, movq 등등

우리가 배웠던 명령어는 mov밖에 없는데 종종 보다보면 movl, movq 이런 opcode들이 보인다. mov에 대해 파생된 것들인데 우리가 알고있는 단위를 명시해준다고 생각하면 된다. movq (qword : 64bit) movl (long?: 32bit) movw (word : 16bit) movb(byte : 8bit) 만큼만 대입해준다는 뜻이다. 더불어 이번 shellcraft에 대해 조금 배우면서 보다보니 rax, eax, (ax), al 이렇게 8byte, 4byte, 2byte, byte로 가던 순서가 r10과 같은 레지스터에서는 어떻게 이름이 표기되느냐 r10d : 4byte r10b : 1byte로 된다고 한다 아마 찾아보진 않았지만 2byte는 r10w 가 아닐까

Write up (Wargame)/Pwnable

[pwnable.xyz] add 풀이

분석 이번에는 웬일로 바이너리에 checksec을 해보면 RELRO가 Partial. PIE가 없다. 64bit 바이너리 그리곤 이렇게 input도 있다. 이제 ida를 보자 주석도 좀 달고 했는데 canary를 입력받아두고 0x50만큼을 memset으로 0으로 덮어버린다 canary까지는 아니다 어차피 크기가 0x60이라서 scanf는 아무래도 입력받은 인자 수를 반환하는 듯 하니 3개의 숫자를 입력해야하는 것 같고 v7으로부터 [v6]번째 인덱스에 v4+v5를 대입한다. 그리고 win이라는 함수도 존재한다. got등을 덮을 때 이걸로 덮으면 되겠다. 풀이 v4는 rbp-0x78 v5 는 0x70 v6 0x68 v7은 0x60에 있다. 흠 .. gdb를 보아하니.. got가 아니라 ret를 덮어야 할 ..

Write up (Wargame)/Pwnable

[pwnable.xyz] sub 풀이

분석 64bit 바이너리이고 이번에도.. 다 걸려있다. ㅠㅠㅠㅠㅠㅠ 점점 보호기법에 익숙해져야 하는걸까 실행시키면 이상한게 뜬다 ida로 열어보면 카나리를 받고 buffer을 없애는 initial과 이제 입력받는게 v4, v5를 입력받는거였는데 %u인거 보니까 unsigned도..? 받는거 같은데 v4와 v5는 int 형으로 singed..로 되어있다. v4가 4918(0x1336)보다 작거나 같고 v5도 4918보다 작거나 같은데 v4-v5는 4919 (0x1337)이 되어야 한다. 음.. v4에 4918 넣고 v5에 -1 넣으면 안되나? 풀이 ? ? from pwn import * #p = process('./challenge') p = remote('svc.pwnable.xyz', 30001) p...

Write up (Wargame)/Pwnable

[pwnable.xyz] welcome 풀이

https://pwnable.xyz/challenges/ pwnable.xyz If all pwnables could be just note taking, menu driven, x86 binaries... pwnable.xyz 분석 첫 문제는 welcome 서버가 다운되었어서 플래그를 제출하진 못했으나 이젠 된다. 처음 checksec을 했는데 너무나 무서운 상대 그리고 처음 보는 FORTIFY.. 메모리 버퍼에서 bof가 발생하는 것을 잡는다고 하는데 뭔지는 잘 모르겠다. 풀이 size[1]은 canary가 있을 곳이고 leak: %p 부분에서 v3의 주소를 알려주는데 아무래도 스택 영역의 주소이다. 그리고 size에 값을 입력받고 입력받은 사이즈만큼 malloc 한다. size는 unsigned i..

그믐​
neutrinox4b1