no image
Old - 27 (score:150)
문제를 들어가보니 SQL Injection 문제입니다 :D 소스를 볼 수 있으니 봅시다! 소스코드를 보니 필터링, 쿼리가 보입니다! 문제를 풀려면 id를 admin으로 해야하는데 admin의 no는 2라고 명시되어 있네용 :D 그럼 쿼리를 어떻게 넣어줄지 생각을 해봅시다! where id='guest' and no=(0) or no=2 이렇게 만들어주면 되지 않을까 싶습니다! 이렇게하면 앞의 id와 no는 거짓이 되고 뒤의 no=2는 참이기 때문에 admin으로 접속할 수 있을 것입니다 :D 그러나 " "이랑 "="는 필터링이 되어 있는것을 확인할 수 있습니다 :D " "을 우회할 수 있는 방법은 %09, %0a, %0d 등등 있습니다! 여기선 %09를 사용하겠습니다 ㅎㅎㅎ "="을 우회할 수 있는 방법..
2020.03.28
no image
Old - 19 (score:150)
문제로 들어가보니 id를 제출하라는게 나옵니다! default로 admin이 들어가있어서 제출해보았습니다 :D 으아..? admin이 아니라고 하면서 다시 제출하게 되더라구요! 그래서 임의로 test를 입력하여 제출 했는데 로그인이 되었습니다! logout해도 먹히지가 않더라구요... :( 그리고 소스코드를 보아도 특별한게 보이지 않았습니다 =_= 그래서 쿠키값을 보았는데 기존에 없던 userid가 생성이 되었습니다! 알수없는 문자열이 나열이 되어있습니다! 맨뒤에 보니 %3D가 있는데 URL 인코딩 된것으로써 원래는 "=" 입니다 :D 그럼 맨마지막에 =가 들어가는 암호화는 base64이죠 ! 그래서 Decoding을 해보았습니다 :D 디코딩을 해보니 되는것으로 확인이 됩니다! 그래서 한번더 해보았습니다..
2020.03.22
no image
Old - 58 (score:150)
문제로 들어오니 어떤 값을 보내는게 나옵니다! ls를 입력하니 index.js, temp.html이 나오더군요..! 그리고 cat명령어가 먹히지 않습니다 ㅇㅅㅇ.. flag를 입력해봤는데 admin만 가능하다네요? 일단 소스코드를 봅시다! 소스코드를 보아하니 socket을 이용한 통신을 하고 있었습니다! username이 기본적으로 guest로 고정이 되어있네요! socket.emit와 socket.on을 이용해서 admin으로 바꿔서 통신을 하면 되겠군요 :D 그럼 console을 이용해서 저 형식 그대로 admin으로 바꿔서 날려줘봅시다! 쨘 ! 형식 그대로 바꿔서 날려주니 Flag가 나옵니다! 이만 문제풀이를 마치겠습니다 :D
2020.03.06
no image
Old - 32 (score:150)
문제로 들어가보니 뜬금없이 랭킹이 나옵니다.. 뭐지 하고 막 클릭했는데 이미 투표를 했다고 뜨더군요..! 클릭을하면 투표가 되는 방식인가 봅니다 =_= 소스코드를 봐도 별다른건 없었습니다! 쿠키값을 보니 vote_check가 존재합니다! 투표를 했을 땐 "ok"라는 값이 들어가있었기 때문에 값을 지우고 투표를 했는데 투표가 되더라구요 :D 이전에 어떤 CTF 문제에서 노가다를 통해 1등을 찍으면 풀리는 문제가 있었는데 혹시나 그런 문제가 아닌가 싶어 100개를 채워볼려고 시도해보았습니다 ! 그러나 계속 찾아서 클릭하고 또 cookie값 변경해서 하기 너무 귀찮잖아요? 물론 cookie값을 지우고 고정시키면 되지만 아이디를 찾아서 클릭해야하는게 너무 귀찮을겁니다... 그래서 저는 burp suite의 Re..
2020.03.05
no image
Old - 25 (score:150)
이제 150점 짜리 문제로 넘어왔습니다 :D 문제로 들어와보니 리눅스의 파일 정보형태와 밑에는 파일 내용을 보여주는 듯한 칸이 보이네요! url을 보니 file이라는 인자에 hello가 들어가있는것을 보아하니 hello.php 실행한 내용인 것 같습니다! 일단 flag.php를 한번 봅시다 ㅎㅎㅎ flag.php를 확인해보니 FLAG가 코드 안에 존재하는 군요? 그럼 flag.php 코드를 확인해봐야할 것 같아요..!! 어떻게 확인을 할까 하다 php Wrapper를 이용한 LFI 공격을 해보도록 하겠습니다! php Wrapper란 파일 시스템 함수와 함께 사용하기위한 다양한 URL 스타일 프로토콜을위한 많은 내장 래퍼가 제공하는 것을 말합니다! 자세한 사항은 밑의 공식사이트에서 공부하시면 됩니다 :D ..
2020.02.29
no image
Old - 54 (score:100)
문제로 들어오니 Password is 뒤에 하나씩 글자가 생겼다 사라지네요 ! 소스코드를 봅시다 :D answer 함수를 주목해서 봅시다 ㅎㅎㅎ! 문자를 가져온 후 setTimeout함수로 계속해서 문자를 호출하는 것으로 보이는군요! 그리고 최종적으로 아무런 문자가 없으면 "?"로 끝이나게 되는 구조입니다! 자세히보면 aview.innerHTML에 새로운 값을 대입하기 때문에 문자가 계속해서 바뀌게 되는군요! 그럼 간단하게 이어붙이면 되지 않을까요 :D ! 수정된 코드입니다 ! 어짜피 "?"는 필요없기 때문에 지워버렸고 제일 중요한건 "=" 에서 "+=" 로 연산자를 바꿈으로써 계속 이어나가게 했습니다 :D ! 개발자 환경에서 콘솔로 이 소스코드를 실행시키면.. 쨘! 플래그가 출력이 되네용 :D! 이만 ..
2020.02.25
no image
Old - 39 (score:100)
입력란이 하나가 존재하는군요! 소스코드를 봅시다 :D 소스코드를 살펴보니 역슬래쉬(\)는 공백 처리 싱글쿼터(')는 ''로 처리된다고 하네요! 그리고 15글자로 문자열을 끊어버리는군요 ㅎㅎㅎ 쿼리에서 자세히보면 id 뒤에 싱글쿼터가 존재하지 않는거 보이시나요 :D ? 저 취약점을 이용해서 풀어보겠습니다! id는 당연히 admin으로 해야하는 암묵적인 느낌을 가지고 해야하는데 mysqlql에서는 "=" 연산 작동 시 공백을 이용할 수가 있습니다! 'admin' = 'admin ' 위의 두개의 연산이 성립이 됩니다! 밑의 사이트에서 정말 잘 설명되어 있으니 한번 보시길 바래요 :D https://woowabros.github.io/study/2018/02/26/mysql-char-comparison.html..
2020.02.24
no image
Old - 38 (score:100)
문제로 들어가니 log를 인젝션하라네요? 소스코드를 봅시다 :D 소스코드를 보니 아무런게 없고 admin 페이지가 있다고합니다! admin.php에 접속하여 보니 log viewer가 존재합니다! 그리고 ip와 입력했던 정보가 존재하는군요 :D admin을 입력해 보겠습니다! admin이 아니라는군요..? 그럼 admin을 로그에 남기면 풀리겠구만 했습니다 :D 개행을 이용해서 문제를 풀어보겠습니다! 소스코드에 input 타입을 textarea로 변경하여 쉽게 개행하여 입력이 되도록 하면 간단하겠죠 :D ? 요런식으로 입력하게 되면 아마 admin으로 로그인되지 않을까 싶습니다 :D admin.php로 접속하니 쨘! 하고 풀리네요 :D 이만 Old 38번 문제 풀이였습니다!
2020.02.23

Old 27번 문제

문제를 들어가보니 SQL Injection 문제입니다 :D

소스를 볼 수 있으니 봅시다!

source code

소스코드를 보니 필터링, 쿼리가 보입니다!

문제를 풀려면 id를 admin으로 해야하는데 admin의 no는 2라고 명시되어 있네용 :D

 

그럼 쿼리를 어떻게 넣어줄지 생각을 해봅시다!

where id='guest' and no=(0) or no=2 이렇게 만들어주면 되지 않을까 싶습니다!

이렇게하면 앞의 id와 no는 거짓이 되고 뒤의 no=2는 참이기 때문에 admin으로 접속할 수 있을 것입니다 :D

 

그러나 " "이랑 "="는 필터링이 되어 있는것을 확인할 수 있습니다 :D

" "을 우회할 수 있는 방법은 %09, %0a, %0d 등등 있습니다! 여기선 %09를 사용하겠습니다 ㅎㅎㅎ

"="을 우회할 수 있는 방법은 like, in, instr 등등 있습니다! 간단하게 like를 사용하겠습니다 ㅎㅎㅎ

 

그럼 최종적으로 어떻게 될까요?

no = 0)%09or%09no%09like%092;%00

쿼리 뒤의 ) 때문에 주석처리를 해주어야합니다! 그래서 ;%00를 넣어서 주석처리를 해주는 방법을 선택했습니다 :D

 

