분류 전체보기 309

Sigreturn-oriented programming (SROP)

개인적으로.. SROP라고 하면 두개가 생각난다. Syscall ROP Sigreturn-oriented programming... 지금 생각해보니까 둘 다 syscall을 이용하는거니.. 거기서 거기인 것 같은 느낌이 든다. 개요 일반적으로 BOF 취약점이 발견되면, ROP나 RTL 기법을 사용하여 익스를 한다. 하지만... ROP를 하기에 gadget이 부족하다? 이럴 때 Sigterun-oriented programming(SROP) 기법을 사용한다. Sigreturn-oriented programming (SROP) Sigreturn system call을 사용하는 ROP 기법 Sigreturn system call : 시그널을 받은 프로세스가 kernel mode에서 user mode로 복귀할 ..

System Hacking 2021.05.10

[SanDiegoCTF 2021 : pwnable] Unique Lasso 풀이 (Sig ROP)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 하..풀릴듯 말듯 했는데 결국 못풀었었다. Analysis mitigation execution code 함수가 넘 많아서 문자열 찾기로 인풋 넣는 곳 찾았다. (main함수였네) RIP 컨트롤이 가능해서 쉽게 풀릴거 같은 느낌이다. flag를 주는 함수도 딱히 없었고해서 bss영역에다가 '/bin/sh'문자열 넣고 실행해야겠다는 생각을 하였다. Exploit Scenario Summary sys_read 호출하여 bss 영역에 '/bin/sh' 문자열 삽입 sys_sigreturn 호출 ~ (Sig ROP) 처음엔 syscall로 sys_read를 호출해서 bss영역에 /bin/sh 문자열을 쓰고난 다음에 main으로 리턴하려..

CTF/Write UPs 2021.05.10

[SanDiegoCTF 2021 : pwnable] Flag dROPper 풀이

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 문자열 찾기해서 어디서 인풋되는지도 찾고.. flag.txt도 안에 들어있는 걸 운좋게 확인했다. syscall을 바로 쓴게 인상깊다. exit 함수 안에 sys_exit를 호출한 이후, flag를 열어서 화면에 출력해준다. RIP를 exit 함수 그자체가 아닌 flag를 여는 부분으로 바꿔줘야한다. RIP를 control할 수 있는지 테스트해보니까(main 마지막에 jmp [rax]가 있음) 가능해서 바로 flag를 얻었다. from pwn import * #p = process('./flagDropper') p = remote('dropper.sdc.tf', 1337) e = ELF('./flagDropper') payloa..

CTF/Write UPs 2021.05.10

SanDiegoCTF 2021 후기

대회 정보 : ctftime.org/event/1255 대회 시간 : 2021.05.08 09:00 KST — 2021.05.10, 09:00 KST 내가 적은 롸업 : jiravvit.tistory.com/entry/SanDiegoCTF-2021-pwnable-Flag-dROPper-%ED%92%80%EC%9D%B4 신기하게 디스코드로 운영되는 ctf였다. 이런 ctf 처음이다... 새니티체크 제외하고 한문제 풀었다 ㅎㅎㅎ;ㅋㅋㅋㅋㅋ 다른 문제들 끙끙거리다가 포기했다 ㅠㅠ flag-dropper는 쉽게 풀었는데, printfailed는... nc로 접속했을 때 바로 fsb가 보였다. 하지만 로컬에서 디버깅하면서 offset을 구해야 하는데, 로컬에서 디버깅은 커녕 실행도 되지 않았다;; ㅠㅠ 문의하니까..

CTF/CTF 후기 2021.05.10

