SystemHacking/Nebula

소스코드 flag17 계정의 홈디렉터리에 가보면 상단의 소스코드가 쓰여진 flag17.py 파일이 있으며, flag17 계정의 이름으로 flag17.py가 실행중임을 확인 가능하다. 소스코드 분석 우선 소스코드 분석 먼저진행해보자. 1. 우선 서버는 IPv4 주소체계를 사용하여 10007 포트로 들어오는 요청을 바인딩하여 기다리고 있다 . 2. 이제 while True 를 통해 무한루프를 걸고있는데, 즉, 무한정 기다리면서. client 의 연결 요청을 기다린다. 그러다가 client 의 접속요청이 들어오면 os.fork() 를 통해 자식 프로세스를 생성하고있는데, 그 자식프로세스의PID 가 0 이면 접속한 Client 에게 현재 커넥션 clnt 정보를 담아 메시지를 보내게되고, 사설함수 server 의..
소스코드 문제에서 주어진 소스코드이다. perl 스크립트로 작성되어있다. 정보수집 flag16 의 홈디렉터리에 가보면 cgi 파일과 apache2와 비슷한 설정파일과 userdb.txt 텍스트파일이 존재한다. 설정파일은 항상 중요한 힌트를 주기때문에 바로 확인해보았다. 주석이많기때문에 파이프를 이어서 주석이 아닌부분만 출력시켜보면 1616 포트에서 바인딩중이고, flag16 계정으로 무언가가 실행됨을 알수있다. 또한, 실행되는 위치는 /home/flag16 위치임을 확인할 수 있다. $ cat thttpd.conf | grep -v '#' | sed -e '/^$/d' 바로 curl 로 요청을 날려보면 로그인실패 라고 메시지가 뜬다. 취약점 분석 해당 문제에서 필요한 소스코드 부분과 분석은 아래와 같다...
문제 요구사항 /home/flag15/flag15에서 바이너리를 strace 해봐라. dlopen man 페이지를 자세히 검토하여 "리눅스에서 공유 라이브러리를 컴파일"하는 방법과 라이브러리를 로드하고 처리하는 방법을 알아보라고한다. 파일 포맷확인 flag15 홈디렉터리에는 setuid 가 설정된 동적링크된 32bit 짜리 실행가능한 리눅스실행파일이라고한다. 또한 not stripped 이라 파일 symbol 을 볼 수 있다. 참고로 strace 는 System Call Trace 로 바이너리가 실행될때 참조하는 Syscall 을 보여주는 도구이다. 파일 실행 및 분석 strace 로 flag15 를 실행해보면 굉장히많은 "No such file or directory" 를 출력한다.리눅스에서 "No s..
이 프로그램은 /home/flag14/flag14에 있습니다. 입력을 암호화하여 표준 출력에 기록합니다. 암호화된 토큰 파일도 해당 홈 디렉토리에 있으므로 해독하십시오 :) 이 수준을 수행하려면 암호 level14를 사용하여 level14 계정으로 로그인합니다. 이 수준의 파일은 /home/flag14에서 찾을 수 있습니다. 라고 나와있다. 결론은 무엇인가를 암호화된 토큰을 복호화하라는 것이다. flag14 홈디렉터리를 보면 setuid 가 걸린 실행파일이랑 token 이 있다. 암호화된 토큰은 아래와같이 생겼고, setuid 가 설정된 바이너리를 실행하면 -e 플래그를 사용하면 암호화할수있다고 help 메시지가 출력된다 flag14 바이너리에 -e 옵션을 주어 실행하면 stdin 인풋창이나오는데, 여기..
문제에서 주어지는 소스코드는 아래와같다. (C 코드) #include #include #include #include #include #define FAKEUID 1000 int main(int argc, char **argv, char **envp) { int c; char token[256]; if(getuid() != FAKEUID) { printf("Security failure detected. UID %d started us, we expect %d\n", getuid(), FAKEUID); printf("The system administrators will be notified of this violation\n"); exit(EXIT_FAILURE); } // snip, sorry :) ..
문제에서 제공하는 lua 스크립트이다. local socket = require("socket") local server = assert(socket.bind("127.0.0.1", 50001)) function hash(password) prog = io.popen("echo "..password.." | sha1sum", "r") data = prog:read("*all") prog:close() data = string.sub(data, 1, 40) return data end while 1 do local client = server:accept() client:send("Password: ") client:settimeout(60) local line, err = client:receive() ..
문제에서 주어지는 소스코드이다.. 우선 이문제 제작자의 엄청난 실수가 들어있다. 중요한 소스코드를 내용은 아래와같다 1. argv[1] = 읽을파일, argv[2] = 소켓을연결할주소 --> 기본적으로 18211 포트로 연결한다. 2. 소켓이 연결되면 argv[1] 에 입력한 파일을 읽으면서 접속한 주소로 보내고, 그 결과를 저장한다. #include #include #include #include #include #include #include #include #include int main(int argc, char **argv) { char *file; char *host; if(argc < 3) { printf("%s file host\n\tsends file to host if you have ..
문제에서 제공하는 소스코드이다. 또한, flag09 위치에는 해당소스코드를 컴파일하고 setuid 가설정된 바이너리가 위치하고있다. 우선 소스코드를 로컬에서 테스트해보면 /e Modifier 는 더이상 preg_replace 에서 지원하지 않는 옵션이라고 한다. 소스코드의 중요부분은 아래와같다. preg_replace 로 $contents 변수에서 특정 정규식을 spam("\2") 로 변경하고 있다. 원래 preg_replace 는 특정패턴을 특정문자열로 바꿔주는역할을 하는데, /e 옵션이 들어가면 바꿀문자열이 PHP 코드로 인식하게 된다. 여기서 RCE 취약점이 발생하게 된다. $contents = preg_replace("/(\[email (.*)\])/e", "spam(\"\\2\")", $cont..
- 세계에서 읽을 수 있는 파일이 다시 공격을 받는다. 그 사용자가 무엇을 했는지 확인하고 이를 사용하여 flag08 계정 에 로그인해라. - Level08에 로그인. - flag08 디렉터리에 접근 - tcpdump로 캡쳐한 pcap파일임. (굉장히 오랜만에봄...) - pcap파일을 로컬에 복사해서 wireshark로 분석해도되지만, 귀찮으므로 tcpdump로 분석 - 장난아니라 password라는 키워드만 발견했을뿐 눈만 빠질뻔했음. - wireshark의 콘솔기반 네트워크 트래픽 분석기인 tshark가 nebula에 설치되어있지 않으므로 root계정에 접근해서 tshark를 다운받았는데 이것도 오류남. - ftp로는 연결거부당했고, tftp로는 level08계정으로 따로 접근할 수 없었음. - f..
- flag07 사용자는 웹 서버에서 호스트에 연결할 수 있는지 확인하기 위해 호스트를 ping할 수 있는 최초의 펄 프로그램 을 작성하고 있었다.. 소스코드 분석 - 우선적으로 perl로 작성된 스크립트. 첫줄에 Content-Type 헤더가 보임. - CGI를 사용한다고 선언했으며, ping함수의 첫번째 매개변수값을 $host변수에 담고있음 - 펄은 잘 모르지만, php에도 foreach라는 반복문이있기때문에, 호스트에 대한 3번의 Ping Test 결과값을 반복문으로 처리해 주는 것 같음. 또한, 2>&1 은 오류를 표준출력과 함께 해준다고 볼 수 있음. - 마지막으로 ping(param("Host")) 에서 param("Host")값이 ping 테스트의 host가 되는것 같음. # CGI는 서버와..
REVI1337
'SystemHacking/Nebula' 카테고리의 글 목록