[HackCTF] :rev: static 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :rev: static

아이다로 디컴파일링했을때는 아무것도 보이지 않습니다. 뭔가 해서 봤더니, stripped되어있어서 아무것도 볼 수가 없습니다. 일단 프로그램을 실행시켜보면 "nope"와 함께 나가는 걸 기준으로, ghidra를 통해서 찾아봤습니다. 보니 해당 스트링과, 문제에서 쓰이는 것 같은 문자열들이 있네요. 따라서 거기에 해당하는 함수들을 찾아보았습니다. /* WARNING: Removing unreachable block (ram,0x00100b11) */ /* WARNING: Removing unreachable block (ram,0x00100a56) */ undefined8 main(int param_1,long param_2) { int iVar1; char *__s1; __s1 = getenv("team..

2021.03.25 게시됨

[HackCTF] :pwn: gift 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :pwn: gift

뭐야; 너무좋아 binsh, system모두 주니 바로 이용합시다. 거기다가 printf는 바로 프린트시켜서 fsb도 발생하네요. 그래서 바로 진행해보도록 하겠습니다. 확인해보니깐 binsh에는 아무것도 없네요. 저기에다 입력하면 되겠죠? 시나리오는 다음과 같습니다. 1. binsh에 "/bin/sh"저장 (fsb취약점 이용) 2. system(&binsh) 실행 (ret overwrite 이용) 그럼 바로 해봅시다. 일단 /bin/sh\x00자체를 한번에 16진수로 바꾸어 넣기에는 32비트 환경에서 너무 큽니다. 따라서 잘라서 넣어줘야하는데 str / b i n / s h \x00 hex 0x2f 0x62 0x69 0x6e 0x2f 0x73 0x68 00 각 hex/str값은 이렇게 되어있으니 /b =..

2021.03.24 게시됨

[HackCTF] :pwn: Look at me 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :pwn: Look at me

고고 아이다를 열었는데 함수가 900개가 있는 프로그램이고, 보니깐 다 원래 있던 함수에요! 뭔가 이상해서 파일 자체를 보니 뭐야 스태틱 링크네요 이게 뭔가싶어서 봤지만 흠 system과 exec함수들 다 없네요... 그래서 찾은 방법이 mprotect를 이용한 rop입니다. dokhakdubini.tistory.com/421 [STACK] mprotect ROP ROP using mprotect 오늘은 기존의 ROP와는 조금 다른 것을 해보려고 합니다. 기존에는 system함수를 이용해서 권한을 얻는 식이라면, 이번에는 mprotect함수를 이용해서 권한을 획득하는 방식의 ROP에 대 dokhakdubini.tistory.com 제가 쓴 글이나 mprotect rop하면 라젠카 글이 가장 먼저 뜹니다...

2021.03.23 게시됨

[HackCTF] :pwn: Beginner_Heap 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :pwn: Beginner_Heap

ㄲ 힙이네요. 보면 각각 v3+1, v4+1의 주소에 8만큼 malloc하는 것을 볼 수 있습니다. 8만큼 malloc하면 |prev_size[4]| |size[4]| |data[8]| 의 식으로 할당되어있고, 전체적인 heap구조는 다음과 같겠죠? |v3[16+8]| |v3+1[8+8]| |v4[16+8]| |v4+1[8+8]| 첫번째 fgets에서 heap overflow를통해서 v4+1에 해당하는 곳에 exit의 got를 써놓고, 두번째 fgets에서 getflag함수로 덮어씌우면 될 것 같습니다. getflag가 뭐냐구요? 원래는 sub_~~였는데 제가 이름 바꾼겁니다. 아무튼 작성해줍시다. 굳굳

2021.03.22 게시됨

[PHP] strncmp 취약점(인증우회) 포스팅 썸네일 이미지

WEB

[PHP] strncmp 취약점(인증우회)

strncmp 취약점 php 1. 취약점 알아보기 오늘은 strncmp의 인증 취약점에 대해서 알아보려고 합니다. 먼저 함수의 원형을 봅시다. int strcmp ( string $str1 , string $str2 ) 각 str1과 str2를 인자로 넣어주면 리턴값으로 두 값이 같으면 0, 다르면 0이 아닌 값을 리턴합니다. 이 리턴값에 대해서 조금 더 봅시다. Returns 0 if str1 is greater than str2, and 0 if they are equal. 이렇게 두 값에 따라서 리턴값이 정해지는데, 특정 PHP 5.3에서 취약점이 발생한다고 합니다. 결론만 먼저 이야기하자면 인자로 string이 아닌 배열을 넣어줄 경우, ..

2021.03.21 게시됨

[CodeFest 2021] :pwn: Write-Up 포스팅 썸네일 이미지

CTF

[CodeFest 2021] :pwn: Write-Up

CodeFest 2021에 참여했습니다. 난이도는 어렵지 않았던 것 같아요 다행이도 포너블은 올클했습니다.(쉬웠지만,,) LineCTF가 너무 어려워서 힐링 겸 풀었던 것 같습니다. 고고 All Source Codes : github.com/IIT-BHU-CyberSec/Codefest-CTF-2020 IIT-BHU-CyberSec/Codefest-CTF-2020 Source code and scripts for Codefest CTF 2020. Contribute to IIT-BHU-CyberSec/Codefest-CTF-2020 development by creating an account on GitHub. github.com 1. C is hard 이번 Codefest 문제들은 문제 자체로 보면 ..

2021.03.20 게시됨

[HackCTF] :pwn: poet 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :pwn: poet

봅시다 차례대로 get_poem, get_author, rate_poem을 지나서 0x6024E0의 값이 1000000이면 while문을 벗어나고, reward함수가 실행됩니다. reward함수는 바로 플래그를 읽어주네요. while문에서 나오는것만 집중하면 될 것 같습니다. 다음은 get_author부분인데, gets로 받아서 입력에 제한이 없네요. 보면 0x6024A0에 입력을 받는데, 값을 확인하는 부분이 0x6024E0이므로 그냥 overwrite해주면 될 것 같습니다. 굳굳

2021.03.18 게시됨

[STACK] mprotect ROP 포스팅 썸네일 이미지

SYSTEM HACKING/PWNABLE&REVERSING

[STACK] mprotect ROP

ROP using mprotect 오늘은 기존의 ROP와는 조금 다른 것을 해보려고 합니다. 기존에는 system함수를 이용해서 권한을 얻는 식이라면, 이번에는 mprotect함수를 이용해서 권한을 획득하는 방식의 ROP에 대해서 알아보려고 합니다. 1. mprotect함수란 기본적으로 mprotect함수에 대해서 알아보도록 합시다. mprotect함수는 메모리에 대한 접근을 제어하는 함수로, 원형은 다음과 같습니다. #include int mprotect(const void *addr, size_t len, int prot); - addr : 접근을 제어할 주소 - len : 주소 기준으로 관여할 길이 - prot : 다음 값들의 비트OR값이다. PROT_NONE : 접근할 수 없다. PROT_READ..

2021.03.17 게시됨

[HackCTF] :pwn: g++pwn 포스팅 썸네일 이미지

War Games/HackCTF

[HackCTF] :pwn: g++pwn

보면 바로 알수있다시피 c++인걸 대충 어림짐작할 수 있습니다. vuln안을 봅시다 c++을 아이다로 처음 봤으면 조금 당황스러워할 수도 있는데, 놀라진 마시고 그냥 큰 줄기만 보시면 됩니다. 1. fgets로 s에 입력받음 2. replace(사용자지정)함수로 선서대로 v4, input, v7을 넣음 2.1. input은 1번에서 입력한 s의 값이 들어가있고, v7은 "I"라는 값이 들어가있음 3. v1의 값이 s로 복사됨 3.1. v1의 값은 input의 값임 결국 뭔가 replace함수로 입력값을 바꾼 뒤 s를 출력시키는 걸 확인할 수 있습니다. replace함수를 봅시다. std::string *__stdcall replace(std::string *a1, std::string *a2, std::..

2021.03.17 게시됨