반응형

바로 전 포스팅에서 parse_url의 버그를 이용하여 파라미터 내 값 체크를 우회하는 것을 정리하였다.

https://rootable.tistory.com/entry/websecfr-level-25-writeup-with-parseurl-bug


그런데 오늘 CTF 문제를 풀다 parse_url 관련 문제가 나왔는데 이번엔 파라미터 내 값이 아닌 host를 우회하는 문제가 제출되어 이에 대해 정리도 할겸 포스팅한다.



해당 문제이다. 간단하게 봤을 때 parse_url 을 잘 이용해서 https://localhost/key 를 확인하면 flag를 얻을 수 있을 것 같다.




문제에 접근하여 텍스트 부분에 scheme을 포함하여 작성한 뒤 제출을 누르면 해당 사이트에 접근되는 Link를 만들어준다.


하지만 문제에서 원하는 https://localhost/key에 대한 링크를 만드려고 하면 내부 URL들은 allow되지 않는다고 한다.


이 때 이전 포스팅에서 발견한 parse_url과 관련된 bug들은 query와 관련된 버그이기 때문에 이번 문제를 해결할 때는 도움되지 않는다.

그래서 이와 관련하여 구글링을 한 결과 아래와 같은 버그를 발견하였다.


https://bugs.php.net/bug.php?id=73192


해당 버그는 url이 아래와 같을 때 parse_url이 잘못된 host를 리턴한다고 한다.


- http://example.com:80#@google.com/

- http://example.com:80?@google.com/


위와 같이 작성할 경우 host가 example.com이 아닌 google.com으로 착각하는 버그이다.


이를 이용하여 문제를 해결해보았다.


위의 사진과 같이 버그에서 말한 두가지를 해보았을 때 ?@는 되지 않았지만 #@을 했을 때 parse_url이 host를 잘못 인식하여 내부의 key값을 가져온 것을 볼 수 있다.


해당 버그는 Real World에서 사용될 수도 있다고 판단된다.


아래와 같을 때 잘 활용해보자

- bypass authentication protocol (verify hostname of callback url by parse_url)

- open redirector (verify hostname by parse_url)

- server-side request forgery (verify hostname by parse_url and get_content)



반응형

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

[ByteBandits CTF 2019] Online Previewer 1  (0) 2019.04.13
[ByteBandits CTF 2019] EasyPHP  (0) 2019.04.13
[2019 Encrypt CTF] vault  (0) 2019.04.03
[2019 Encrypt CTF] Sweeeeeet  (0) 2019.04.03
[2019 Encrypt CTF] repeaaaaaat  (0) 2019.04.03
블로그 이미지

rootable

,
반응형

문제에 접근하면 간단한 로그인 창이 나타난다.

Login Bypass With SQL Injection 문제인가 싶어 진행해보았다.

 

그랬더니 flag.png라는 qr code가 떠서 해당 코드를 decrypt하였을 때 youtube가 떠서 이게 아닌가하고 삽질을 했는데 자세히 보니 Cookie 값에 SESSIONID가 발급되었으며 해당 값을 base64로 디코딩한 결과 Flag 였다.

 

ZW5jcnlwdENURntpX0g0dDNfaW5KM2M3aTBuNX0%3D → encryptCTF{i_H4t3_inJ3c7i0n5}

 

반응형
블로그 이미지

rootable

,
반응형

문제 설명에 sweets 링크가 존재하지만 문제 풀이에 전혀 도움이 안된다. (뭔가 힌트였을까..?)

 

문제에 접근하면 너가 원하는 flag는 여기에 없다고 한다.

응답을 보기 위해 Burp를 이용하여 확인한 결과 아래와 같이 Set-Cookie에 Flag 형태의 값이 들어가있는 것을 볼 수 있다.

 

굉장히 쉬운 문제구나 하고 인증을 하는데 계속 틀렸다고 한다.

다시 확인을 위해 요청을 날렸는데 Cookie 값에 UID 라는 값이 존재한다.

 

 