[DawgCTF 2021] 내가 푼 문제들 풀이

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro [Pwnable] Jellyspotters python pickle 취약점 기능들 막 보다가 pickle 취약점임을 확인했다. 바로 얼마전에 pickle 문제 풀었었는데, 그때도 load할 때 base64 디코딩을 했었다. 그래서 코드 복붙해서 풀었당. import pickle import base64 import os from pwn import * class Vuln(object): def __reduce__(self): return (os.system, ('cat ~/flag.txt', )) pickle_data = pickle.dumps(Vuln()) data_bytes = pickle_data.encode('ascii'..

CTF/Write UPs 2021.05.10

DawgCTF 2021 후기

대회 정보 : ctftime.org/event/1319 대회 시간 : 2021.05.08 07:00 KST — 2021.05.09, 07:00 KST 내가 적은 롸업 : jiravvit.tistory.com/entry/DawgCTF-2021-%EB%82%B4%EA%B0%80-%ED%91%BC-%EB%AC%B8%EC%A0%9C%EB%93%A4-%ED%92%80%EC%9D%B4 4시간 반??정도 참여했다. 집중력 떨어져서 죽는 줄 알았다ㅎ.. 난 집중력이 너무 짧은 것 같다 ㅠ 포너블 첫번째 문제 No Step On Snek 문제는 미로찾기 같은 문제였다. 근데 이게 말을 움직이는데, 실제로 화면상의 말이 움직이는 모습이 출력이 되질 않았다;; ㅠ 코딩해야하나 싶어서... 관뒀다... 나머지 두 문제들은 수..

CTF/CTF 후기 2021.05.10

[pwnable.xyz] attack 풀이 (64bit, OOB)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro pwnable.xyz의 attack 문제를 풀어보라고 하셨다. 그래서 바이너리를 까봤는데.. 솔직히 처음엔 겁먹었다;; 함수들이 너~무 많아.. (예전이었으면 main부터 봤겠지만.. 지금은 아니다 크크크) 그래서 메모장에 정리하다가 사진도 넣고 싶어서 노션에다가 정리했다. 생각보다 OOB는 강력한 취약점임을 알게되었다.... OOB 터지고,,, 메모리에 데이터 넣을 수 있는 부분?있으면 뭐.. 끝이 아닌가 싶네.. www.notion.so/jir4vvit/pwnable-xyz-attack-32fa029fd85e409d9725320d6c26b8a1 [pwnable.xyz] attack 워게임 사이트 : pwnable.xyz (h..

[pwnable.xyz] two targets 풀이 (64bit, 브포, scanf)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 리버싱 잘 못하는데 이 문제 풀어서 경험치가 조금 쌓인 것 같다. 기분 좋다. 여담으로 긴 글 적을 때는 확실히 노션이 더 편한 것 같다... www.notion.so/jir4vvit/pwnable-xyz-two-targets-26d9f81b59d84f4db87d81cf1efb0e56 [pwnable.xyz] two targets 워게임 사이트 : pwnable.xyz (https://pwnable.xyz/) www.notion.so

[pwnable.xyz] xor 풀이 (64bit, OOB, call)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro 어제 롸업보고 다음날에 롸업 안보고 다시 풀었다. 주어진 파일은 문제 파일 바이너리 접근해서 적을 수 있나여? Analysis mitigation execution code 이 전에 풀었던 add나 sub 문제랑 비슷해보인다. 세 숫자를 입력해야하고 마지막 인풋은 index이다. 이 문제도 역시 flag를 출력해주는 win 함수가 존재하는데, win 함수를 최종적으로 실행시키는 것이 목표이다. 저기 네모친 곳은 원하는 주소에 원하는 값을 쓰고 있다. 그리고 더 자세히 보면(?) OOB가 발생한다. idx는 9이상이 되면 프로그램이 while문을 빠져나가지만, 음수일 때는 체크하지 않아서 OOB가 발생한다. 그리고 저기 if 조건..

[pwnable.xyz] GrownUp 풀이 (64bit, fsb, strcpy)

문제 풀이 환경 : ubuntu 18.04 사용 툴 : IDA 7.5 pro strcpy는 NULL까지 읽어서 복사 주어진 파일은 문제 파일 바이너리 Flag는 바이너리 파일 안에 있다고 한다. 셸을 따는 문제가 아닌 것 같다. Analysis mitigation execution N를 입력하면 프로그램이 종료된다. 그래서 y를 입력해야 한다. fsb 문제인가 하고 한번 입력해봤는데.. 그냥 그대로 출력해준다. 코드를 확인해보자. code 입력을 두 번한다. 처음에 y나 Y를 입력하지 않으면 종료된다. 한글자만 입력하면 되는데 신기하게 더 입력할 수 있다.. 16글자까지 입력이 가능하다. 그리고 read함수로 src에 입력을 받고 strcpy 함수로 usr에 복사를 한다. usr는 bss 영역에 있어 전..