suninatas.com에 관리자로 로그인을 하라고 한다.
하라는대로 바로 로그인창으로 가서 관리자 관련 초기 아이디, 패스워드를 열심히 쳐봐도 안돼서 "http://suninatas.com/admin/" 으로 접속해봤다.

그랬더니 QR코드가 하나 떠서 접속해보니까 연락처가 하나 연동되었다.

연락처에 적혀있는 홈페이지 "https://suninatas.com/admin/admlogin.asp"로 접속해 보았다.

 

adobe flash가 지원이 끝나서 보이지 않는다ㅠㅠㅠ 그래서 페이지 소스에 있는 "admlogin.swf"를 받아서 Adobe Flash Player로 확인해 보았다.

<html>
<head>
    <title>Admin Login</title>
</head>
<body>
    <embed src="admlogin.swf">
</body>
</html>

아이디와 패스워드 입력 폼이 있는걸 봐서 잘 찾아온 것 같다!! swf 리버싱 툴인 JPEX를 통해 분석해보니 로그인 버튼 쪽 코드에서 아이디와 패스워드를 확인할 수 있었다.

on(release){
   function receipt()
   {
      if(flashid != "admin" or flashpw != "myadmin!@")
      {
         flashmessage = "Wrong ID or PW";
         play();
      }
      else
      {
         flashmessage = "Auth : \"Today is a Good day~~~\"";
         play();
      }
   }
   receipt();
}

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

[suninatas] Level 11  (0) 2021.10.04
[suninatas] Level 10  (0) 2021.10.04
[suninatas] Level 9  (0) 2021.09.10
[suninatas] Level 8  (0) 2021.09.06
[suninatas] Level 7  (0) 2021.09.06

파일을 다운받아보면 Unregister이라는 폴더에 "Project1" 이라는 프로그램이 있다.

실행시키면 이전에 봤던 문제와 같은 느낌으로 Register KEY를 찾으라고 나온다.

디버거를 열어서 string을 보니까 "Authkey:", "Congratulation!"이라는 문자열이 보여서 해당 위치로 이동해서 확인해 보았다.

"Congratulation!"이 나오는 위쪽 함수의 시작 부분부터 내려오다보니 빈 주소를 EAX, 특정 값을 EDX에 넣은 후 404260 함수를 반복적으로 호출하고 있었다.

해당 부분 실행이 끝난 후 비어있던 EBX+310 부분을 확인하니까 각각 "2V" "B6" "H1" "XS" "0F"를 가르키고 있는 주소의 값으로 채워져 있고 마지막에(EBX+330) 다 합쳐진 "2VB6H1XS0F" 문자열을 가르키는 주소가 저장된다.

그 다음에는 EBP-4의 주소와 EBX+2F4의 값을 가져와서 42F4BC 함수를 실행하는데 이 부분이 끝나고 나면 EBP-4 부분에 내가 입력한 값(여기서 "111111")이 들어가 있다.

다음으로 입력값이 들어가 있는 EBP-4와 "2VB6H1XS0F"이 들어있는 EBX+330을 가져와서 함수를 실행 후 점프문을 수행하는데 아마 그대로 비교하는 함수로 생각되어 입력 폼에 "2VB6H1XS0F"를 입력하니까 AuthKey를 알 수 있었다.

 

함수를 하나하나 분석할 수도 있었지만 큰 흐름만 봐도 프로그램의 동작을 알 수 있었기 때문에 함수가 실행되기 전 후의 차이를 중점적으로 비교하며 분석했다.

 

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

[suninatas] Level 12  (0) 2021.10.04
[suninatas] Level 10  (0) 2021.10.04
[suninatas] Level 9  (0) 2021.09.10
[suninatas] Level 8  (0) 2021.09.06
[suninatas] Level 7  (0) 2021.09.06

 

"reversing.exe" 파일을 다운받고 ollydbg로 열어보려고 하니까 오류가 생기면서 열리지 않았다.

그냥 실행을 해보면 입력 폼과 OK 버튼이 있는 프로그램이 실행된다.

 

