Natas 9 -> 10
Natas9 문제이다.. 일단 소스보기 부터 해야겠지?
소스를 분석해보자. input 형식으로 들어간 데이터는
"needle" 이라는 이름으로 POST 형식으로 넘겨지고
PHP 내부에서는 데이터를 가져와 값이 있을경우에
passthru() 함수로 넘겨서 명령어를 실행한다..
여기서 중요한건 passthru() 함수이다.
php에서 외부 명령어 실행하는 함수이다.
즉 이함수를 이용해서 리눅스 명령어를 넘기는 형식
그럼 리눅스 명령어를 내가 원하는대로 바꾸어서 사용한다면?
결국 sql injection 문제와 비슷하다.
그래서 이를 command injection 문제라고 한다.
내가 사용한 방법은 일단 grep 의 명령어를 무효화 시키는 것이다.
그럼 앞의 명령어를 종료 해야하는대 세미콜론( ; ) 을 이용해서 종료
그리고 중간에 비밀번호가 있는 경로를 cat을 통해서 파일을 읽고
dictionary.txt 를 리눅스 주석 # 을 이용해서 닫으면...
; cat /etc/natas_webpass/natas10 #
의 명령어를 이용하면...
클리어
natas10 : nOpp1igQAkUzaI1GUUjzn1bFVj7xCNzu
Natas 10 -> 11
역시 소스보기
natas9 번 문제와 유사하다..
하지만 preg_match 함수로 세미콜론과 나머지 우회방법을.... 막아버림
그럼 어떤식으로 풀어야할까..
정말 생각이 안났지만..
grep 함수 그자체를 이용하면 되는 것을!
번뜩 생각나면서
grep 은 메타 문자를 사용하는 명령어로써.
메타문자 | 기 능 | 사용 예 | 사용 예 설명 |
^ | 행의 시작 지시자 | '^love' | love로 시작하는 모든 행과 대응 |
$ | 행의 끝 지시자 | 'love$' | love로 끝나는 모든 행과 대응 |
. | 하나의 문자와 대응 | 'l..e' | l 다음에 두 글자가 나오고 e로 끝나는 문자열을 포함하는 행과 대응 |
* | 선행문자와 같은 문자의 0개 혹은 임의개수와 대응 | ' *love' | 0개 혹은 임의 개수의 공백 문자 후에 love로 끝나는 문자열을 포함한 행과 대응(*앞에 공백이 있는 상태, 다른 문자가 있다면 그 문자가 0개 혹은 임의 개수의 문자 후에 love로 끝나느 경우를 말함) |
[] | [] 사이의 문자 집합중 하나와 대응 | '[Ll]ove' | love나 Love를 포함하는 행과 대응 |
[^ ] | 문자집합에 속하지 않는 한 문자와 대응 | '[^A-K]love' | A와 K 사이의 범위에 포함되지 않는 한 문자와 ove가 붙어있는 문자열과 대응 |
\< | 단어의 시작 지시자 | '\<love' | love로 시작하는 단어를 포함하는 행과 대응(vi,grep에서 지원) |
\> | 단어의 끝 지시자 | 'love\>' | love로 끝나는 단어를 포함하는 행과 대응 (vi,grep에서 지원) |
\(..\) | 다음 사용을 위해 태그를 붙인다. | '\(lov\)ing' | 지정된 부분을 태크1에 저장한다. 나중에 태그값을 참고하려면 \1을 쓴다. 맨 왼쪽부터 시작해 태그를 9개가지 쓸 수 있다. 왼쪽 예에서는 lov가 레지스터1에 저장되고 나중에 \1로 참고할 수 있다. |
x\{m\} | 문자 x를 m번 반복한다. | 'o\{5\}' | 문자 o가 5회 연속적으로 나오는 모든 행과 대응 |
x\{m,\} | 적어도 m번 반복한다. | 'o\{5,\}' | 문자 o가 최소한 5회 반복되는 모든 행과 대응 |
x\{m,n\} | m회 이상 n회 이하 반복한다. | o\{5,10\}' | 문자 o가 5회에서 10회 사이의 횟수로 연속적으로 나타나는 문자열과 대응 |
출처: http://geundi.tistory.com/113 [Geundi]
를 이용해서
. /etc/natas_webpass/natas11 #
를 입력함
그럼 위와같은 경로의 파일로 . 모든 행을 불러옴
뒤에는 주석처리해서 역시 딕셔너리 막아주고
그럼 클리어!
natas11 : U82q5TCMMQ9xuFoI3dYX61s7OZD9JKoK
Natas 11 -> 12
소스보기로!
이번문제는 조금 어렵다.. 분석해야 할것이 많다
자 일단
1 : 쉽게 설명하면 두개의 문자열을 XOR 해주는것!
2 : 쿠키 값의 데이터를 디코드하여 변경된 점을 저장해주는 함수
3 : 그리고 다시 암호화하여 쿠키를 정해주는 함수
4. 조건문으로 배경색이 변하면 변경해주는 함수 정도..( 쿠키값에 영향이 갈듯 )
5 . 쿠키 데이터에 showpassword 함수가 yes 면 natas12 비번 보여줌
자 간단하게 분석해 본 결과이다.
세부적으로 분석해보면...
쿠키값을 파악하고 쿠키값의 데이터중 showpassword 만 yse 면 되는대....
no 저장되어있다. (1번 위의 변수 확인해보면...)
그럼 쿠키값을 변조시켜 yes로 보내면 클리어!
즉 defaultdata 의 변수를 yes로 바꾼것을 암호화하여 쿠키값으로 넘기면된다!
그럼 일단 Xor_encrypt 함수의 키값을 알아야한다.
즉 이번문제는 키값을 찾는 문제!
자그럼 키값을 어떻게 찾을까
다행히도 xor 는 특이한 특성이있다
A xor B = C
A xor C = B
B xor C = A
라는 규칙성을 가지고 있어.
이규칙성을 이요하면 키값을 알수 있다.
즉 A 를 json_encode( defaultdata ) 한것 이라고 두고
C 를 base64_decode(쿠키값) 이라고 두면
B : 키값을 알수 있다!
소스분석의 코드를 복사해서 조금만 수정해주고
실행해보니
qw8j 가 규칙적으로 반복되는 것을 확인
즉 키값은 qw8j
그럼 찾아낸 키값을 토대로
showpassword 를 yes로 변경시켜서 암호화 하면 위와같이 변조된 쿠키값이 나옴
그 쿠키값을 복사해서 개발자 도구를 이용해 보내면
클리어!
natas12 : EDXp0pS26wLKHZy1rDBPUZk0RKfLGIR3
'WEB_Security(실습) > Natas' 카테고리의 다른 글
Natas (17~20 ) (0) | 2017.06.23 |
---|---|
Natas (14~16) (0) | 2017.06.22 |
Natas(12~ 13) (0) | 2017.06.21 |
Natas(5~8) (0) | 2017.06.15 |
Natas : Over The Wire ( wargame ) (1~4) (0) | 2017.06.15 |
댓글