728x90

1. 보물

처음엔 페이지 3개중 하나를 디코딩하면 flag가 나오는 그런 형식일줄 알았는데 쿼리에서 page=4도 나와서 무작위대입을 해봤다.

import requests
url = 'http://ctf.j0n9hyun.xyz:2025/?page='
i = 0
while True:
    i = i + 1
    response = requests.get(url+str(i))
    if "Hack" in response.text:
        print(i)
        break
    print(i)

쓰읍.......

 

 

 

2. Guess me

php 쿼리로 받는 변수는 각 guess, filename, secretcode로 총 3가지다. 

secretcode와 guess 변수가 같아야 통과하는데, secretcode변수는 secret.txt의 trim이다. 근데 쿼리로 filename을 조작할 수 있게 만들어 놨으니, 파일 이름을 바꿔주면 secretcode는 NULL이 된다.(실제로 null값을 리턴하는진 모르겠다. 아무튼 없다는 말임)

 

 

 

3. Read File

command에 있는 주소로 이동한다. 파일 이름은 flag.php

문자열을 필터링한다. 필터링을 우회하는 방법은 여러가지가 있는데, 보통 flag을 우회하려면 flflagag 이런식이나, 문자열 선언방식을 바꾸거나, ascii코드로 넣어주는등 아주 다양하다. 허나 소스코드가 없으므로 노가다를 해야한다.

 

 

 

4. Login

<?php
highlight_FILE(__FILE__);
require_once("dbcon.php");

$id = $_GET['id'];
$pw = $_GET['pw'];
$pw = hash('sha256',$pw);

$sql = "select * from jhyeonuser where binary id='$id' and pw='$pw'";
$result = mysqli_fetch_array(mysqli_query($db,$sql));

if($result['id']){
        $_SESSION['id'] = $result['id'];
        mysqli_close($db);
        header("Location:welcome.php");
}
?>

우선 pw는 hash값이라 생각하지 않는다.  sql 쿼리를 보니 전형적인 sql_injection인것 같다. 

sql injection은 los.rubiya.kr/ 이게 짱이다

 

admin'#

 

 

작년 4월쯤에 학교 선배랑 진행한 웹 스터디에서 배웠다. 그땐 그분이 엄청 대단하다는걸 몰랐지...  지금생각하면 어떻게 그런분이랑 같이 스터디를 했는지 믿기지도 않는다/

 

 

 

 

 

5. 마법봉

이 문제는 사진도 조금 그렇고 별로였다. 

<?php
show_source(__FILE__);
$flag = "if_you_solved";
$input = $_GET['flag'];
if(md5("240610708") == sha1($input)){
    echo $flag;
}
else{
    echo "Nah...";
}
?>

hash값의 특정 취약한 값 하나를 주제로 한 문제다.  음.........

원리는 지수승의 밑이 0인데 php에서 ==구문을 처리할때의 특성때문에 다 같은 0으로 나온다고 한다.

이 수를 찾는 과정이 궁금해진다.

 

728x90

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

Rate50 (3문항)  (0) 2021.03.17
728x90

1. /

robots.txt.라고 봇을 방지하는 약속이라고 하는데 정확하게 어떤 방법으로 구현되어있는지는 모르겠다

하지만 학교사람들이랑 문제를 풀때 꼭 확인을 한다. 그걸 확인해라는 문제인듯

봇은 /robot_flag 에 접근할 수 없다.  드가자 드가자~

2. Hidden

쿼리에 변수가 그대로 노출되어 있어서 조작이 가능하다. 난도가 낮은 문제라 따로 권한 설정을 안해줬다

이렇게 쿼리가 그대로 노출되는 방식을 뭐라고 불렀는데 이름은 딱히 중요치 않은것같다

3. Button

소스코드도 없고 의도가 뭔지 모르겠어서 버프 슈트로 쿼리를 볼려고 했다.

아마 value를 flag로 바꾸면 되지 않을까 싶었다

위의 2개의 문항은 플래그를 가렸는데 생각해보니 다른글도 다 나와있고 풀이가 있는데 답을 가릴 이유는 없다고 생각해서 그냥 올린다 :D

728x90

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

Rate 100 (5문항)  (0) 2021.03.18

728x90

5번 문제와 거의 똑같은데 5번은 빈칸을 필터링했고 이번 문제는 orland라는걸 필터링한다. (or and )

?pw=0'||id='admin'%23

728x90

'web > LOS' 카테고리의 다른 글

LOS 5번  (0) 2020.11.11
LOS 4번  (0) 2020.07.19
LOS 3번  (0) 2020.07.19
LOS 2번  (0) 2020.07.19
LOS 1번  (0) 2020.07.19
728x90

우선 필터링되는 부분을 확인하는 방법은 

if(preg_match('/prob|_|\.|\(\)/i',$_GET[no]))

이런식으로 조건문이 있는데 / ~~~~ /i 안에 있는 부분에서 | 혹은 \로 감싸져 있는 부분이 필터링된다고 보면 된다.

 

그러면 필터링 되는 부분은 prob, _ , . , () , (빈칸) 이다.

 

이제 문제 쿼리를 보면 현재 id = guest이고 pw를 입력해야 한다. 조건문을 봤을때 pw를 확인하는 부분도 없고 그냥 id 를 admin으로 만들면 된다. 매우 쉬움

 

?pw=0'||id='admin'%23

 

728x90

'web > LOS' 카테고리의 다른 글

LOS 6번  (0) 2020.11.11
LOS 4번  (0) 2020.07.19
LOS 3번  (0) 2020.07.19
LOS 2번  (0) 2020.07.19
LOS 1번  (0) 2020.07.19
728x90

los 4번

먼저 필터링 함수를 보면 pw변수값만 필터링되는것을 알 수 있다.

문제 해결 조건을 보면, pw라는 변수가 존재하여야 하고, result의 pw와 쿼리에서 가져온 pw가 일치하여야 한다.

즉, db에 들어가있는 pw를 알아내야 한다.

 여기서 이용할 함수는 length함수와, ascii함수, substr함수이다.

우선, pw의 길이부터 확인해보자.

[?pw=' or length(pw)=1%23]

[?pw=' or length(pw)=2%23]

[?pw=' or length(pw)=3%23]

[?pw=' or length(pw)=4%23]

[?pw=' or length(pw)=5%23]

[?pw=' or length(pw)=6%23]

[?pw=' or length(pw)=7%23]

[?pw=' or length(pw)=8%23] >> Hello admin

 

pw의 길이가 8인건 알았지만, 숫자와 문자와 특수기호까지 포함해서 8자리라고 가정하면 가능한 값이 너무 많다.

pw의 길이는 아무리 길어도 2가지수를 넘어가지 않기에 노가다로 알아낼 수 있지만,

pw의 값을 알아내기엔 무리가 있다. 따라서, 파이썬코드를 작성하여 

pw 의 length와 값을 찾아보자.

pw 매칭

 

pw값은 095A9852

//아까 코드를 substr을 사용했기에 ord를 같이 사용해주면 대소문자도 구분 가능하다.

los 4번 답

728x90

'web > LOS' 카테고리의 다른 글

LOS 6번  (0) 2020.11.11
LOS 5번  (0) 2020.11.11
LOS 3번  (0) 2020.07.19
LOS 2번  (0) 2020.07.19
LOS 1번  (0) 2020.07.19

+ Recent posts