PEID로 확인해보니 C#으로 만들어진 프로그램이라 ollydbg로 실행이 되지 않은 듯 했다.

C# 프로그램을 리버싱해주는 .NET Reflector를 통해 확인해 보자.

먼저 Main을 보면 Form1이 실행되고 있다.

public class Form1 : Form
{
    // Fields
    private IContainer components;
    private TextBox textBox1;
    private Button button1;
    private Label label2;
    private Button button2;

    // Methods
    public Form1();
    private void button1_Click(object sender, EventArgs e);
    private void button2_Click(object sender, EventArgs e);
    protected override void Dispose(bool disposing);
    private void InitializeComponent();
    private void label2_Click(object sender, EventArgs e);
}

Form1에는 Button이 두 개 있는데 코드를 보면 button1이 "OK" 버튼인 것을 알 수 있다.

private void button1_Click(object sender, EventArgs e)
{
    string str = "2theT@P";
    string text = "Authkey : Did U use the Peid?";
    if (this.textBox1.Text == str)
    {
        MessageBox.Show(text, "SuNiNaTaS");
        this.textBox1.Text = "";
    }
    else
    {
        MessageBox.Show("Try again!", "SuNiNaTaS");
        this.textBox1.Text = "";
    }
}

button1 코드를 보면 바로 Authkey를 확인할 수 있다. 입력 폼에 "2theT@P"를 넣어서도 Authkey가 나온다.

그냥 Peid를 사용할 줄 아는지 확인하는 문제였나보다.

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

[suninatas] Level 12  (0) 2021.10.04
[suninatas] Level 11  (0) 2021.10.04
[suninatas] Level 9  (0) 2021.09.10
[suninatas] Level 8  (0) 2021.09.06
[suninatas] Level 7  (0) 2021.09.06

파일을 다운받은 후 ollydgb로 열어서 "all referenced text string"를 통해 문자열을 확인해보니까 Congratulation! 이라는 문자열을 볼 수 있었다. 

해당 문자열이 존재하는 위치로 이동하여 코드를 살펴보았다.

(사실 여기서 913465라는 문자열을 보고 바로 입력해봤는데 통과할 수 있었다ㅎㅎ)

첫 번째 함수를 call 하는 부분에 break point를 걸고 입력 폼에 "1111"을 입력 후 실행시켜보자.

한 줄 씩 실행시켜보면서 확인해보니까 우리의 입력 값이 사용되는 부분은 마지막 함수였다.

EAX와 EDX에 각각 입력값과 "913465"를 넣고 404608함수를 호출한다. 404608함수를 확인하면 다음과 같다.

ESI: input address, EDI: "913465" address

ESI-4와 EDI-4에 접근하는데 이 위치에는 해당 문자열의 길이가 저장되어 있는 듯 하다. 이전 함수에서 길이를 저장해놓은 것 같다.

그 후 EAX에서 EDX를 빼서 EAX에 넣는다. JA는 플래그 중 C와 ZR이 0일 때 점프한다. 즉, EAX가 EDX보다 클 때 점프하게 된다. 이 과정은 두 문자열 중 길이가 작은 문자열의 길이를 EDX에 넣는 과정으로 보인다.

그 다음 점프문은 JE인데 점프를 하기 위해서는 ZF가 1 즉, SHR EDX, 2의 결과가 0이 되어야 하기 때문에 길이가 4 미만일때만 점프를 하게 된다. 입력 문자열이 3 이하일 때를 먼저 확인해보자.

cmp cl, bl을 통해 첫번째 자리 문자가 같은지를 확인하고 같지 않다면 4046A6으로 점프해서 바로 리턴하므로 ZF가 0이기 때문에 Congraturation!을 통과할 수 없다.

끝 문자가 같다면 EDX(입력 값의 문자열 길이)에서 1을 빼고 je를 한다. 이 때 문자의 길이가 1이라면 je를 통해 리턴되는 부분으로 넘어가고 이와 같은 부분이 40466c 부분에도 있으므로 문자의 길이가 3이 되어야 이 부분을 통과할 수 있다.

