[LOB] troll -> vampire id : trollpw : aspirin 코드를 보겠습니다.중요한 부분은 이 부분 인데요. argv[1] 46이 ff이면 안됩니다. 고로 ret주소가 bfff이면 안된다는 것 인데요 그냥 놉 많이 박아서 bffe로 만들어 주면 됩니다. 놉을 10만개 박았습니다. core파일이 생성 되었습니다. 놉 천지 입니다. 저는 주소를 0xbffe82a0으로 잡고 공격을 해보겠습니다.먼저 tmp 파일에 공격을 해보겠습니다. 쉘이 실행되었습니다. 실제 파일에 공격을 해보겠습니다. vampire의 password는 “music world” 입니다.
LOB orge -> troll id : orgepw : timewalker 코드입니다. argc가 2개 여야 하네요 흠.. 환경변수는 초기화를 해주고 argv[1]의 마지막은 bf이니 스택을 이용해야 하고 argv[1]의 길이는 48이상이면 안됩니다. buf는 초기화를 하고 argv[1]도 초기화를 하네요 그럼 딱 하나 남았네요 argv[0]을 이용해서 공격하면 될 것 같습니다. 저번 레벨에서 써먹었던 심볼릭 링크를 이용하면 될 것 같습니다. ln -s troll `python -c 'print "\x90"*98+"\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x..
ctf 문제를 보다가 base64충돌을 이용한 문제가 있길래 공부한 내용을 정리했다. 먼저 base64의 알고리즘이다. 밑에는 예이다. ')'의 binary (10진수로 41) 00101001 base64 알고리즘은 6bit 로 계산 따라서 A의 base64 incoding은 001010 | 01(0000) 이 됌 12비트 됐는데 오버된 4바이트는 패딩이 된거임 001010 | 01(0000) 10진수로 10 | 16 base64 ascii 테이블을 참조하면 base64 table KQ 가 되는것. 맞다. 이제 충돌에 대해서 정리해보겠다. 001010 | 01(0000) 뒤에 4비트는 필요없는건데 그래서 충돌이 가능하다. 001010 | 01(1111) 해도 되고001010 | 01(0101) 해도 되고..
[Codegate 2017] babypwn write-up 코드게이트 본선에 가고싶다.. 열심히 준비해서 꼭 본선진출하면 좋겠다. babypwn을 풀면서 소켓 payload 짜는 데 도움이 된 것 같다. 아직 잘 모르겠다 코드게이트2018에서 문제를 풀 수 있을지. 그래도 최선을 다해 준비해야겠다. 먼저 바이너리는 인터넷 상에서 구했다. 파일을 실행하면,\이러한 내용이 출력 된다. 1은 echo이고2는 reverse echo를 해주는 프로그램입이다 3을 입력하면 종료다. fileelf 32bit이다. 분석 메인 함수이다. 포트가 8181이다. 소켓프로그래밍이 되어있다. 빠르게 취약점을 찾아보겠다. first_8048B87 함수를 보겠다. 밑에 함수 3개를 쫘르륵 호출을 하는데 그중에서 두번째가 의심스러워..
ROP에 대해 공부했으면 한번씩 푼다는 ropasaurusrex를 풀었습니다. ROP를 접하고 처음 exploit을 하는 것이라 python socket에 대한 이해와 pwntool에 대한 공부가 좀 도움이 되었던 것 같습니다. 거의 하루를 오류때문에 미쳐버릴 뻔 했습니다. 아직도 무슨 오류인지 모르겠는데 모듈에 대한 문제 인 것 같습니다.. recv가 안되는 오류인데(소켓, 폰툴 둘 다) 계속 실행시키면 갑자기 안되다가 됩니다. 무슨 오류인지 아시면 댓글로 알려주세요.. 파일은 32-bit elf 파일입니다. checksec먼저 checksec을 이용해서 어떠한 보호기법이 걸려있는지 확인해 봅니다. NX가 걸려있습니다. NX는 데이터영역에서 특정 코드가 실행되는 것을 막습니다. 따라서 쉘코드를 실행을 ..
LOB darkelf -> orge id : darkelfpw : kernel crashed 코드입니다. 매우 길어졌습니다.// here is changed!if(strlen(argv[0]) != 77){ printf("argv[0] error\n"); exit(0);} 전 단계에서 이게 추가 되었습니다. argv[0]의 길이가 77이 아니면 종료하라는 것 같네요. 심볼릭 링크를 이용하면 될 것 같습니다. 심볼릭 링크는 대명사 같은 느낌인데요 그냥 파일을 대신해서 실행시켜 주는 것입니다. 분석은 생략하겠습니다. 전 레벨이랑 똑같군요. argv 0 부분의 이름만 조작해주면 될 것 같습니다. 심볼릭 링크를 걸어줬습니다. 75를 한 이유는 ./ 가 있기 때문이죠. 잘 만들어졌습니다. 바로 공격해보겠습니다. 쉘..
LOB wolfman -> darkelf id : wolfmanpw : love eyuna 코드입니다. 전 레벨과 달라진 점이 인자의 길이를 체크합니다. argv[1] 의 길이가 48이상이면 프로그램이 종료되는군요. 그러면 argv[2]를 이용해서 쉘코드를 전달하고 ret주소를 argv[2]의 주소로 뛰어주면 될 것 같습니다. 분석을 위해 tmp폴더를 만들고 cp하도록 하겠습니다. 어셈블리 코드입니다. 중요한 부분만 보도록 하겠습니다. 44만큼 스택 프레임을 구성하고 있습니다. ebp-40부터 strcpy를 합니다. 따라서 메모리구조는 i(4) | buf(40) | sfp | ret 이 되겠습니다. 저희는 argv[2]의 주소를 구해야합니다. 이렇게 해보겠습니다. 보니까 답이 나오네요 bf구간은 argv..
- rt_sigreturn
- hacking
- tcache
- codegate
- srop
- oob
- pwnable
- 본선가고싶다
- overflow
- pwable
- pwnable.tw
- fastbin
- fastbindup
- heap
- 해킹
- FSB
- SQLi
- TLS
- ebp change
- glibc
- HackCTF
- stack reusing
- fsop
- exit
- shellcoding
- Total
- Today
- Yesterday