SuNiNaTaS Board에 다섯개의 글들이 올라와있다.

Hint 글을 확인해보면 suninatas가 쓴 글을 확인해보라고 한다.

 

suninatas의 글인 README를 클릭하면 Password Input이 나온다. 이 곳에 적혀있는 SQL문을 보면 T_Web13테이블에서 nIdx가 3이고 szPwd가 &pwd&인 szPwd값을 참조하는 쿼리이다.

 

SQL Injection을 이용해서 pwd가 입력값이고 참으로 만들어주면 되는 것 같다.

 

SQL Injection을 해보니까 입력값이 필터링 되고 있었다. 필터링 되지 않는 입력에는 Wrong Query!가 출력되는 것을 이용해서 확인해보니까 '='가 필터링되고 있었다. '='는 간단히 부등호를 이용해서 우회할 수 있다.

이제 README의 게시물을 읽을 수 있게 되었다.

 

키를 찾으라고 한다. suninatastopofworld!는 authkey가 아니고 여기서 더 찾아야 되는 것 같다.

 

 

두 번째 게시물을 확인하면 md5해싱 url이 나와있다. 

 

suninatastopofworld!를 md5로 해싱한 값이 authkey인가 해서 넣어봤는데 이것도 아니었다. 다시 README 게시글로 돌아가서 페이지 소스를 확인해보니까

<form method="post" name="KEY_HINT" action="Rome's First Emperor">

이런 힌트가 나왔다.

 

로마의 첫 번째 황제인 Augustus가 이번 Authkey였다!!

 

md5를 어디에 쓰는지 모르겠어서 다른 분들의 풀이를 보니까 원래 Now you can read this article이 나오고 바로 게시글을 읽을 수 있는 것이 아니라 auth_key를 suninatastopofworld!를 md5로 해싱한 값으로 바꿔줘야지 게시글을 읽을 수 있었다. 오류인가???

 

 

'forensic > suninatas.com' 카테고리의 다른 글

[suninatas] Level 8  (0) 2021.09.06
[suninatas] Level 7  (0) 2021.09.06
[suninatas] Level 5  (0) 2021.09.06
[suninatas] Level 4  (0) 2021.09.06
[suninatas] Level 3  (0) 2021.09.06

 

"Check Key Value"라는 문구가 나오고 입력 폼과 함께 Check라는 버튼이 존재한다. 페이지 소스를 확인해보자.

 

<script>
	eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('g l=m o(\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\',\'7\',\'8\',\'9\',\'a\',\'b\',\'c\',\'d\',\'e\',\'f\');p q(n){g h=\'\';g j=r;s(g i=t;i>0;){i-=4;g k=(n>>i)&u;v(!j||k!=0){j=w;h+=l[k]}}x(h==\'\'?\'0\':h)}',34,34,'||||||||||||||||var|result||start|digit|digitArray|new||Array|function|PASS|true|for|32|0xf|if|false|return'.split('|'),0,{}))		
</script>

<!--Hint : 12342046413275659 -->
<!-- M@de by 2theT0P -->

 

위와 같은 자바스크립트 코드를 확인할 수 있다. 복잡해보이니까 따로 해석하지는 않고 바로 실행해서 결과값을 확인해주었다. eval은 문자열을 코드로 인식시켜주는 함수니까 안에 있는 코드만 실행시켜주었다.

 

var digitArray=new Array('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');
function PASS(n){
	var result='';
    var start=true;
    for(var i=32;i>0;){
    	i-=4;
        var digit=(n>>i)&0xf;
        if(!start||digit!=0){
        	start=false;
            result+=digitArray[digit]
            }
	}
    return(result==''?'0':result)
}

 

PASS함수에 힌트로 주어진 12342046413275659  를 넣어보면 '9c43c20c'라는 값이 나온다.

 

이 값을 입력 폼에 넣어주고 check를 누르면 Authkey를 알 수 있다.

 

'forensic > suninatas.com' 카테고리의 다른 글

[suninatas] Level 7  (0) 2021.09.06
[suninatas] Level 6  (0) 2021.09.06
[suninatas] Level 4  (0) 2021.09.06
[suninatas] Level 3  (0) 2021.09.06
[suninatas] Level 2  (0) 2021.09.06

Point가 존재하고 Plus 버튼을 누를때마다 Point가 1씩 증가한다. 그리고 아래에는 User-Agent 정보가 나와있다.

 

<!-- Hint : Make your point to 50 & 'SuNiNaTaS' -->

페이지 소스코드에 이러한 힌트가 있어서 포인트를 50까지 올려보기로 했다. 그랬더니 25에서

이러한 경고창이 나오고 더이상 포인트가 올라가지 않았다. SuNiNaTaS.. 브라우저를 좋아한다고 했으니까 Suninatas Uger Agent와 같은 환경에서 실행하는건가..라는 생각도 했다.

 

User-Agent	Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.63 Safari/537.36

위의 User-Agent는 윈도우 NT 10버전 64비트의 Gecko 같은 브라우저 레이아웃 엔진인 KHTML을 사용하는 크롬 52.0.2743.116버전이고, AppleWebKit 및 Safari 537.36 버전 과 호환되는 브라우저다. (User-agent string에 대해 좀 아는 사람은 알겠지만 실제 크롬 52.0.2743.116버전에서 출력하는 내용이다.) 라고 한다.(출처: 나무위키)

 

그런데 이렇게까지는 복잡하지 않을 것 같아서... 일단 Burp Suite를 이용해 User-Agent를 SuNiNaTaS로 바꿔주는 것 먼저 해보기로 했다.

 

이런식으로 User-Agent를 바꿔주니까 Point가 올라가는 것을 확인할 수 있었다.

 

 

Repeater를 이용해서 50까지 올리면 Authkey를 알 수 있다!!

 

 

 

'forensic > suninatas.com' 카테고리의 다른 글

[suninatas] Level 6  (0) 2021.09.06
[suninatas] Level 5  (0) 2021.09.06
[suninatas] Level 3  (0) 2021.09.06
[suninatas] Level 2  (0) 2021.09.06
[suninatas] Level 1  (0) 2021.09.05

+ Recent posts