또 다른방법은 no = 0)%09or%09no%09like%092--%09

--%09 또한 주석처리를 하는것이지요 :D

그리고 %09를 붙인 이유는 --뒤에 반드시 한칸의 공백을 넣어줘야 된다고 하네요..!

그래서 trim 함수나 직접 공백을 필터하는 경우에는 "#"를 사용한답니다 :D

풀이 성공!

 

이렇게 문제풀이를 마치도록 하겠습니다 :D

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 1 (score:200)  (0) 2020.04.02
Old - 47 (score:150)  (0) 2020.03.31
Old - 19 (score:150)  (0) 2020.03.22
Old - 58 (score:150)  (0) 2020.03.06
Old - 32 (score:150)  (0) 2020.03.05

 

Old 19번 문제

문제로 들어가보니 id를 제출하라는게 나옵니다!

default로 admin이 들어가있어서 제출해보았습니다 :D

you are not admin

으아..? admin이 아니라고 하면서 다시 제출하게 되더라구요!

test

그래서 임의로 test를 입력하여 제출 했는데 로그인이 되었습니다!

logout해도 먹히지가 않더라구요... :(

 

그리고 소스코드를 보아도 특별한게 보이지 않았습니다 =_=

그래서 쿠키값을 보았는데 기존에 없던 userid가 생성이 되었습니다!

userid

알수없는 문자열이 나열이 되어있습니다!

맨뒤에 보니 %3D가 있는데 URL 인코딩 된것으로써 원래는 "=" 입니다 :D

그럼 맨마지막에 =가 들어가는 암호화는 base64이죠 !

그래서 Decoding을 해보았습니다 :D

Decoding

디코딩을 해보니 되는것으로 확인이 됩니다!

그래서 한번더 해보았습니다!

Decoding

한번더 디코딩을 했는데 되질 않습니다...

뭔가 다른것으로 암호화가 되어있나봅니다 :(

 

그래서 일단 글자수를 알아보았습니다!

자릿수

총 128자로 나오더라구요!

 

그래서 여러가지 경우의 수를 생각을 했습니다...

노가다를 열심히 하다가...

"test"는 총 4자리이니까 128자를 32자씩 나누어 보았습니다!

4개로 나누기!

4개로 나누고 32자로 암호화될 수 있는 것 중 대표적인 MD5로 복호화 해보았습니다!

MD5 복호화

userid가 글자마다 MD5 해쉬암호화 후 base64 인코딩된 것입니다!

 

그럼 admin으로 로그인하기 위해 똑같이 MD5 암호화 후 base64인코딩을 진행하여 userid에 넣어주면 되겠군요 :D

풀이성공!

예상대로 풀이 성공하였습니다 !!

hello admin

쨘!! admin으로 로그인이 되었다고 나오네용 :D

 

이만 19번 문제 풀이를 마치겠습니다 :D

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 47 (score:150)  (0) 2020.03.31
Old - 27 (score:150)  (0) 2020.03.28
Old - 58 (score:150)  (0) 2020.03.06
Old - 32 (score:150)  (0) 2020.03.05
Old - 25 (score:150)  (0) 2020.02.29

Old 58번 문제

문제로 들어오니 어떤 값을 보내는게 나옵니다!

ls를 입력하니 index.js, temp.html이 나오더군요..!

그리고 cat명령어가 먹히지 않습니다 ㅇㅅㅇ..

 

flag를 입력해봤는데 admin만 가능하다네요?

일단 소스코드를 봅시다!

소스코드

소스코드를 보아하니 socket을 이용한 통신을 하고 있었습니다!

username이 기본적으로 guest로 고정이 되어있네요!

 

socket.emit와 socket.on을 이용해서 admin으로 바꿔서 통신을 하면 되겠군요 :D

그럼 console을 이용해서 저 형식 그대로 admin으로 바꿔서 날려줘봅시다!

flag

쨘 !

형식 그대로 바꿔서 날려주니 Flag가 나옵니다!

 

이만 문제풀이를 마치겠습니다 :D

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 27 (score:150)  (0) 2020.03.28
Old - 19 (score:150)  (0) 2020.03.22
Old - 32 (score:150)  (0) 2020.03.05
Old - 25 (score:150)  (0) 2020.02.29
Old - 54 (score:100)  (0) 2020.02.25

Old 32번 문제

문제로 들어가보니 뜬금없이 랭킹이 나옵니다..

 

뭐지 하고 막 클릭했는데

 

이미투표..?

이미 투표를 했다고 뜨더군요..!

클릭을하면 투표가 되는 방식인가 봅니다 =_=

 

소스코드를 봐도 별다른건 없었습니다!

vote_check

쿠키값을 보니 vote_check가 존재합니다!

 

투표를 했을 땐 "ok"라는 값이 들어가있었기 때문에 값을 지우고 투표를 했는데 투표가 되더라구요 :D

이전에 어떤 CTF 문제에서 노가다를 통해 1등을 찍으면 풀리는 문제가 있었는데

혹시나 그런 문제가 아닌가 싶어 100개를 채워볼려고 시도해보았습니다 !

 

그러나 계속 찾아서 클릭하고 또 cookie값 변경해서 하기 너무 귀찮잖아요?

물론 cookie값을 지우고 고정시키면 되지만 아이디를 찾아서 클릭해야하는게 너무 귀찮을겁니다...

 

그래서 저는 burp suite의 Repeater 기능을 사용했습니다 :D

 

먼저 burp suite를 키고 일단 통신을 한번 날려줍니다!

[Proxy] - [HTTP history]

위의 사진처럼 [Proxy] - [HTTP history] 로 들어가면 흔적이 남게됩니다!

해당 기록에 오른쪽 클릭을 하면 "Send to Repeater"가 보일껍니다 :D

클릭!!

Repeater

[Repeater]에 들어가면 요렇게 Request가 완성이 되어있습니다 :D

(주의! Cookie의 vote_check 값이 없어야합니다 !!)

 

[Send] 클릭하면 Response가 날라오면서 통신이 됩니다 :D

그리고 웹 상에는 바로 보이지는 않지만 새로고침을 눌러주면 표가 올라간걸 확인할 수 있습니다!

 

그래서 저는 100번... 클릭했습니다.. ㅠ_ㅠ

더 쉬운 방법이 있지않을까 싶은데.. 제가 아는 방법의 한계입니다..ㅋㅋㅋㅋ

Clear!

역시나 풀리네요 :D

 

그럼 이만 문제풀이를 마치겠습니다!

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 19 (score:150)  (0) 2020.03.22
Old - 58 (score:150)  (0) 2020.03.06
Old - 25 (score:150)  (0) 2020.02.29
Old - 54 (score:100)  (0) 2020.02.25
Old - 39 (score:100)  (0) 2020.02.24

이제 150점 짜리 문제로 넘어왔습니다 :D

 

Old 25번 문제

문제로 들어와보니

리눅스의 파일 정보형태와

밑에는 파일 내용을 보여주는 듯한 칸이 보이네요!

 

url을 보니 file이라는 인자에 hello가 들어가있는것을 보아하니

hello.php 실행한 내용인 것 같습니다!

 

일단 flag.php를 한번 봅시다 ㅎㅎㅎ

file=flag

flag.php를 확인해보니 FLAG가 코드 안에 존재하는 군요?

 

그럼 flag.php 코드를 확인해봐야할 것 같아요..!!

어떻게 확인을 할까 하다 php Wrapper를 이용한 LFI 공격을 해보도록 하겠습니다!

 

php Wrapper란 파일 시스템 함수와 함께 사용하기위한

다양한 URL 스타일 프로토콜을위한 많은 내장 래퍼가 제공하는 것을 말합니다!

 

자세한 사항은 밑의 공식사이트에서 공부하시면 됩니다 :D

https://www.php.net/manual/en/wrappers.php

 

PHP: Supported Protocols and Wrappers - Manual

Even though their names will be the same, you can have more than one //memory or //temp stream open concurrently; each time you fopen() such a stream, a NEW stream will be opened independently of the others.This is hinted at by the fact you don't add any u

www.php.net

LFI는 Local File Inclusion의 약자로 공격할 파일이 서버 내에 내장되어 있다는것을 의미합니다!

밑의 포스팅에서 취약점과 대응방안에 대해 설명이 잘되어 있습니다 :D

반드시 들어가서 보시면서 공부하시는 걸 추천드립니다!

http://coashanee5.blogspot.com/2017/02/rfi-lfi.html

 

[웹 취약점] RFI & LFI 취약점

1. RFI 취약점 RFI (Remote File Inclusion) 취약점을 이용한 공격은 공격자가 악성 스크립트를 서버에 전달하여 해당 페이지를 통하여 악성 코드가 실행되도록 하는 것이다. 예제 1)

coashanee5.blogspot.com

php wrapper에서 I/O Stream을 다루는 php://filer wrapper를 사용하도록 하겠습니다!

wrapper를 사용하는 이유는 encode/decode를 사용하여 문서의 내용을 볼 수 있기 때문이죠 :D

 

형태는 다음과 같습니다 !

 

[공격 사이트]=php://filter/convert.base64-encode/resource=[대상]

 

그럼 위의 형태로 공격을 시도해볼까요 :D ?

php wrapper를 이용한 LFI 공격

시도를 해보니 base64인코딩된 문자열이 출력이 됩니다!

 

이것을 디코딩해보니..

flag

echo는 파일로 표시되는 내용이었고

flag 변수에 FLAG 문자열이 들어가있네요 :D

 

이제 인증하러가볼까요!

Auth

쨘! 이렇게 인증 성공하였습니다 :D

 

이만 문제풀이를 마치도록 하겠습니다!

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 58 (score:150)  (0) 2020.03.06
Old - 32 (score:150)  (0) 2020.03.05
Old - 54 (score:100)  (0) 2020.02.25
Old - 39 (score:100)  (0) 2020.02.24
Old - 38 (score:100)  (0) 2020.02.23

Old 54번 문제

문제로 들어오니 Password is 뒤에 하나씩 글자가 생겼다 사라지네요 !

 

소스코드를 봅시다 :D

소스코드

answer 함수를 주목해서 봅시다 ㅎㅎㅎ!

 

문자를 가져온 후 setTimeout함수로 계속해서 문자를 호출하는 것으로 보이는군요!

그리고 최종적으로 아무런 문자가 없으면 "?"로 끝이나게 되는 구조입니다!

 

자세히보면 aview.innerHTML에 새로운 값을 대입하기 때문에 문자가 계속해서 바뀌게 되는군요!

 

그럼 간단하게 이어붙이면 되지 않을까요 :D !

수정된 코드

수정된 코드입니다 !

어짜피 "?"는 필요없기 때문에 지워버렸고 제일 중요한건 "=" 에서 "+=" 로 연산자를 바꿈으로써

계속 이어나가게 했습니다 :D !

 

개발자 환경에서 콘솔로 이 소스코드를 실행시키면..

flag

쨘! 플래그가 출력이 되네용 :D!

 

이만 54번 문제풀이를 마치도록 하겠습니다 !

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 32 (score:150)  (0) 2020.03.05
Old - 25 (score:150)  (0) 2020.02.29
Old - 39 (score:100)  (0) 2020.02.24
Old - 38 (score:100)  (0) 2020.02.23
Old - 26 (score:100)  (0) 2020.02.14

Old 39번 문제

입력란이 하나가 존재하는군요!

 

소스코드를 봅시다 :D

소스코드

소스코드를 살펴보니

역슬래쉬(\)는 공백 처리

싱글쿼터(')는 ''로 처리된다고 하네요!

그리고 15글자로 문자열을 끊어버리는군요 ㅎㅎㅎ

 

쿼리에서 자세히보면 id 뒤에 싱글쿼터가 존재하지 않는거 보이시나요 :D ?

 

저 취약점을 이용해서 풀어보겠습니다!

 

id는 당연히 admin으로 해야하는 암묵적인 느낌을 가지고 해야하는데

mysqlql에서는 "=" 연산 작동 시 공백을 이용할 수가 있습니다!

 

'admin' = 'admin       '

위의 두개의 연산이 성립이 됩니다!

 

밑의 사이트에서 정말 잘 설명되어 있으니 한번 보시길 바래요 :D

https://woowabros.github.io/study/2018/02/26/mysql-char-comparison.html

 

MySQL에서 'a' = 'a '가 true로 평가된다? - 우아한형제들 기술 블로그

DB 알못의 어떤 리서치

woowabros.github.io

 

 

그럼 어떻게 풀면될까요 :D ?

풀이

쨘 ! 요렇게 풀면 됩니다 ㅎㅎㅎㅎ

'admin          ' 이런식으로 입력하면

싱글쿼터가 2개가 되지만 15, 16번째 위치에 속하기 때문에 뒤의 16번째는 짤려서 15번째 쿼터만 남게되죠!

그럼 'admin'으로 인식이 되어집니다 !

풀이 성공

그럼 이만 문제풀이를 마치겠습니다 !

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 25 (score:150)  (0) 2020.02.29
Old - 54 (score:100)  (0) 2020.02.25
Old - 38 (score:100)  (0) 2020.02.23
Old - 26 (score:100)  (0) 2020.02.14
Old - 24 (score:100)  (0) 2020.02.13

Old 38번 문제

문제로 들어가니 log를 인젝션하라네요?

 

소스코드를 봅시다 :D

source code

소스코드를 보니 아무런게 없고 admin 페이지가 있다고합니다!

admin.php

admin.php에 접속하여 보니 log viewer가 존재합니다!

그리고 ip와 입력했던 정보가 존재하는군요 :D

admin

admin을 입력해 보겠습니다!

you are not admin

admin이 아니라는군요..?

그럼 admin을 로그에 남기면 풀리겠구만 했습니다 :D

textarea

개행을 이용해서 문제를 풀어보겠습니다!

소스코드에 input 타입을 textarea로 변경하여 쉽게 개행하여 입력이 되도록 하면 간단하겠죠 :D ?

Injection

요런식으로 입력하게 되면 아마 admin으로 로그인되지 않을까 싶습니다 :D

문제 풀이 성공

admin.php로 접속하니 쨘! 하고 풀리네요 :D

 

이만 Old 38번 문제 풀이였습니다!

'CTF > Webhacking.kr' 카테고리의 다른 글

Old - 54 (score:100)  (0) 2020.02.25
Old - 39 (score:100)  (0) 2020.02.24
Old - 26 (score:100)  (0) 2020.02.14
Old - 24 (score:100)  (0) 2020.02.13
Old - 18 (score:100)  (0) 2020.02.12