본문 바로가기

system

2019 hack.lu no_risc_no_future no_risc_no_future hack.lu 2019 no_risc_no_future요 문제는 출제자가 친절하게도 docker와 qemu-mipsel-static을 제공해준다..게다가 README.md에 어떻게 실행시키고, 디버깅하는지 설명까지 되어있다.본격적으로 프로그램을 분석해보자.input을 그대로 출력해주는 심플한 프로그램이다. x LAB_00400614 XREF[1]: 00400668(j) 00400614 1c 00 c2 27 addiu v0,s8,0x1c 00400618 00 01 06 24 li a2,0x100 0040061c 25 28 40 00 or a1,v0,zero 00400620 25 20 00 00 or a0,zero,zero 00400624 94 80 82 8f lw v0,-0.. 더보기
2019 hack.lu tcalc TCalc hack.lu 2019 TCalc숫자를 입력하고, 평균을 출력하며, 숫자를 삭제하는 3가지 메뉴가 존재한다. 이 문제의 특이한 점은 2.30 glibc를 이용했다는 점과, code를 제공했다는 점이다. code 리뷰를 진행해보면, 취약점을 찾기가 힘든데, ida로 보면 다음 코드가 아래와 같이 바뀌어 있다.어떻게 이런 일이 가능한 것일까?이는 S1R1US https://www.s1r1us.ninja/2019/10/hacklu-ctf-2019-writeups.html#tcalc를 참고하였다.c style languager에서는 0 더보기
2018 hctf babyprintf_ver2 baby_printf_ver2 hctf 2018 babyprintf_ver2시작하자마자 pie를 준다. 구체적인 동작을 분석해보자.buf에 512까지 입력받을 수 있으며, 이는 bss 영역에 존재하는 stdout _IO_FILE_plus 구조체를 덮을 수 있다.밑에서는 vtable을 검사하여 변조되었는지 확인하고 변조되었다면 원래의 vtable로 복구한다.하지만 vtable이 변조되어도 abort 루틴이 없다는 것을 명심하자. __printf_chk에서 format string이 일어나지만, 릭은 불가능하다. 이유는 많다..일단 chk기 때문에 포맷 스트링 관련 문자열이 제한되어 있다. 올바른 stdout 구조체를 만들어주지 않으면 프로그램이 안돌아가기 때문이고, 또 제작자가 0xdeadbeef를 엄청 .. 더보기
linux file structure attack 보호되어 있는 글입니다. 더보기
2019 seccon monoid_operator monoid_operator seccon 2019 monoid_operator시작하자마자 어떤 연산을 원하냐고 물어본다.먼저 분석을 진행해보자. operator를 입력받는다. 리턴 값을 검사하여 오류를 발견하면 _exit(1)를 호출한다.operator를 입력받은 뒤 분기한다. +, ^, *가 있는데 난 +만 분석을 진행했다. 사용자에게 operator를 입력받고, 피연산자들을 입력받는데 이는 heap 메모리에서 관리된다.해당 주소는 ptr 변수가 가지고 있으며 이를 참조하여 v17에 값을 더해간다. 만약 __CFADD__의 결과로 1이 리턴되면 이를 감지하여 fwrite 후, free를 진행한다.여기서, __CFADD__란 CARRY_FLAG_ADD로 봐도 무방하다. 즉, 올림수를 리턴값으로 받는다. .. 더보기
holyshield 2019 masked_calculator masked_calculator holyshield 2019 masked_calculator대회중에 풀긴 했는데 풀면서 오퍼레이터 문제에 진짜 취약하다는 걸 느껴서 포스팅한다. 위와 같은 메뉴로 구성이 되어 있다.분석했을 때 특별한 점은 딱히 없었다.. 먼저 두 정수를 입력 받고 2진수로 바꾼다. 이 후 사칙 연산에 대해서는 이 2진수를 이용하여 연산하는 과정이 담겨 있다.별로 중요해보이지 않았다. 여기서, 연산한 값을 계속해서 HISTORY에 저장하는 함수가 존재한다. 취약점은 이곳에서 발생한다.HISTORY에 4를 더해가며 연산한 값을 넣어주는데, HISTORY는 main의 rbp-0xb0에 존재하고 있다.연산 횟수 제한을 두지 않아, 스택 오버플로우가 발생한다! 이를 이용해 LEAK, STACK O.. 더보기
dvp 2019 monica's bank + dvp 해킹대회&컨퍼런스 후기 monica's bank dvp 2019 monica's bank이 문제는 취약점은 대회 시작하고 5분만에 다찾았는데 remix 오류로 코드가 deploy가 안돼서 이 오류로만 3시간을 보냈던 문제다..결국 대회 당시 이 문제를 풀지 못했다.. 정말 분했다 ㅠ 대회가 끝나고 문제의 출제자인 xiao yu에게 물어보니 그냥 새로고침하면 해결되는 문제였었다.참고로, xiao yu는 realworld ctf의 organizer이다!realworld ctf에서 arcorada monica 문제를 풀었던 적이 있어서 컨퍼런스 패널 토론이 끝나자마자 가서 인사를 건넸는데, 정말 신기했다.이 대회의 스마트 컨트랙트 문제는 모두 xiao yu가 writer인데, 두 문제 모두 이름에 monica가 들어간다. 이쯤되면 .. 더보기
ethereum assembly analysis using remix DEBUGGER plugin solidity assembly+remix ethereum assembly analysis using remix DEBUGGER plugin xxxxxxxxxxpragma solidity =0.4.25;​contract Test { uint256 number; constructor(uint256 n) public { number = n; } function test() public returns (string) { return "test"; }}위의 테스트 코드를 사용하겠다. remix의 DEBUGGER 플러그인을 이용하여 동적 디버깅을 진행한다. 이 과정으로 어셈블리를 익혀보자! 코드를 컴파일한 후 컨트랙트를 Deploy하면 transaction hash값을 얻을 수 있다. 이를 DUBUGGER 플러그.. 더보기