전체 글
5월 초에 쓰는 일기.
자체평가 : ★★★☆☆ 정말 오랜만에 좋은 CTF를 만났다. TAMUctf 2023을 참여하였는데, 포너블 10문제 중 7문제를 풀었다는데서 나름 자부심(?)이 느껴졌다. 물론 한문제는 언인텐이었지만... 내년에도 참여해야할 CTF로 리스트업 해야겠다. CTF 참여를 제외하고는 4월에 대부분의 시간을 pwnable 문제 제작에 매진하였다. 현재 만든 문제는 총 4개인데, 2개는 적당히 쉬운 문제, 나머지 2개는 머리를 좀 굴려야하는 문제로 만들었다. 매번 문제를 만들고 출제할때마다 다들 어느정도 난이도로 느낄지, 배워가는게 있을지 궁금해진다. 한달에 하나 정도는 출제해봐야겠다. 진짜 목표는 바꿔야할 듯... 리버싱 크립토 공부가 손에 안잡힌다 ㄷㄷㄷ 애초에 할 생각도 안들고... ㅠㅠ 5월 한달은 리프레..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZyamr%2FbtsdpaO7nzV%2FKPOLbBWMoehlAdYWSc5uYk%2Fimg.png)
TAMUctf 2023 후기
포너블총 10문제 중 7개, 리버싱 1개를 풀었다. 포너블 문제들이 전반적으로 쉬운 것도 한 몫 했지만, 적절한 난이도에 적절한 구성이었다고 생각한다. 의외로 힙 문제가 없었다. (못 푼 문제 중에도 없었다) encryptinator는 약간 리버싱 문제? 길래 귀찮아서 패스. (알고보니 마이너스 index를 통한 풀이였지만...) macciato는 java 코딩되어있기에 분석하기 귀찮아서 시원하게 포기. contrived shellcode는 풀고 싶었는데 아이디어 부족으로 포기했다. 제일 인상 깊었던 문제는 contrived shellcode 문제이다. 0x00~0x0f (0x0a 빼고)의 바이트만 가지고 shellcode를 만들어서 쉘을 획득하는 문제였다. 결국 syscall을 만들어서 푸는 문제이며,..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fzhddx%2Fbtsdo9CEZLJ%2Fz3sRFVk8FgORLTuKsNVc8K%2Fimg.png)
TAMUctf 2023 - Bank
1. intro 2. code 및 분석 2.1. code #include long accounts[100]; char exit_msg[] = "Have a nice day!"; void deposit() { int index = 0; long amount = 0; puts("Enter the number (0-100) of the account you want to deposit in: "); scanf("%d", &index); puts("Enter the amount you want to deposit: "); scanf("%ld", &amount); accounts[index] += amount; } int main() { setvbuf(stdout, NULL, _IONBF, 0); setvbuf(..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDviUs%2Fbtsdd1lPoQW%2FeJrgEP0TwZKHTL2IpqSx0K%2Fimg.png)
TAMUctf 2023 - Randomness
1. intro 2. code 및 분석 2.1. code #include #include #include void upkeep() { // Not related to the challenge, just some stuff so the remote works correctly setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0); } void win() { char* argv[] = {"/bin/cat", "flag.txt", NULL}; execve(argv[0], argv, NULL); } void foo() { unsigned long seed; puts("Enter a see..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLwT6b%2FbtsdhA17d5f%2FwqhuTJ6J4FoNTfQTXRwic0%2Fimg.png)
TAMUctf 2023 - Pwnme
1. intro 2. code 및 분석 2.1. code 0000000000401195 : 401195: 55 push %rbp 401196: 48 89 e5 mov %rsp,%rbp 401199: 48 83 ec 18 sub $0x18,%rsp 40119d: b8 00 00 00 00 mov $0x0,%eax 4011a2: e8 89 fe ff ff call 401030 4011a7: 48 83 c4 18 add $0x18,%rsp 4011ab: b8 00 00 00 00 mov $0x0,%eax 4011b0: 5d pop %rbp 4011b1: c3 ret 4011b2: 48 29 f0 sub %rsi,%rax 4011b5: c3 ret 0000000000401030 : 401030: ff 25 e2..
![](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeMPca0%2FbtsdeHArYa4%2F63TX5ELQIAqPZidKEEIdWk%2Fimg.png)
TAMUctf 2023 - Pointer
1. intro 2. code 및 분석 2.1. code #include #include void upkeep() { // Not related to the challenge, just some stuff so the remote works correctly setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); setvbuf(stderr, NULL, _IONBF, 0); } void win() { char* argv[] = {"/bin/cat", "flag.txt", NULL}; execve(argv[0], argv, NULL); } void lose() { char* argv[] = {"/bin/echo", "loser", NULL}; ..