그 후 cmp ch, bh로 두번째 자리 문자까지 같은지 확인해준다. 이번 경우에도 같아야 통과할 수 있다.

 

그 다음에도 and 연산을 통해 세 번째 자리 문자도 같은지 확인해주는데 결국 바로 return으로 점프하기 때문에 Congraturation!은 통과할 수 없게 된다..ㅎ 입력 값의 길이가 3보다 작을 때에도 문자를 비교하기는 하지만 결국은 통과할 수 없게 되는 것이다. 이제 길이가 4 이상일 때를 확인해보자.

 

앞에서부터 문자 네개를 가지고와서 같은지 확인한 뒤 다르면 404691로 점프한다.

404691에서도 한 글자씩 비교를 하다가 return을 하게 되는데 결국 여기도 4글자가 다 같아야지만 Congraturation을 통과하도록 해두었다. 즉, 일단 첫 네글자는 "9134"를 충족해야 한다.

첫 네 글자가 같다면 edx에서 1을 뺀 값이 0일 때 404651로 점프하게 된다. edx는 두 문자열 중 작은 값이 들어 있는 것에서 shr 2를 했으니 길이가 4, 5, 6일 때 넘어가게 된다(기존에 있는 문자열이 "913465"로 여섯글자 이므로 그 이상의 숫자가 edx에 들어갈 수 없다.)

esi와 edi가 가르키는 곳을 각 문자열의 다섯번째 문자로 변경한 뒤 and edx, 3이 0이면 40467f로 점프하게 된다. 즉 길이가 4일 경우에 점프하는데 40467f로 가면 이번에도 그냥 return하게 된다.

그 뒤로는 이전에 살펴봤던 것 처럼 한글자씩 비교한다. 이 때 한글자라도 다르다면 바로 return 부분으로 점프해버리니까 전부 같아야 하고 주어진 문자열에서 비교하는 부분이 "65"니까 우리가 넣은 문자열도 7글자면 안되고 6글자로 맞춰서 "65"를 가르키게 해야한다.

그 다음에는 add eax, eax를 한 뒤 return을 하는데 이 때에는 이전에 입력 문자열의 길이가 6이 아닐때와 다르게 eax가 0으로 세팅되어 있는 상태이기 때문에 ZF가 1인 상태로 넘어가게 되고 Congraturation!이 나오게 되는 것이다.

 

하나하나 해석하다 보면 꽤나 오래 걸리지만 역시 리버싱은 일단 떄려 맞추는게 제일 빠르게 풀 수 있는 것 같다ㅎㅎ 그래서 답은 "913465"가 된다!

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

[suninatas] Level 11  (0) 2021.10.04
[suninatas] Level 10  (0) 2021.10.04
[suninatas] Level 8  (0) 2021.09.06
[suninatas] Level 7  (0) 2021.09.06
[suninatas] Level 6  (0) 2021.09.06

 

ID, PW 입력폼이 나오고 페이지 소스를 보면 힌트를 확인할 수 있다.

 

<!-- Hint : Login 'admin' Password in 0~9999 -->

 

ID는 'admin'이라고 알려주고 Password는 0~9999 사이라고 한다. Burp suite를 이용해서 간단히 풀어줄 수 있다.

 

Burp Suite Proxy탭에서 오른쪽 버튼을 눌러서 Send to Intruder을 해준다.

자동으로 Target은 설정이 되고

Positions탭에서 Clear로 초기화해준 뒤 pw만 잡아서 Add를 해준다.

Payloads 탭에서 type을 Number로 설정하고 Number range를 설정해준다.

Options 탭에서 Grep부분에 Authkey를 추가해준다. 1번에서 6번까지 문제를 풀면서 정답에 Authkey 가 포함되는 것을 알았기 때문에 추가해줄 수 있었다. Password Incorrect!를 추가해서 Grep되지 않는 값을 찾아도 괜찮다.

Start Attack을 누르면 이와 같이 하나씩 시도하면서 결과를 알려준다.

AuthKey로 정렬하고 확인하다 보면 Authkey가 Grep되는 값을 찾을 수 있다.