이 값을 무시하고 있었는데 혹시 뭔가 있지 않을까란 생각에 구글링해보았더니 문자열 '100'을 md5로 변환된 것이였다.

따라서 특정 값을 md5로 변환하여 UID에 넣으면 풀리지 않을까 싶어 여러가지 시도한 결과 문자열 '0'을 md5로 변환하여 UID에 넣었더니 Set-Cookie에 FLAG값이 출력되었다.

 

 

참고로 md5 encrpyt 할 때 아래의 사이트를 이용하였다.

https://md5decrypt.net/en/

반응형
블로그 이미지

rootable

,
반응형

문제에 접근하면 아래와 같이 소스 내 주석으로 base64 된 문자열을 볼 수 있다.

 

반복해서 요청하다보면 총 3가지를 출력해줌을 볼 수 있다.

1.  L2xvbF9ub19vbmVfd2lsbF9zZWVfd2hhdHNfaGVyZQ== → /lol_no_one_will_see_whats_here

2. Lz9zZWNyZXQ9ZmxhZw== → /?secret=flag

3. d2hhdF9hcmVfeW91X3NlYXJjaGluZ19mb3IK → what_are_you_searching_for

 

첫 번째 디코딩한 값으로 접근해보면 아래와 같은 base64된 값을 주는데 해당 값을 디코딩해보면 유투브로 넘어가는 링크를 준다.

aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2hcP3ZcPVBHakxoT2hNTFhjCg==

 → https://www.youtube.com/watch?v=PGjLhOhMLXc

 

웹 문제 중 가장 어려운 문제인데 이렇게 쉽게 될리가 ㅎㅎ

 

두 번째로 디코딩한 값이 그나마 입력을 받는 인자가 있어 느낌있었다.

해당 값으로 접근해보면 응답에 내가 입력한 flag가 출력된 것을 볼 수 있다.

혹시나 하여 SSTI 를 해보았는데 역시나였다.

 

그래서 그전에 공부해둔대로 File Class를 이용하여 파일을 읽어보려 했는데 ''.__class__.__mro__[2]가 존재하지 않았고, 확인해본 결과 ''.__class__.__mro__[1]이 object Class이며 해당 object에는 File class가 존재하지 않았다.

 

다른 방법이 뭐가 있을까 찾아보다가 아래와 같은 링크를 찾았다.

https://xz.aliyun.com/t/3679

 

바로 os._wrap_close Class를 이용하는 것이다.

해당 링크에 나와있는 대로 아래의 명령어를 통해 공격을 시도해보았다.

{{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('dir').read()}}

 

그 결과 dir 명령어를 통해 디렉토리 내 파일 리스트를 볼 수 있었고 flag.txt가 존재함을 볼 수 있다.

이후 cat 명령어를 통해 flag를 얻을 수 있었다.

 

 

참고 ) https://xz.aliyun.com/t/3679

반응형

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

[2019 Encrypt CTF] vault  (0) 2019.04.03
[2019 Encrypt CTF] Sweeeeeet  (0) 2019.04.03
[Sunshine CTF 2019] Wrestler Name Generator  (0) 2019.03.31
[Sunshine CTF 2019] WrestlerBook  (0) 2019.03.31
2019 TAMUctf Write-Up  (0) 2019.02.26
블로그 이미지

rootable

,
반응형

 

문제에 접근하면 위와 같이 3개를 입력받을 수 있다.

First Name에 a를 Last Name에 b를 넣고 [Get Wrestler Name]를 클릭하면 아래와 같이 a와 b가 응답에 출력된다. 

 

 

몇가지 공격 기법이 생각났는데 일단 요청이 어떻게 날아갔는지 봤다.

input에 base64로 된 형태로 날아가길래 decode 해보았더니 XML 형태로 날아갔다. 이를 통해 XXE를 하는 것이구나 하여 해당 공격을 진행하였다.

 

URL 디코딩 후 base64로 디코딩하였고 값을 바꿔준 뒤에 다시 base64로 인코딩 진행 후 URL encoding 해주었다.

그 결과 아래와 같이 XXE에 성공함을 볼 수 있었다.

 

