728x90
반응형
728x90
반응형
728x90
반응형

소스를 보자

 

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
if($_GET['no']){
  $db = dbconnect();
  if(preg_match("/ |\/|\(|\)|\||&|select|from|0x/i",$_GET['no'])) exit("no hack");
  $result = mysqli_fetch_array(mysqli_query($db,"select id from chall18 where id='guest' and no=$_GET[no]")); // admin's no = 2
 
  if($result['id']=="guest"echo "hi guest";
  if($result['id']=="admin"){
    solve(18);
    echo "hi admin!";
  }
}
?>
cs

 

 

where id='guest' and no=2 or id='admin' 으로 만들어주면 된다.

 

공백을 필터링하기 때문에 %20대신 %0a로 우회해주면 된다.

 

 

 

 

?no=2%0aor%0aid%0a=%27admin%27

728x90
반응형
728x90
반응형

Web

 

Compare

100

php의 느슨한 비교 취약점

 

넘기는 값을 배열로 넘겨주면 된다.

 

직접 html코드에서 name을 password[] 로 바꿔주고 보내면 된다.

 

 

 

Simple SQL

150

sql injection

소스:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
    include "./conn.php";
 
    $id = $_GET['id'];
    $pw = $_GET['pw'];
    
    if(preg_match('/[a-zA-Z0-9]/i'$id|| preg_match('/[a-zA-Z0-9]/i'$pw)) exit("빼애애ㅐ애애ㅐㅐ액!!!!");
    if(preg_match('/\||&| |0x|\t|admin|-|\'/i'$id|| preg_match('/\||&| |0x|\t|admin|-|\'/i'$pw)) exit("빼애애ㅐ애애ㅐㅐ액!!!!");
 
    $query = "select * from simple_sql where id='${id}' and pw='${pw}'";
 
    echo "<hr><b>Query : {$query}</b><hr><br>";
 
    $result = mysqli_fetch_array(mysqli_query($conn,$query));
 
    if($result){
        echo $flag;
        exit;
    }
    echo "<hr><br>";
    highlight_file(__FILE__);
?>
cs

소문자, 대문자, 숫자 모두 필터링에 몇몇개의 문자열들도 필터링한다.

 

 

\은 필터링하지 않기 때문에 \을 넣어서 id='\'로 만들면 뒤 '은 문자열 취급되어 pw=' 에 있는 ' 까지 문자열이 된다.

 

 id='\' and pw='=""#  로 만들어줬더니 풀렸다.

 

http://noob.kr/Simple_SQL.php?id=\&pw==%22%22%23

 

원래는 false가 떠야하지만 php처럼 sql에서도 타입 저글링이 가능하여 true가 된다. 

 

 

 

 

 

Simple md(5-1)

170

 

소스:

 

1
2
3
4
5
6
7
8
9
<?php
    if($_GET['md4'== hash("md4"$_GET['md4'])){
        echo "<hr><b>".$flag."</b><hr><br>";
    }else{
        echo "<hr><b>False...</b><hr><br>";
    }
 
    highlight_file(__FILE__);
?>
cs

 

입력값과 md4 hash 값이 같아야 한다.

 

느슨한 비교 == 을 사용했기 때문에 매직해쉬를 사용하면 된다.

 

 

아래 글에 직접 값을 찾으신 분이 계시다.

https://medium.com/@sbasu7241/hsctf-6-ctf-writeups-a807f0b25ae4

 

0e251288019 을 넣어주면 된다고 한다.

728x90
반응형
728x90
반응형

200점 문제

 

접속하면 level : 1 을 볼 수 있고, 아래에 view-source(소스보기)가 있다.

 

  1. <?php
  2. include "../../config.php";
  3. if($_GET['view-source'] == 1){ view_source(); }
  4. if(!$_COOKIE['user_lv']){
  5. SetCookie("user_lv","1",time()+86400*30,"/challenge/web-01/");
  6. echo("<meta http-equiv=refresh content=0>");
  7. }
  8. ?>
  9. <html>
  10. <head>
  11. <title>Challenge 1</title>
  12. </head>
  13. <body bgcolor=black>
  14. <center>
  15. <br><br><br><br><br>
  16. <font color=white>
  17. ---------------------<br>
  18. <?php
  19. if(!is_numeric($_COOKIE['user_lv'])) $_COOKIE['user_lv']=1;
  20. if($_COOKIE['user_lv']>=6) $_COOKIE['user_lv']=1;
  21. if($_COOKIE['user_lv']>5) solve(1);
  22. echo "<br>level : {$_COOKIE['user_lv']}";
  23. ?>
  24. <br>
  25. <a href=./?view-source=1>view-source</a>
  26. </body>
  27. </html>

 

 

 

 

php 구문을 볼 수 있는데, 중요한 부분은 중간에 있는 php 코드다.

 

 

if(!is_numeric($_COOKIE['user_lv'])) $_COOKIE['user_lv']=1;
  if($_COOKIE['user_lv']>=6) $_COOKIE['user_lv']=1;
  if($_COOKIE['user_lv']>5) solve(1);

 

쿠키 user_lv 의 값이 숫자가 아니면 1로 설정,

6이상이면 1로 설정

5이상이면 solve다.

 

크롬 확장프로그램 EditThisCookie를 이용해서 user_lv의 값을 5이상 6미만인 값으로 설정하면 된다.

 

나는 5.5 로 해두었다. 5.5로 설정하고 원래 페이지로 돌아가면 풀린다.

 

 

 

 

728x90
반응형
728x90
반응형

click the button!

i can't catch it!

 

 

버튼을 클릭할 수가 없다. 페이지 소스를 보자

 

1
<input type="button" onfocus="nokp();" onclick="window.location='?key=f477';" value="click me!">
cs

 

?key=f477로 이동한다. 직접 url에 쿼리값을 줘서 이동하자

 

http://wargame.kr:8080/flee_button/?key-f477

 

 

 

728x90
반응형

'WAR GAME > wargame.kr' 카테고리의 다른 글

Wargame.kr [fly me to the moon] 풀이  (0) 2019.12.23
Wargame.kr [md5 password] 풀이  (0) 2019.08.22
Wargame.kr [WTF_CODE] 풀이  (0) 2019.08.22
Wargame.kr [login filtering] 풀이  (0) 2019.08.22
Wargame.kr [flee button] 풀이  (0) 2019.08.21
Wargame.kr [already got] 풀이  (0) 2019.08.21
728x90
반응형

can you see HTTP Response header?

 

 

 

 

크롬을 이용하면 된다.

 

 

f12 > Network > f5 > Response Headers

 

 

 

728x90
반응형

'WAR GAME > wargame.kr' 카테고리의 다른 글

Wargame.kr [fly me to the moon] 풀이  (0) 2019.12.23
Wargame.kr [md5 password] 풀이  (0) 2019.08.22
Wargame.kr [WTF_CODE] 풀이  (0) 2019.08.22
Wargame.kr [login filtering] 풀이  (0) 2019.08.22
Wargame.kr [flee button] 풀이  (0) 2019.08.21
Wargame.kr [already got] 풀이  (0) 2019.08.21
728x90
반응형

Hand of plus

100

[문제 설명] 귀여운 아오바가 Beatcoin을 채굴하려고 한다. 아오바의 그래픽 카드를 도와주자.
[출제자] 정준영(Joon)

 

 

extract($_COOKIE); 을 사용하고 있다.

구글 확장프로그램을 이용해서 각각 4개의 이름과 값으로 쿠키를 추가해주면 된다.

 

 

 

The great escape

100

[문제 설명] 요원들은 배급받은 키를 쳐야 지령을 받을 수 있다고 한다. 요원들이 받는 지령을 몰래 받아보자.
[출제자] 정준영(Joon)

 

 

1부터 1000까지 브포를 해봤다. 틀렸다. 흠....

 

이것저것 해봤는데 디렉토리 인덱싱이 가능했다.

 

패스워드 찾아서 입력해주면 플래그가 나온다.

 

 

 

핵발사 시스템

300

[문제 설명] 귀여운 아오바가 어딘가로 핵을 쏘고싶어한다. 도와주자.
[출제자] 정준영(Joon)

 

 

1
2
3
4
5
6
7
8
9
10
11
12
<?php
    if(isset($_POST["Key1"]) && isset($_POST["Key2"]) && isset($_POST["Key3"])){
        if(hash('md5',$_POST["Key1"]) == hash('crc32',$_POST["Key2"])){
            if(hash('crc32',$_POST["Key2"]) == hash("md4"$_POST["Key3"])){
                if(hash("md5"$_POST["Key1"]) == hash("md4"$_POST["Key3"])){
                    echo "<script>alert('[Suzukaze aoba says]\\nThanks a lot! I launched an nuclear to some space!\\n\\nHere\'s a little prize!\\n[FLAG HERE]');</script>"
                }elseecho "3"; Fail(); }
            }elseecho "2"; Fail(); }
        }else{echo "1";  Fail(); }
    }
    function Fail(){ echo "<script>alert('[Suzukaze aoba]\\nT.T... I want to fire nuclear...');</script>"; }
?>
cs

 

매직해시문제 https://www.whitehatsec.com/blog/magic-hashes/

 

md5(Key1) == crc32(Key2) == md4(key3)

 

Key1 = 240610708

Key2 = 2332

Key3 = 48291204

 

728x90
반응형
728x90
반응형

/ 50

로봇 이미지가 있다.

로봇...로봇...로봇...robots.txt?!

robots.txt의 내용

역시나..

해당 페이지로 이동하면 플래그가 나온다.

FLAG : HackCTF{w3lcome_to_s1mple_web_h3cking!}

 

 

Hidden 50

5번 파일에 플래그가 있다고 한다.

페이지에는 1번부터 4번까지의 버튼이 있다.

버튼을 클릭하면 http://ctf.j0n9hyun.xyz:2023/?id=1 로 이동하는 것을 알 수 있고, 여기서 id 값을 5로 입력해 주면 플래그가 나온다.

FLAG : HackCTF{idx_is_so_s1m3le_ctf}

 

 

Button 50

페이지 소스를 까서 submit의 value값을 button에서 flag로 변경해주고 버튼을 클릭하면 플래그가 출력된다.

FLAG : HackCTF{0k4y...php_c4nn0t_cr34t3_4_butt0n}

 

 

보물 100

page 값에 모든 정수값을 대입해봐야 하는 것 같다.

burp suite을 이용해서 1부터 10000 까지 시도하도록 했고, 중간에 길이가 다른 응답이 날라와서 확인해 보니 플래그가 있었다.

burp suite을 이용했다.

FLAG : HackCTF{0hhhhh_5o_g0od_try!}

 

 

Guess me 100

게싱문제는 아니다.

$filename의 값을 'secret.txt'로 선언한 뒤에 extract($_GET);을 이용해 값을 받고 있다.

따라서 우리는 $filename의 값을 바꿀 수 있고, $filename의 값을 아무 값으로 변경해 준다면, 해당 파일은 존재하지 않을 것이므로 -> guess에 아무 값도 입력해주지 않는다면 $guess === $secretcode 가 TRUE가 되어 플래그가 나올 것이다.

 

http://ctf.j0n9hyun.xyz:2030/?filename=1&guess=

성공이다.

 

FLAG : HackCTF{3xtr4c7_0v3rr1d3ds_pr3vi0u5_kn0wn_v4r1abl35}

 

 

Read File 100

http://ctf.j0n9hyun.xyz:2021/flag.php -> Access Denied

http://ctf.j0n9hyun.xyz:2021/?command=http://ctf.j0n9hyun.xyz:2021/flag.php -> X

http://ctf.j0n9hyun.xyz:2021/?command=http://ctf.j0n9hyun.xyz:2021/flflagag.php -> Access Denied

 

flag 문자열이 필터링 되고 있음을 확인. 권한을 얻기 위해 localhost로 바꿔준다.

 

http://ctf.j0n9hyun.xyz:2021/?command=http://127.0.0.1:2021/flflagag.php -> X

잉? 내가 알고 있는 문제랑은 조금 다른 것 같다.

 

http://ctf.j0n9hyun.xyz:2021/?command=flflagag.php -> 성공

flag is HackCTF{w3lcome_to_vu1n_web?}

 

 

Login 100

첫 페이지에 있는 view source를 클릭해서 php 소스를 보자.

sqli를 시도해보면 될 것 같다. 어떤 id를 사용해야 하는지는 안나와있지만, admin을 id로 사용하면 될 것 같은 느낌이다.

id = admin'-- '

pw = 1234

Flag is HackCTF{s1mple_sq1_1njecti0n_web_hack!!}

 

 

마법봉 100

일단 소스를 보자

바로 보고 매직 해시 문제임을 알아야 한다.

매직 해시 리스트에서 해당 값을 찾아서 어떤 값을 넣어야 할지 찾아내면 끝.

https://www.whitehatsec.com/blog/magic-hashes/

 

Magic Hashes | WhiteHat Security

For more than the last decade, PHP programmers have been wrestling with the equals-equals (==) operator. It’s caused a lot of issues. This has a particular implication for password hashes. Password hashes in PHP are base16 encoded and can come in the form

www.whitehatsec.com

 

FLAG : HackCTF{magic_makes_everything_possible}

 

 

 

Time 150

2달 하고도 1초 더 기다리면 플래그를 얻을 수 있다! 기다리기만 하면 되는 개꿀문제

사실 is_numeric함수에서 지수형태 5.184001e6를 이용해 통과하고

그 다음 조건문들은 5.184001e6의 계산값 5184001으로 통과되며, sleep함수에서 int형으로 변환 될 때 5.184001e6은 5로 변환되어 5초만 기다리면 플래그를 얻을 수 있다.

flag is HackCTF{1_w4nt_t0_sp3nd_m0r3_t1m3

 

 

Input Check 150

페이지 소스를 보면 힌트가 있다.

그래서 변수를 배열로 줬더니 플래그가 나왔다.

http://ctf.j0n9hyun.xyz:2033/?text[]=flag

HackCTF{y0u_are_catch_f1ag!!}

 

 

Home 200

문제 페이지를 보면, 내 ip가 나오고, 힌트로 머리말을 생각하라고 한다. 머리말 == header

header에 x-forward-for을 추가해 주면 된다.

curl --header "X-Forwarded-For: 127.0.0.1" http://ctf.j0n9hyun.xyz:2034 

curl은 윈도우 cmd에서도 잘 된다.

 

flag is HackCTF{U5u4lly_127.0.0.1_4ll0w5_y0u_t0_p4ss}

 

 

 

가위바위보 200 

가위바위보 게임을 이용해서 플래그를 구하는건가 싶어, 소스를 뒤져보았지만 플래그랑은 관련이 없는 것을 알 수 있었다.

 그다음 루트는 프로필 이미지를 변경할 때 파일업로드 취약점쪽이다.

 

프로필이미지 파일명이 저기 이름으로 등록되는데

이 이름이 .php로도 변경이된다.

 

파일에 php파일을 넣으면 a.php로 이동해서 php 실행이 가능하다.

 

이미지 검증은 이미지 시그니쳐를 삽입함으로써 우회한다.

 

 

Cookie 300

cookie라는 쿠키의 값을 base64로 3번 디코딩하면 아래 문자열이 나온다.

{"id":"2","type":"guest"}

일단 id를 1로, type을 admin으로 바꿔주고 base64로 3번 인코딩해보았다.

PassAdmin검증은 php strcmp 배열 취약점을 사용하여 우회하면 된다.

 

 

 

LOL

300

 

로컬로 flag.php에 접속해야하나 보다.

ssrf와 local ip 우회를 사용하자

url@realurl

 

Authenticate

350

로그인인가

 

뭔가 있다.

id 9자리 cresponse 넣고

eval 대신에 alert 돌리니까

여기서 9자리 string을 뽑는다.

dumbh4ck5

 

이걸 username으로 넣고 돌리니 코드가 나왔다.

XorIsNotSooS3cur3 패스워드 겟

 

 

Wise Saying

350

 

음 또 로그인?

뭘로 로그인하든 로그인이 된다.

lfi인가

 

근데 say로 안끝나면 욕한다.

 

phpinfo를 주네

 

/tmp/sess_[value]

세션쿠키값뒤에 say 붙여서 로그인하고 lfi

index.php?page=../../../../../tmp/sess_2b86721cb6a9e6334eb6d1b97a5dd3basay

된다.

이제 아이디에 php코드를 삽입하자.

 

728x90
반응형
728x90
반응형

root-me.org [WEB - SERVER] 풀이


HTML


소스보자




Weak password


...

...

admin/admin 하니까 됐다...




HTTP directory indexing


소스에 admin/pass.html이 적혀있다.

admin/에서 디렉토리 인덱싱이 된다.

http://challenge01.root-me.org/web-serveur/ch4/admin/backup/admin.txt






HTTP cookies



Saved email adresses 가 있다. 클릭하면 어드민이 아니라고 하는데, ch7이름의 쿠키가 생성된다.
admin으로 입력해주면 된다.




Local File Inclusion


http://challenge01.root-me.org/web-serveur/ch16/?files=/../admin&f=index.php

이렇게 소스를 볼 수 있다.


?files=admin&f=index.php
처음에 이렇게 시도 했었는데 이렇게는 안된다. 왤까...




SQL injection - authentication


id = admin'--
pw = hi (아무거나 입력해주면 됨)

이걸로 성공했다. 패스워드가 점으로 표시되는데, 페이지 소스보기로 암호를 확인할 수 있다.








728x90
반응형
728x90
반응형


HTML - disabled buttons


버튼이 눌리지 않는다.

f12로 페이지 소스를 본 다음, 


<input disabled="" type="submit" value="Member access" name="authbutton">


이걸


<input type="submit" value="Member access" name="authbutton">


이렇게 하면 버튼이 활성화된다.




Javascript - Authentication



페이지 소스를 보면, 사이트가 login.js에서 로그인을 처리하는 것을 알 수 있다.

login.js의 소스를 보면 아이디와 패스워드를 확인할 수 있다.




Javascript - Source



페이지 소스에서 스크립트 부분을 보면 된다.




Javascript - Authentication 2



login.js를 보면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function connexion(){
    var username = prompt("Username :", "");
    var password = prompt("Password :", "");
    var TheLists = ["GOD:HIDDEN"];
    for (i = 0; i < TheLists.length; i++)
    {
        if (TheLists[i].indexOf(username) == 0)
        {
            var TheSplit = TheLists[i].split(":");
            var TheUsername = TheSplit[0];
            var ThePassword = TheSplit[1];
            if (username == TheUsername && password == ThePassword)
            {
                alert("Vous pouvez utiliser ce mot de passe pour valider ce challenge (en majuscules) / You can use this password to validate this challenge (uppercase)");
            }
        }
        else
        {
            alert("Nope, you're a naughty hacker.")
        }
    }
}
cs

username은 GOD, password는 HIDDEN




Javascript - Obfuscation 1


1
2
3
4
5
6
7
8
9
10
11
12
13
 
              /* <![CDATA[ */
 
              pass = '%63%70%61%73%62%69%65%6e%64%75%72%70%61%73%73%77%6f%72%64';
              h = window.prompt('Entrez le mot de passe / Enter password');
              if(h == unescape(pass)) {
                  alert('Password accepté, vous pouvez valider le challenge avec ce mot de passe.\nYou an validate the challenge using this pass.');
              } else {
                  alert('Mauvais mot de passe / wrong password');
              }
 
              /* ]]> */
          
cs

페이지 소스에 있는 스크립트를 보면, pass의 값을 디코딩한 값이 패스워드가 된다.





Javascript - Obfuscation 2


빈 페이지인데 소스를 보면 스크립트에 변수 pass가 정의되어 있다.

1
var pass = unescape("unescape%28%22String.fromCharCode%2528104%252C68%252C117%252C102%252C106%252C100%252C107%252C105%252C49%252C53%252C54%2529%22%29");
cs



크롬의 콘솔을 이용해 구해주면 된다. use chrome console






Javascript - Native code



É=-~-~[],ó=-~É,Ë=É<<É,þ=Ë+~[];Ì=(ó-ó)[Û=(''+{})[É+ó]+(''+{})[ó-É]+([].ó+'')[ó-É]+(!!''+'')[ó]+({}+'')[ó+ó]+(!''+'')[ó-É]+(!''+'')[É]+(''+{})[É+ó]+({}+'')[ó+ó]+(''+{})[ó-É]+(!''+'')[ó-É]][Û];Ì(Ì((!''+'')[ó-É]+(!''+'')[ó]+(!''+'')[ó-ó]+(!''+'')[É]+((!''+''))[ó-É]+([].$+'')[ó-É]+'\''+''+'\\'+(ó-É)+(É+É)+(ó-É)+'\\'+(þ)+(É+ó)+'\\'+(ó-É)+(ó+ó)+(ó-ó)+'\\'+(ó-É)+(ó+ó)+(É)+'\\'+(ó-É)+(É+ó)+(þ)+'\\'+(ó-É)+(É+ó)+(É+ó)+'\\'+(ó-É)+(ó+ó)+(ó-ó)+'\\'+(ó-É)+(ó+ó)+(É+É)+'\\'+(É+ó)+(ó-ó)+'\\'+(É+É)+(þ)+'\\'+(ó-É)+(ó-ó)+(É+ó)+'\\'+(ó-É)+(É+ó)+(ó+ó)+'\\'+(ó-É)+(ó+ó)+(É+É)+'\\'+(ó-É)+(ó+ó)+(É)+'\\'+(ó-É)+(É+É)+(É+ó)+'\\'+(ó-É)+(þ)+(É)+'\\'+(É+É)+(ó-ó)+'\\'+(ó-É)+(É+ó)+(É+É)+'\\'+(ó-É)+(É+É)+(É+ó)+'\\'+(É+É)+(ó-ó)+'\\'+(ó-É)+(É+ó)+(É+ó)+'\\'+(ó-É)+(É+ó)+(þ)+'\\'+(ó-É)+(ó+ó)+(É+É)+'\\'+(É+É)+(ó-ó)+'\\'+(ó-É)+(É+É)+(É+É)+'\\'+(ó-É)+(É+É)+(É+ó)+'\\'+(É+É)+(ó-ó)+'\\'+(ó-É)+(ó+ó)+(ó-ó)+'\\'+(ó-É)+(É+É)+(ó-É)+'\\'+(ó-É)+(ó+ó)+(ó)+'\\'+(ó-É)+(ó+ó)+(ó)+'\\'+(ó-É)+(É+É)+(É+ó)+'\\'+(É+É)+(þ)+'\\'+(É+ó)+(ó-É)+'\\'+(þ)+(ó)+'\\'+(ó-É)+(É+ó)+(ó-É)+'\\'+(ó-É)+(É+É)+(ó+ó)+'\\'+(É+ó)+(ó-ó)+'\\'+(ó-É)+(É+É)+(ó-É)+'\\'+(þ)+(É+ó)+'\\'+(þ)+(É+ó)+'\\'+(É+É)+(þ)+'\\'+(ó-É)+(ó+ó)+(É+É)+'\\'+(ó-É)+(É+ó)+(þ)+'\\'+(ó-É)+(ó+ó)+(É+É)+'\\'+(ó-É)+(É+ó)+(þ)+'\\'+(ó+ó)+(ó-É)+'\\'+(ó+ó)+(É)+'\\'+(ó+ó)+(ó)+'\\'+(ó-É)+(É+ó)+(É+É)+'\\'+(ó-É)+(É+ó)+(þ)+'\\'+(ó-É)+(É+ó)+(É+É)+'\\'+(É+É)+(þ)+'\\'+(É+ó)+(ó-É)+'\\'+(ó-É)+(þ)+(ó)+'\\'+(ó-É)+(É+É)+(ó-É)+'\\'+(ó-É)+(É+ó)+(É+É)+'\\'+(ó-É)+(É+É)+(É+ó)+'\\'+(ó-É)+(ó+ó)+(É)+'\\'+(ó-É)+(ó+ó)+(É+É)+'\\'+(É+ó)+(ó-ó)+'\\'+(É+É)+(þ)+'\\'+(ó-É)+(É+É)+(É)+'\\'+(ó-É)+(ó+ó)+(É)+'\\'+(ó-É)+(É+É)+(ó-É)+'\\'+(ó-É)+(ó+ó)+(ó+ó)+'\\'+(ó-É)+(É+ó)+(þ)+'\\'+(É+É)+(þ)+'\\'+(É+ó)+(ó-É)+'\\'+(þ)+(ó)+'\\'+(ó-É)+(þ)+(É+ó)+'\\'+(ó-É)+(É+É)+(É+ó)+'\\'+(ó-É)+(É+ó)+(É+É)+'\\'+(ó-É)+(ó+ó)+(ó)+'\\'+(ó-É)+(É+É)+(É+ó)+'\\'+(ó-É)+(þ)+(ó)+'\\'+(ó-É)+(É+É)+(ó-É)+'\\'+(ó-É)+(É+ó)+(É+É)+'\\'+(ó-É)+(É+É)+(É+ó)+'\\'+(ó-É)+(ó+ó)+(É)+'\\'+(ó-É)+(ó+ó)+(É+É)+'\\'+(É+ó)+(ó-ó)+'\\'+(É+É)+(þ)+'\\'+(ó-É)+(É+É)+(ó+ó)+'\\'+(ó-É)+(É+É)+(ó-É)+'\\'+(ó-É)+(É+ó)+(ó-É)+'\\'+(ó-É)+(É+ó)+(É+É)+'\\'+(É+ó)+(ó+ó)+'\\'+(É+ó)+(ó+ó)+'\\'+(É+ó)+(ó+ó)+'\\'+(É+É)+(þ)+'\\'+(É+ó)+(ó-É)+'\\'+(þ)+(ó)+'\\'+(ó-É)+(þ)+(É+ó)+'\'')())()


난독화된 js 코드가 있다.


크롬 콘솔을 이용하자. 끝에 ()를 지워주고 .toString()을 사용하면 복호화된 코드를 얻을 수 있다.




Javascript - Obfuscation 3


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function dechiffre(pass_enc) {
    var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
    var tab = pass_enc.split(',');
    var tab2 = pass.split(',');
    var i, j, k, l = 0,
        m, n, o, p = "";
    i = 0;
    j = tab.length;
    k = j + (l) + (n = 0);
    n = tab2.length;
    for (i = (o = 0); i < (k = j = n); i++) {
        o = tab[i - l];
        p += String.fromCharCode((o = tab2[i]));
        if (i == 5break;
    }
    for (i = (o = 0); i < (k = j = n); i++) {
        o = tab[i - l];
        if (i > 5 && i < k - 1)
            p += String.fromCharCode((o = tab2[i]));
    }
    p += String.fromCharCode(tab2[17]);
    pass = p;
    return pass;
}
String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));
 
= window.prompt('Entrez le mot de passe / Enter password');
alert(dechiffre(h));
cs


뭘 입력해도 가짜 패스워드만 나온다...


25행에 있는 헥스값을 아스키로 바꿔서 인증했더니 됐다. 뭐지





XSS - Stored 1



xss 공격이 가능하다. xss를 이용해서 쿠키값을 탈취하면 된다.






Flash - Authentication



소스보기를 통해 플래시 파일 주소를 알아낸다.


http://challenge01.root-me.org/web-client/ch20/RootMe.swf


다운받는다.


플래시 디컴파일러 툴을 이용해 소스를 보면 된다.


모르겠다.












728x90
반응형
  1. Wooum@n 2019.07.07 13:56 신고

    Javascript - Native code 에서 toString은 무슨 기능을 하길래 난독화된걸 그대로 출력해주나요?

728x90
반응형

web











array로 날려주면 된다. input이 아닌 input[]으로 날리면 된다. 


아래 box들은 다 fake용도인것 같다.



http://chaneyoon.dothome.co.kr/array_string.php?input[]=you&input[]=want&input[]=flag?


FLAG{Th4nk_Y0U_H4CK!NG_C4MP!!}



728x90
반응형

+ Recent posts