반응형

pwnable.kr 6

[pwnable.kr] unlink write-up

[pwnable.kr] unlink writeup [summary] heap unlink, no classic main epilogueDaddy! how can I exploit unlink corruption? ​ ssh unlink@pwnable.kr -p2222 (pw: guest)memory corruption 문제이다. unlink 얘기가 나오는걸 보니 heap 문제인듯unlink.c문제 파일은 다음과 같다.#include #include #include typedef struct tagOBJ{ struct tagOBJ* fd; struct tagOBJ* bk; char buf[8]; }OBJ; ​ void shell(){ system("/bin/sh"); } ​ void unlink(OBJ* ..

Write-up 2019.05.01

[pwnable.kr] random write-up

문제를 봅시당. 딱히 뭔가 특별한 정보는 없는 듯 합니다. 접속해 봅시다. 평범한 구조네요. 소스 코드를 읽어 봅시당. 결국, 사용자가 입력한 값과 random 값이 XOR 연산을 한 값이 0xdeadbeef 가 되도록 하면 되겠습니다. XOR 연산의 특징 덕분에 random 과 0xdeadbeef 가 XOR 연산하면 사용자가 입력해야 하는 값을 알 수 있겠네요. random 값을 구하는게 핵심이군요! random 값을 구해야 하는데, 위의 소스 코드에서 알 수 있는 사실하나는 rand() 함수의 시드 값이 없다는 점입니다. 컴퓨터는 기본적으로 난수를 생성하지 못합니다. 그래서 컴퓨터의 시간이나 마우스 포인터 같은 정보들에 기반한 값으로 시드 값을 생성하여, 특정 알고리즘에 넣은 뒤 난수를 구하는데요. ..

Write-up 2018.01.23

[pwnable.kr] blackjack write-up

문제는 위와 같습니다. 백만장자에게 플래그를 준다고 하네요. 서버에 접속해보면 블랙잭 게임을 진행하고 있다는 것을 알 수 있습니다. 대충 몇 몇 단서들을 종합해보면, 게임을 진행하면서 보이는 Cash 값, 즉 플레이어의 보유 자산이 1,000,000 이 넘으면 플래그를 준다는 것 같습니다. 문제에서 주어진 소스코드를 살펴보겠습니다. 플레이어의 카드 합이 딜러의 카드 합보다 작으면 배팅한 금액에서 차감하네요. 당연하네요. 근데, 여기서 한가지 생각해야 하는 점은 이게 프로그램이고, bet 가 int 형이라는 겁니다. 만약 배팅하는 금액인 bet 가 음수라면 어떻게 될까요? " - (-) = + " 아닌가요? 머릿속의 꽃밭이 실제로 실현이 가능할지, 혹여나있을지 모르는 점검 루틴을 살펴봐야겠습니다. 실제로 ..

Write-up 2018.01.22

[pwnable.kr] cmd1 write-up

문제는 위와 같습니당. PATH 환경변수와 관련이 있는 문제인가 봅니당.요구하시는 대로 ssh로 접속하면 다음과 같은 코드를 볼 수 있습니당.1234567891011121314151617#include #include int filter(char* cmd){ int r=0; r += strstr(cmd, "flag")!=0; r += strstr(cmd, "sh")!=0; r += strstr(cmd, "tmp")!=0; return r;}int main(int argc, char* argv[], char** envp){ putenv("PATH=/fuckyouverymuch"); if(filter(argv[1])) return 0; system( argv[1] ); return 0;} Colored by..

Write-up 2018.01.17
반응형