소스코드를 얻기 위해 php의 convert 필터를 이용하였다.

그 결과 나온 base64로 인코딩된 값을 디코딩해주면 generate.php의 소스코드를 볼 수 있다.

 

그런데 원하는 FLAG 값은 존재하지 않았고 대신 이러한 코드가 들어있었다.

$whitelist = array(
    '127.0.0.1',
    '::1'
);
// if this page is accessed from the web server, the flag is returned
// flag is in env variable to avoid people using XXE to read the flag
// REMOTE_ADDR field is able to be spoofed (unless you already are on the server)
if(in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
	echo $_ENV["FLAG"];
	return;

 

여기서 난 막혔다 ㅠㅠ

REMOTE_ADDR을 127.0.0.1로 spoof 하기 위해 X-Forwarded-For 헤더를 이용해보았는데 되지 않았다 ㅠㅠ

해당 기법을 이용하는게 아닐까? 시간나면 더 풀어봐야겠다.

 


대회가 끝났지만 더 진행해보았다.

xxe를 통해 file:// , php:// 뿐만 아니라 http:// 도 가능하다는 것을 생각하였고 이를 이용해 localhost에서 접근하듯 하면 될 것이라 생각하였다.

 

그래서 <!DOCTYPE rootable[<!ENTITY xxe SYSETM "http://localhost/generate.php">]>를 시도해보았고 이를 통해 Flag를 획득할 수 있었다.

 

 

 

 

 

반응형

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

[2019 Encrypt CTF] Sweeeeeet  (0) 2019.04.03
[2019 Encrypt CTF] repeaaaaaat  (0) 2019.04.03
[Sunshine CTF 2019] WrestlerBook  (0) 2019.03.31
2019 TAMUctf Write-Up  (0) 2019.02.26
[35c3ctf.ccc.ac]sanity check  (0) 2018.12.28
블로그 이미지

rootable

,
반응형

 

문제를 클릭하면 위와 같이 뜬다. 초대받지 못한 레슬링 소셜 네트워크에 로그인하여야 한다.

문제에 접근하면 아래와 같이 로그인 창이 뜬다.

 

 

 

단순히 로그인 창만 존재한다.

소스코드를 보아도 아무런 힌트가 존재하지 않은 것으로 보아 SQL Injection을 통해 login bypass를 하면 되겟다 생각하였다.

 

따라서 아래와 같이 공격을 시도해보았다.

역시나 예상대로 로그인된 것을 볼 수 있다.

하지만 Flag에 N/A로 되어있어서 다른 계정으로 로그인을 시도하였다.

 

username 부분에 like를 이용하여 다른 계정들로 로그인 시도를 하던 중 user라는 계정이 1부터 순서대로 존재하는 것을 보았다.

이중 하나에 Flag가 있지 않을까하여 다른 계정들도 시도하였다.

 

 

Intruder 결과 user84에 Flag가 존재하였다.

 

 

반응형

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

[2019 Encrypt CTF] repeaaaaaat  (0) 2019.04.03
[Sunshine CTF 2019] Wrestler Name Generator  (0) 2019.03.31
2019 TAMUctf Write-Up  (0) 2019.02.26
[35c3ctf.ccc.ac]sanity check  (0) 2018.12.28
[2018 X-MAS CTF] Our Christmas Wishlist  (0) 2018.12.15
블로그 이미지

rootable

,
반응형

1. Not Another SQLi Challenge


접근하면 로그인창이 뜬다.

소스코드 단에 아무런 힌트가 없어 특정 계정으로 로그인하는게 아닌가 하여 test 계정과 admin 계정을 이용하여 로그인을 시도해보다가 그냥 or을 이용하여 로그인을 시도해보았더니 성공하였다.


NetID : ' or 1/*

Password : */-- 


Flag : gigem{f4rm3r5_f4rm3r5_w3'r3_4ll_r16h7}


2. Robots Rule

문제에 접근해서 소스코드를 보아도 아무런 힌트가 없었다.

문제에서 robots 라는 단어가 들어가 혹시나 하여 robots.txt에 접근해보았더니 아래와 같은 문자열이 출력되었다.


영어로 된 부분을 잘 보면 Google Robots라는 단어가 있어 혹시나 하여 User-Agent를 googlebots로 변경하니 flag가 출력되었다.




Flag : gigem{be3p-bOop_rob0tz_4-lyfe}


3. Science!

해당 문제에 접근하면 아래와 같은 화면이 뜬다.


친절하게 Flask라는 것을 알려주고 문자열 입력할 부분을 알려주니 SSTI라고 판단하고 Chemical One 부분에 {{7*'7'}}을 입력하였다.

그 결과 7이라는 문자열이 총 7개가 뜨는 것을 통해 해당 서버는 Jinja2임을 알 수 있다. (Twig에서는 49라고 출력될 것이다)

이제 SSTI를 이용하여 명령어를 실행하기 위해 아래와 같은 명령어를 사용하였다.


https://www.lanmaster53.com/2016/03/11/exploring-ssti-flask-jinja2-part-2/ 를 참고하여 ls 명령어를 실행하였다.



그 결과 ls의 명령어를 통해 flag.txt가 존재하는 것을 확인하였고, /bin/cat flag.txt 명령어를 통해 flag를 획득할 수 있었다.


flag : gigem{5h3_bl1nd3d_m3_w17h_5c13nc3}


4. Buckets

문제에서 s3 bucket website를 확인하라고 하였다. 그래서 나는 aws console을 이용하여 명령어를 실행해보았고 역시나 취약하여 서버 내 파일 리스트가 확인되었다.



그래서 sync 명령어를 통해 해당 s3 bucket에 있는 모든 파일을 다운로드 받았다.



다운로드 받은 항목에서 Dogs 폴더 내에 flag.txt 파일이 있었고 해당 파일을 열어 flag를 획득할 수 있었다.


flag : flag{W0W_S3_BAD_PERMISSIONS}


5. Bird Box Challenge

문제 접근하면 Search Me라고 하여 문자열 하나를 받는다.

여기에 몇개 문자열을 입력하다가 문제 설명에 나와있는 Aggies, Trucks, Eggs가 생각나 입력해봤더니 사진이 출력되었다.


여기에서 Blind SQL Injection이 터짐을 알 수 있다. (문제에서 나와있는 사진은 Blind를 의미하는 것이였다..)


그래서 blind sql injection을 통해 해당 서버에서 정보를 뽑아봤는데 아래와 같이 특별이 정보가 보이지 않았다.


그래서 일단 union 쪽으로 알아보기 위해 order by를 이용하여 select 하는 컬럼이 한개임을 확인하였다.


1. 컬럼 갯수 확인


order by 1#일 때는 위 사진처럼 제대로 작동하지만 order by 2#일 때는 검색할 수 없다고 뜨는 것을 통해 컬럼 갯수는 1개임을 확인할 수 있다.


2. union 사용


union 을 시도하였는데 해당 명령어를 사용하게 두지 않을거라고 뜬다. 따라서 이를 우회하면 될거라 생각하였다.


3. 필터링 우회


몇가지 테스트한 결과 union select 부분을 감지하는 것으로 보아 개행문자를 통해 해당 필터를 우회하였고 정상적으로 입력한 1이 뜨는 것을 볼 수 있다.

이를 통해 여러가지 확인하였고 user 명을 보면 flag가 있는 것을 확인할 수 있었다.


flag : gigem{w3_4r3_th3_4ggi3s}

반응형

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

[Sunshine CTF 2019] Wrestler Name Generator  (0) 2019.03.31
[Sunshine CTF 2019] WrestlerBook  (0) 2019.03.31
[35c3ctf.ccc.ac]sanity check  (0) 2018.12.28
[2018 X-MAS CTF] Our Christmas Wishlist  (0) 2018.12.15
picoCTF 2018  (0) 2018.10.13
블로그 이미지

rootable

,

[35c3ctf.ccc.ac]sanity check

2018. 12. 28. 11:53

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