ID: admin, PW: 7707이다. 그런데 사실 Burp Suite로 하면 너무 느려서 python으로 정답을 확인한 뒤 범위를 다시 지정하고 공격을 수행하였다.

 

import requests

URL="http://suninatas.com/challenge/web08/web08.asp"

session=requests.Session()
 
for password in range(10000) :

    login_data={"id":"admin", "pw":password}
    req=session.post(URL, data=login_data)

    key = req.text.find("Authkey")
    
    if (key!=-1):
        print(req.text[key:key+50])

 

이런식으로 파이썬을 이용해 짜주면 훨씬 금방 코드를 짤 수 있다.

 

 

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

[suninatas] Level 10  (0) 2021.10.04
[suninatas] Level 9  (0) 2021.09.10
[suninatas] Level 7  (0) 2021.09.06
[suninatas] Level 6  (0) 2021.09.06
[suninatas] Level 5  (0) 2021.09.06

 

 

백만년전에 찍은 것 같은 아이유 사진과 함께 Do U Like girls?라는 문구가 보인다.

페이지 소스를 확인해보면 힌트와 스크립트가 보인다.

 

    <script>
        function noEvent() {
            if (event.keyCode == 116 || event.keyCode == 9) {
                alert('No!');
                return false;
            }
            else if (event.ctrlKey && (event.keyCode = 78 || event.keyCode == 82)) {
                return false;
            }
        }
        document.onkeydown = noEvent;
    </script>
    
<!-- Hint : Faster and Faster -->
<!-- M@de by 2theT0P -->

 

그리고 밑을 확인해보지 않았었는데 내려보면 Yes라는 버튼과 사진 하나가 더 나온다.

 

 

 

힌트의 Faster and Faster은 빠르게 Yes  버튼을 눌러야 된다는 의미인 것 같다. 실제로 Yes를 눌러보면 너무 느려서 실패했다고 나온다.

 

 

스크립트 코드를 확인해보면 event.keycode가 116이거나 9일 때 No라는 경고문이 뜨는데 여기서 116은 f5(새로고침)이고 9는 tab이다. 새로고침해서 탭으로 빠르게 누르는 것을 방지하는 듯 하다.

또한 event.keycode가 78 or 82이고event.ctrlKey가 true일때도 false를 return한다. 여기서 78은 'n', 87는 'r'이다. ctrl+n은 새로운 창 생성이고 ctrl+r은 새로고침이다. 이 두 동작도 막힌 것을 알 수 있다.

 

        <div align="center">
            <input type="submit" value="YES">
        </div>

 

Yes를 누르게 되면 type에 지정된 대로 서버로 데이터를 보내게 된다.

 

<form method="post" action="./web07_1.asp" name="frm">

 

해당 폼을 보면 frm이라는 이름을 가지고 있다. 그러므로 개발자도구 콘솔창에서 document.frm.submit()를 재빠르게 입력해주면 폼이 넘어갈 수 있을 것이다.

 

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

[suninatas] Level 9  (0) 2021.09.10
[suninatas] Level 8  (0) 2021.09.06
[suninatas] Level 6  (0) 2021.09.06
[suninatas] Level 5  (0) 2021.09.06
[suninatas] Level 4  (0) 2021.09.06

 

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

문제를 들어가면 이와 같은 큰 검정 화면에 "Write artivles in Notice Board!"라는 문구가 나온다.

 

이 페이지 자체에서는 이상한 점을 찾지 못해서 시키는대로 Notice Board에 글을 써보기로 했다. 그런데 Notice 페이지에는 글쓰기가 없어서 홈페이지를 살펴보다가 글쓰기가 가능한 Free 게시판에서 3번 문제 관련된 글들이 보이고 Notice 게시판이랑 구조도 비슷해 보여서 이 부분을 공략하기로 했다..ㅎ

 

free 게시판의 URL이 이렇게 생겨서 /board/notice/write로 접근을 해보니까 접근이 가능했다!

 

 

그대로 내용을 채워서 제출을 해주면 Authkey를 구할 수 있다.

 

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

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

+ Recent posts