• [Web] HackCTF Authenticate

    2022. 3. 27.

    by. hackintoanetwork

    해당 url로 이동해보자.


    이동하면 위와 같은 로그인 페이지가 나온다.

    처음에는 로그인 페이지만 보고 SQL 인젝션 문제인지 알았지만 그게 아니었다..


    <script type="text/javascript">
    		$(".c_submit").click(function(event) {
    			event.preventDefault();
    			var u = $("#cpass").val();
    			var k = $("#cuser").val();
    			var func = "\x0d\x13\x45\x17\x48\x09\x5e\x4b\x17\x3c\x1a\x1f\x2b\x1b\x7a\x0c\x1f\x66\x0b\x1a\x3e\x51\x0b\x41\x11\x58\x17\x4d\x55\x16\x42\x01\x52\x4b\x0f\x5a\x07\x00\x00\x07\x06\x40\x4d\x07\x5a\x07\x14\x19\x0b\x07\x5a\x4d\x03\x47\x01\x13\x43\x0b\x06\x50\x06\x13\x7a\x02\x5d\x4f\x5d\x18\x09\x41\x42\x15\x59\x48\x4d\x4f\x59\x1d\x43\x10\x15\x00\x1a\x0e\x17\x05\x51\x0d\x1f\x1b\x08\x1a\x0e\x03\x1c\x5d\x0c\x05\x15\x59\x55\x09\x0d\x0b\x41\x0e\x0e\x5b\x10\x5b\x01\x0d\x0b\x55\x17\x02\x5a\x0a\x5b\x05\x10\x0d\x52\x43\x40\x15\x46\x4a\x1d\x5f\x4a\x14\x48\x4b\x40\x5f\x55\x10\x42\x15\x14\x06\x07\x46\x01\x55\x16\x42\x48\x10\x4b\x49\x16\x07\x07\x08\x11\x18\x5b\x0d\x18\x50\x46\x5c\x43\x0a\x1c\x59\x0f\x43\x17\x58\x11\x04\x14\x48\x57\x0f\x0a\x46\x17\x48\x4a\x07\x1a\x46\x0c\x19\x12\x5a\x22\x1f\x0d\x06\x53\x43\x1b\x54\x17\x06\x1a\x0d\x1a\x50\x43\x18\x5a\x16\x07\x14\x4c\x4a\x1d\x1e";
    			buf = "";
    			if(k.length == 9) {
    				for(i = 0, j = 0; i < func.length; i++) {
    					c = parseInt(func.charCodeAt(i));
    					c = c ^ k.charCodeAt(j);
    					if(++j == k.length) {
    						j = 0;
    					}
    					buf += eval('"' + a(x(c)) + '"');
    				}
    				eval(buf);
    				
    			} else {
    				$("#cresponse").html("<div class='alert alert-danger'>Invalid creds...</div>");
    			}
    		});
    		
    		function a(h) {
    			if(h.length != 2) {
    				h = "\x30" + h;
    			}
    			return "\x5c\x78" + h;
    		}
    			
    		function x(d) {
    			if(d < 0) {
    				d = 0xFFFFFFFF + d + 1;
    			}
    			return d.toString(16).toUpperCase();
    		}
    </script>

    개발자 도구로 보니 위와 같이 로그인 페이지 JS 소스가 주어졌다.

    소스를 보니 UsernamePassword를 받아서 코드를 실행하는데 Username의 길이가 9자리면 코드가 실행된다고 한다.


    자바스크립트 코트 아래쪽에 id="cresponse"라는 필드가 있다. 9글자인 걸 보니 Username이 "cresponse"라고 알려주는 듯 하다.


    "cresponse"를 넣어 로그인 버튼을 누른 후 개발자 도구 콘솔에서 아래와 같은 buf 문자열을 얻었다.

    'na d8f08r_hzXk\x15bl\x03hh["{.\x7F+r.\'s1q=%|?dretv/#t?df|xw5#p"ba&xv?h`\x1Fa/*.hf/1p::(<)r-cpchkdu>cl~khkpl2bvp:\'l~{.`}>s)d~{:yq?i)`c}=-3p%8x,:{&8%<\'u1e{ht#b\'s18\x7F%:sdumbh4ck5%.&yl6a0r;cag88ay#t:/tj)bjw9Pz~v<-h1tt\x7F~j?-k?uuq?:rp'

    알아보기 힘든 이상한 문자열이 나왔고 뒤쪽에 dumbh4ck5 라는 9글자 문자열이 있다.

    9글자 문자열이니 Username에 넣어보고 다시 buf를 확인한다.


    확인해보았더니 아래와 같은 자바스크립트 코드가 나왔다.


    if(u == "XorIsNotSooS3cur3") {
        if(document.location.href.indexOf("?p=") == -1) {
            document.location = document.location.href + "?p=" + u;
        }
    }
    else {
        $("#cresponse").html("<div class='error'>Wrong password sorry.")
    }

    이 코드에서 u는 패스워드를 의미하고 패스워드가 "XorIsNotSooS3cur3"라는 조건을 만족하면 ?p=XorIsNotSooS3cur3를 붙인 주소로 이동한다.


    패스워드에 "XorIsNotSooS3cur3"을 넣어 로그인 버튼을 눌렀고


    Flag가 출력되는 것을 볼 수 있었다.

    Flag : HackCTF{9re4t_4m4z1n9_gre4t_amaz1ng_w3b}

     

     

     

    HackCTF

    Do you wanna be a God? If so, Challenge!

    ctf.j0n9hyun.xyz

    'Wargame > HackCTF' 카테고리의 다른 글

    [Web] HackCTF Wise Saying  (0) 2022.03.27
    [Web] HackCTF LOL  (0) 2022.03.26
    [Web] HackCTF Cookie  (0) 2022.03.26
    [Web] HackCTF Home  (0) 2022.03.24
    [Web] HackCTF Input Check  (0) 2022.03.24

    댓글