목록ROP (5)

https://dreamhack.io/wargame/challenges/101/ validator-revenge Description 1회 CTF에서의 프로그램이 너무나 취약한 것을 인지한 개발자가 몇 가지를 더 추가한 것 같습니다. 취약한 인증 프로그램을 익스플로잇해 flag를 획득하세요! Reference https://dreamhack.io/lectur dreamhack.io 며칠째 삽질 중이다. 처음 조건문들을 모두 통과하고 ROP를 이용하여 풀려했으나 relro가 걸려있어 got overwrite는 불가능했다. 출력 함수도 없다. stdout을 변조해서 leak 하려 했으나 인자를 주는 게 너무 어려웠다. 사람들은 stack pivoting을 이용해서 해결했다고 하나 어떻게 rsi에 stdout..

read함수 밖에 없는 아주 간단한 코드이다. 출력도 없어서 leak을 못했다. 먼저 bss영역에 /bin/sh를 삽입한다. 그 후 read의 got를 1byte overwrite 하여 syscall를 이용하기로 했다. 하지만 rax를 수정할 방법을 찾기가 어려웠다. read의 반환값을 이용하려고 했지만 이상하게 되지 않았다. 다행히 가젯 중에 pop rbp가 있어서 이를 이용했다. pop rbp에 0x5f를 넣고 lea rax, [rbp+buf] 쪽으로 ret을 했다. buf가 -0x50이기때문에 rax에 0xf가 들어갔다. 그 후 call에서 syscall이 실행되어 sigreturn을 진행하려 했다. 레지스터 값들도 모두 0으로 초기화 되어있길래 syscall이 잘 먹혔다 생각해서 기분이 좋았지만 ..

void learn(){ char buf[32]; puts("WANT TO LEARN: \n"); puts("Before we start, would you like to learn about ret2libc?[y/N]"); gets(buf); puts(""); if(buf[0] == 'y' || buf[0] == 'Y'){ divide(); explain_pltgot(); divide(); explain_rop(); divide(); resources(); }else{ puts("I see, you must be a natural!\n"); } } 뚫어야 할 코드이다. 제목에서부터 알 수 있듯이 ret2libc문제이다. 어렵진 않았다. exploit code from pwn import * contex..

사진으로 남겨둔게 없어서 일단 코드부터 보겠음 그냥 연습문제라는데 ROP, FSB 둘다 해야함 void rop(){ char buf[0x40]; gets(buf); //here is the overflow vuln, rest is info puts(""); stkstrt(); stk(buf, 0x0, "(buf strt)"); for(int i = 0x1; i < 0x7; i++) stk(buf, i, ""); stk(buf, 0x7, "(buf end)"); stk(buf, 0x8, ""); stk(buf, 0x9, "(canary)"); stk(buf, 0xa, "(rop func base ptr)"); stk(buf, 0xb, "(rop func return ptr)"); stk(buf, 0xc, ..
보호되어 있는 글입니다.