본문 바로가기

CTF8

callme - Pwnable BDSec CTF 포너블 문제이다. 딱 봐도 0으로 초기화 된 v9 함수 주소를 bof로 덮어서 원하는 함수의 주소로 흐름을 옮기는 문제인거 같다. IDA 바이너리를 열어보니 callme 라는 함수가 있었고 해당 함수를 보니 플래그를 출력해주는 함수였다. 그러면 v9 함수 주소에 callme 함수 주소를 overwrite 하여 callme로 실행 흐름을 옮기면 플래그가 출력되는 문제인거 같다. 아래는 해당 공격 시나리오를 반영한 최종 익스플로잇 코드이다. from pwn import * #p = process("./callme") p = remote("139.144.184.150", 3333) e = ELF("./callme") callme = 0x0804875e payload = b'A'*0x40 pa.. 2023. 7. 21.
anyaForger - Pwnable BDSec CTF 포너블 문제이다. 문제 코드를 보면 v1의 변수를 bof로 0xDEADBEEF 값으로 덮으면 anyaforger 함수가 실행이 된다. 한번 anyaforger 함수를 살펴보도록 하겠다. 그냥 flag를 출력해주는 함수이다. 그러면 그냥 bof로 v1 변수의 값을 0xDEADBEEF로 덮으면 flag가 출력되는 문제다. 스택 구조를 보니까 A로 dummy 값을 0x20 만큼 덮으면 v1 변수 값을 조작할 수 있다. 아래는 해당 공격 시나리오를 반영한 최종 익스플로잇 코드이다. from pwn import * #p = process("./beef") p = remote("139.144.184.150", 31337) e = ELF("./beef") def log(n, m): return su.. 2023. 7. 21.
Ghost - Pwnable 2023 BDSec CTF 포너블 문제이다. 누가봐도 v5의 값을 bof로 바꾸면 플래그가 출력되는 문제인거 같다. strcpy 함수로 src의 값을 dest 라는 변수에다가 넣기 때문에 스택 구조를 보면 A 값을 0x40만큼 dummy 값을 채우면 v5 변수에 원하는 값을 넣을 수 있다. 아래는 위의 공격 내용을 반영한 최종 익스플로잇 코드이다. from pwn import * #p = process("./ghost") p = remote("139.144.184.150", 4000) e = ELF("./ghost") def log(n, m): return success(": ".join([n, hex(m)])) context.log_level = 'debug' key = 0x44434241 payloa.. 2023. 7. 21.
cryptGenius - Crypto 2023 코드게이트 암호학 문제이다. 문제 코드 안에 비교 구문에서 암호를 풀려고 하였다. 6230ee81ac9d7785a16c75b93a89de9cbb9cbb2ddabaaadd035378c36a44eeacb371322575b467a4a3382e3085da281731557dadd5210f21b75e1e9b7e426eb7 해당 문자열은 문제 코드에서 나온 사용자의 입력을 AES ECB 알고리즘으로 복호화 한 뒤에 디코딩하는 과정을 거친 값을 검증하는 문자열이다. EC8알고리즘은 블록들을 암호화 한 뒤에 불록들을 합치는 알고리즘이므로 16바이트씩 나눈 값을 암호화 알고리즘에 각각 돌려보았다. h9AqkFSgmamhqLjK1+zgfp5eNjePI/UVRQsMsRymVcE= +Mb9GybebuqtZ2L6nhK8.. 2023. 6. 26.