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..
LOB orc -> wolfman id : orcpw : cantata 코드입니다. 아까와 다른 점이 있다면 똑같이 환경변수를 초기화 해주지만 이번에는 버퍼도 0으로 초기화를 해줍니다. 따라서 쉘코드를 버퍼안에 못 넣겠네요. 그렇다면 ret뒤에 공간을 이용하면 가능하지 않을까요. 일단 분석을 하기위해서 tmp라는 폴더를 만들고 옮겨서 분석하겠습니다. 어셈블리 코드입니다. 중요한 부분만 보도록 하겠습니다. 스택프레임을 44만큼 형성하고 있습니다. ebp-40부터 strcpy하는군요 따라서 메모리구조는 i(4) | buf(40) |sfp | ret 이 되겠습니다. 저희는 ret뒤에 공간을 이용할 것이니 주소를 구해보도록 하겠습니다. 이렇게 해보겠습니다. 0000000이 보이시나요 버퍼가 0으로 초기화 된 모..
LOB goblin -> orc id : goblinpw : hackers proof 코드입니다. //egghunter 부분은 환경변수 기법을 막은 것 입니다.그리고 argv1의 47번째 글자가 \xbf가 아니면 종료가 됩니다. strcpy를 해주니 bof가 일어납니다. 분석을 해보겠습니다. 분석을 위해 tmp폴더로 파일을 cp하겠습니다. 어셈블리 코드입니다. 중요한 부분만 보도록 하겠습니다. 스택 프레임을 44만큼 할당 하고 있습니다. ebp-40부터 strcpy 하는 군요 따라서 메모리 구조는i(4) | buf(40) | sfp | ret 이 됩니다. sfp까지 44개를 채워주고 ret을 조작해주면 될 것 같습니다. 하지만 ret의 마지막이 \xbf여야 하니깐 스택을 이용해야 할 것 같습니다. Nop..
LOB cobolt -> goblin id : coboltpw : hacking exposed 코드입니다. 전 레벨과 달라진 점은 argv를 이용해서가 아닌 gets로 입력을 받군요. bof가 발생하는 군요. ret값을 조작하여 공격하면 될 것 같습니다. 바로 분석을 해보겠습니다. 분석을 하기 위해 tmp라는 폴더를 만들고 cp하겠습니다. 스택프레임이 16만큼 형성되어 있고 ebp-16 즉 esp부터 gets로 입력을 받습니다. 메모리 구조는 buf(16) | sfp | ret 이 되겠습니다. 저는 RTL기법으로 풀도록 하겠습니다. 먼저 system 함수의 주소를 구하도록 하겠습니다. 0x40058ae0입니다. 이제 /bin/sh의 주소를 구해보겠습니다. 주소를 구하는 코드입니다. 컴파일을 해주고 실행하..
LOB gremlin -> cobolt id : gremlinpw : hello bof world 코드입니다. 버퍼의 크기가 16인데 strcpy를 통해 bof가 가능합니다. bof를 이용해서 ret을 조작해주면 될 것 같습니다. 하지만 쉘코드를 스택프레임안에 넣을 수 없을 것 같습니다. 16이 너무 작아서 입니다. 그래서 환경변수 기법 또는 RTL기법으로 풀어야 할 것 같은데 저는 환경변수 기법을 이용해서 공격을 해보겠습니다. 먼저 분석을 위해서 tmp폴더를 만들고 cp하겠습니다. 어셈블리 코드입니다. 스택 프레임을 16만큼 형성하였습니다. ebp-16, 즉 esp부터 strcpy가 됩니다. 따라서 메모리구조는 buf(16) | sfp | ret 이 구조가 될 것 같습니다. ret을 쉘코드가 담긴 환경..
LOB gate -> gremlin id : gatepw : gate 코드입니다. 버퍼의크기는 356인제 argv[1]를 strcpy를 하니 버퍼오버플로우가 일어납니다. bof로 ret을 조작해주면 될 것 같습니다. RTL기법을 이용해서 풀도록 하겠습니다. 먼저 분석해보겠습니다. 분석을 위해 tmp라는 폴더를 만들고 복사했습니다. 어셈블리 코드 입니다. 스택프레임을 0x100 만큼 형성하고 있습니다. 0x100은 10진수로 256입니다. 따라서 메모리 구조는 buf 256 | sfp | ret 이 될 것 같습니다. 이제 시스템 함수의 주소와 /bin/sh의 주소를 구해보겠습니다. 0x40058ae0 입니다. 이제 /bin/sh의 주소를 구해보겠습니다. 주소를 구하는 코드입니다. 컴파일을 해주고 실행하면 ..
- overflow
- pwable
- HackCTF
- ebp change
- codegate
- TLS
- tcache
- oob
- srop
- shellcoding
- 본선가고싶다
- rt_sigreturn
- hacking
- heap
- SQLi
- stack reusing
- fsop
- FSB
- pwnable
- fastbindup
- 해킹
- fastbin
- pwnable.tw
- glibc
- exit
- Total
- Today
- Yesterday