[문제풀이] Nebula, Level16 Wargames/e-exercises.com2017. 8. 7. 17:29
※ LEVEL 16
Q. There is a perl script running on port 1616.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | #!/usr/bin/env perl use CGI qw{param}; print "Content-type: text/html\n\n"; sub login { $username = $_[0]; $password = $_[1]; $username =~ tr/a-z/A-Z/; # conver to uppercase $username =~ s/\s.*//; # strip everything after a space @output = `egrep "^$username" /home/flag16/userdb.txt 2>&1`; foreach $line (@output) { ($usr, $pw) = split(/:/, $line); if($pw =~ $password) { return 1; } } return 0; } sub htmlz { print("<html><head><title>Login resuls</title></head><body>"); if($_[0] == 1) { print("Your login was accepted<br/>"); } else { print("Your login failed<br/>"); } print("Would you like a cookie?<br/><br/></body></html>\n"); } htmlz(login(param("username"), param("password"))); | cs |
A. 이번 문제는 명령어 인젝션 문제이다.
이전에도 구동중인 서비스에 명령어 인젝션하는 문제가 있었는지는 가물가물하지만, 인젝션 문제는 자주 나왔던거 같다. 가벼운 트릭 하나만 쓰면 쉽게 풀리는 문제니까 바로 문제풀이 들어가도록 하겠다.
[그림 1] 실행 파일 작성
flag16 계정이 접근할 수 있는 위치에 파일을 생성한 뒤 other 권한에 실행 권한을 부여한다. 우리는 명령어 인젝션을 할 것이니까~~!
[그림 2] 명령어 인젝션
명령어를 실행시키기 위해 ` 문자로 감싸고 경로에 별표를 삽입하여 모든 경로를 탐색할 수 있게 한다.
요것이 바로 트릭이라면 트릭~ 사전에 이 문자의 기능을 알고 있었다면 쉽게 풀었을 것이다 :)
[그림 3] 플래그 획득
플래그 획득~
'Wargames > e-exercises.com' 카테고리의 다른 글
[문제풀이] Nebula, Level15 (0) | 2017.07.25 |
---|---|
[문제풀이] Nebula, Level13, Level14 (0) | 2017.07.23 |
[문제풀이] Nebula, Level11, Level12 (0) | 2017.07.21 |
[문제풀이] Nebula, Level09, Level10 (0) | 2017.07.19 |
[문제풀이] Nebula, Level05, Level06, Level07, Level08 (0) | 2017.07.16 |