🚩CTF
[HackingCamp 2019] 태보의 저주 write up
[HackingCamp 2019] 태보의 저주 write up
2019.04.06Forensic => 태보의 저주 요즘 ctf에서 태보라는 단어가 유행인가 보다. 노래를 듣고 약간 충격을 받았지만.. hxd로 실행해서 flag 값을 찾아 봤지만 없었다. 혹시 steganographic 기법으로 wav 파일에 text로 flag를 숨겼는지 확인하기 위해 아래 사이트를 이용했다. https://futureboy.us/stegano/decinput.html 위 사이트에 wav 파일을 업로드하고 기다리니 flag값이 나왔다. HCAMP{taebo_hae!}
[HackingCamp 2019] – 양념 친구들! write up
[HackingCamp 2019] – 양념 친구들! write up
2019.04.06Forensic => 태보의 저주 이건 뭐 기다리니까 flag 가 출력 되더라
[HackingCamp 2019] – genius_brain write up
[HackingCamp 2019] – genius_brain write up
2019.04.06Crypto => genius_brain write up 위 파일을 다운 받으면 base64로 encoding 된 스트링이 보인다. decoding 하면 아래 사진의 오른쪽 textarea에 hex 값으로 된 스트링이 보이게 된다. hex 값으로 된 것을 string으로 바꾸면 아래와 같은 값이 출력이 된다. 이게 뭔지 몇분동안 헤매다가 위 값을 구글에 검색하니 아래와 같은 사이트가 나왔다. Brainfuck_Visualizer 위 사이트에서 이상한 문자열을 입력하고 Run을 클릭하니 Flag 값이 나왔다. HCAMP{FuUUUUUUUUUUUUUc7F!#@$}
[TRUST] – mess write up
[TRUST] – mess write up
2019.04.06Reversing >> mess 문제는 아래 버튼을 클릭하면 파일을 다운 받을 수 있다. Running a file 파일을 실행하면 ‘비밀을 찾아라’ 하면서, 난독화된 문장이 있다. test 라고 입력하니 fail. 이라고 출력하고 프로그램이 끝난다. Write up ollydbg로 위 프로그램을 디버깅 했을때 아래 사진에서 멈추었다. Entry point를 찾기 위해 시도 해본 결과, 주소가 00CD2040 인 Entry point 를 찾았다. 이제 프로그램이 시작할때 출력되는 문자열이 어디 있는지 찾아보자. 00CD218B에서 어떤 함수를 call 하게 되는데, 여기서 문자열이 출력이 되었다. call 하는 주소에 들어간다. 해당 주소로 들어오니 여러개의 함수를 호출하고 있는데, 그 중 맨 아래 있는..
[TRUST] – Easy Taebo write up
[TRUST] – Easy Taebo write up
2019.04.06MISC >> easy_taebo ‘left_jab’ : ‘@==(^0^)@’ ‘left_mid_jab’ : ‘@=(^0^)@’ ‘mid_jab’ : ‘@(^0^)@’ ‘right_mid_jab’ : ‘@(^0^)=@’ ‘right_jab’ : ‘@(^0^)==@’ ‘left_hook’ : ‘@(^0^)@==’ ‘right_hook’ : ‘==@(^0^)@’ ‘left_speedball’ : ‘@@@(^0^)’ ‘right_speedball’ : ‘(^0^)@@@’ ‘left_kick’ : ‘@||(^0^)==@’ ‘mid_kick’ : ‘@==(^||^)==@’ ‘right_kick’ : ‘@==(^0^)||@’ 문제는 다음과 같고, 문제와 함께 제공되는 것은 사진 오른쪽 문자열이다. nc로 접속을 해..
[LOS] – assassin 풀이
[LOS] – assassin 풀이
2019.04.06위 문제를 보면, LIKE 구문을 사용하는 것을 볼 수 있다. LIKE 구문에서 %를 사용하면 다음과 같다. pw like ‘1%’ => pw의 첫번째 글자가 1인 것들 pw like ‘%1’ => pw의 마지막 글자가 1인 것들 pw like ‘%1%’ => pw에서 1을 포함하는 것들 위 원리중 첫번째를 이용하여 로그인을 해보자. a~z , 0~9까지 했는데 guest만 뜬걸 보니 다음과 같이 추측할 수 있다. 첫번째 pw글자는 admin과 guest 둘다 같다. 칼럼 값들의 순서는 guest가 맨 위에 있다.(admin은 guest 아래에 있다.) 이젠 9를 포함하여 똑같은 방식으로 로그인을 시도해본다.
[LOS] – giant 풀이
[LOS] – giant 풀이
2019.04.06위 문제를 보면 FROM 과 테이블 이름이 붙어 있는 것을 볼 수 있다. GET 방식으로 shit에 값을 FROM 과 테이블 이름 사이를 띄어 주는 값을 보내야 한다. 하지만 몇몇 문자들이 필터링이 되어있다. 위 문자들을 제외한 것들을 찾아 값을 보내면 클리어 할 수 있다. %0b를 넣어주면 클리어가 가능하다. https://los.rubiya.kr/chall/giant_18a08c3be1d1753de0cb157703f75a5e.php?shit=%0b
[LOS] – bugbear 힌트 및 풀이
[LOS] – bugbear 힌트 및 풀이
2019.04.06힌트 1. 당연한 소리이겠지만 필터링 하는 값들을 보고 우회 기법을 생각해 본다. 2. GET 방식으로 pw와 no에 값을 보내는데, 쿼리와 필터링을 고려해서 어디가 가장 공격하기 쉬울까 3. 나는 no에 쿼리를 집어 넣었다. 이유는 pw는 이미 상글쿼터로 감싸져 있고, 심지어 싱글쿼터를 필터링 하고 있다. 주석 처리 한다고 해도 싱글쿼터를 no에 닫아야 하는데 no에도 싱글쿼터를 필터링 하고 있다. 그렇다면 공격할 수 있는 곳을 no 말고는 없다. 4. 공백 우회는 이미 알 것이고, 패스워드를 알아내기 위해서는 substr 말고 mid,right,left 가 있다. = 대신 를 통해 비교할 문자의 크기를 비교할 수 있다. 풀이 일단 admin으로 로그인을 해야 한다. 나는 위의 힌트3번를 ..
[LOS] – darkknight 힌트 및 풀이
[LOS] – darkknight 힌트 및 풀이
2019.04.06힌트1. pw와 no에는 어떤 것들을 필터링 하는지 분석. 힌트2. 제시된 쿼리를 자세히 보면 알 수 있을 듯 힌트3. no에는 싱글쿼터를 막지만 쿼리에는 쿼터 자체가 없다. 풀이 필터링 된것들을 토대로, 내 지식으론 pw에 어떤 공격을 해도 먹히지 않을 거 같다는 생각이 들었다. 쿼리를 자세히 보면 no에는 쿼터 자체가 없다. 필요에 따라 싱글쿼터를 써야 하는 경우가 있는데 no에는 싱글쿼터를 필터링 하고 있다. 다른 방법이 있다면 더블쿼터를 쓰는 것이다. ?no=1 or id like “admin” admin으로 로그인 했는데 pw도 알아야만 문제가 풀린다. 이번에도 역시 python과 함께했다. 아래 코드는 pw 길이와 pw를 알아내는 코드이다. import requests import string..
[LOS] – skeleton 힌트 및 풀이
[LOS] – skeleton 힌트 및 풀이
2019.04.06힌트1. 목표는 admin 으로 로그인 하는 것이다. pw에 쿼리를 잘 집어 넣어 보자. 풀이. 싱글쿼터를 막지 않고 있다. 그러면 내가 원하는 쿼리를 넣을 수 있다는 뜻이다. ?pw=1′ or id=’admin’%23
[LOS] – vampire 힌트 및 풀이
[LOS] – vampire 힌트 및 풀이
2019.04.06힌트1. str_replace 라는 함수가 뭐하는 놈인가? 힌트2. aadmin 라고 보내면 a만 남는다.. 그러면?? 풀이 솔직히 풀이 할것도 없다. ?id=aadmin 이라고 넘기면 a 만 남는다. 이를 이용해서 값을 보내면 clear ?id=adadminmin
[LOS] – troll 힌트 및 풀이
[LOS] – troll 힌트 및 풀이
2019.04.06힌트1. ereg 라는 함수는? 힌트2. DB는 문자열 같은 경우 대소문자 구별을 하지 않는다. 풀이. 이 문제를 풀때 ereg 취약점을 이용해서 풀면 끝인줄 알았다. ?id=%00admin 이렇게 넘겼는데 되지 않더라. 근데 ereg 함수를 알아보니 대소문자를 구별한다고 한다. 즉 admin과 Admin은 다르다는 소리. 하지만 DB에서는 admin이랑 Admin을 같다고 인식한다. (대소문자 구별을 하지 않는다는 소리) 따라서 다음과 같은 방식으로 하면 clear ?id=Admin ?id=ADmin ?id=ADMin … … …
[LOS] – orge 힌트 및 풀이
[LOS] – orge 힌트 및 풀이
2019.04.06힌트1. 이전 문제와 비슷하다. 다른점이 있다면 pw를 알아야 한다는 것. 힌트2. 그렇다. Blind… 풀이. 최종적인 목표는 id=admin이고 admin의 pw를 알아내야 한다. 우선, or과 and를 우회한 다음 적절한 쿼리를 넣어서 pw 길이를 알아내보자. 첫번째 쿼리에서 id=’guest’ 라고 되어 있으므로 이것부터 우회 해야한다. ?pw=1’||id=’admin 이렇게 하면 일단 admin으로 로그인이 되지만, pw가 맞지 않아서 풀 수가 없다. 일단, pw 길이를 알아야 하기 때문에 다음과 같은 값을 보낸다. ?pw=1’||id=’admin’%26%26length(pw)=1%23 => %26은 &, %23은 # pw길이가 1자리는 아니다. 대소관계를 사용해서 >,
[LOS] – darkelf 힌트 및 풀이
[LOS] – darkelf 힌트 및 풀이
2019.04.06힌트1. pw에 or과 and를 필터링 하고 있다. 우회기법은? 힌트2. or은 || 로, and는 &&로 해야한다. 하지만 GET으로 &&를 넘긴다면 %26%26으로 보내야 할 것이다. 풀이. 위에 힌트에서 말했듯이 or,and는 || 와 &&로 우회가 가능하다. 그럼 답은 나왔다. ?pw=1′ || id=’admin
[LOS] – wolfman 힌트 및 풀이
[LOS] – wolfman 힌트 및 풀이
2019.04.06힌트1. 공백을 필터링한다는 것은 알고 있을 것이다. 공백을 우회하는 방법은? 힌트2. ‘공백 필터링’ 이라는 검색만 잘하면 찾을 수 있을 것이다 풀이 이번문제는 공백을 필터링 하고 있다. 이때 우회 기법은 많다. 1. Tab : %09 – no=1%09or%09id=’admin’ 2. Line Feed (\n): %0a – no=1%0aor%0aid=’admin’ 3. Carrage Return(\r) : %0d – no=1%0dor%0did=’admin’ 4. 주석 : /**/ – no=1/**/or/**/id=’admin’ 5. 괄호 : () – no=(1)or(id=’admin’) 6. 더하기 : + – no=1+or+id=’admin’ 출처: http://binaryu.tistory.com/31..
[LOS] – orc 힌트 및 풀이
[LOS] – orc 힌트 및 풀이
2019.04.06힌트1. 최종목표는 admin으로 로그인하고, 그 pw의 값을 비교하는데 참으로 만들어야 한다는 것. 즉 pw를 알아야 한다. 힌트2. 그렇다. blind sql injection 문제이다. 힌트3. length, substr 함수를 쓰면 풀릴것이다. 풀이 php해석을 해보면 결국엔 admin의 pw를 알아내야만 한다. 그렇다. blind sql injection 문제이다. length함수를 이용해서 admin의 pw 길이를 알아보자. 아래는 이 문제를 풀기 위해 작성된 파이썬 코드이다. 이 코드를 쓰려면 PHPSESSID 값을 바꿔주면 된다. (time.sleep을 쓴 이유는 딜레이를 넣지 않으면 확률로(?) 끊기는 경우가 있어서 넣었다.) import requests import string impo..
[LOS] – goblin 힌트 및 풀이
[LOS] – goblin 힌트 및 풀이
2019.04.06힌트1. no에는 싱글쿼터를 필터링 한다. 근데 솔직히 필터링 하던말던 상관없다. 힌트2. 이 문제의 테이블을 만들어 보자. 힌트3. guest의 no 값은 1이다. 그럼 admin의 no 값은? 풀이 이 문제는 이 문제의 테이블이 어떻게 생겼는지만 잘 파악하면 풀 수 있을 것이다. 일단 최종 목표는 admin으로 로그인 하는 것이다. no=1 일때 guest로 로그인이 된다는 것은 알 수 있다. no=2 일때 로그인이 되지 않는다. 여기서 추측 할 수 있는것은 다음과 같다. (Table 만들기 귀찮아서 걍 이렇게 했다.) +——————-+ | id | no | +——————–+ | guest | 1 | | ???? | ?? | +——————–+ 일단 table안에는 하나 이상의 값은 들어 있다는게 확실..
[LOS] – cobolt 힌트 및 풀이
[LOS] – cobolt 힌트 및 풀이
2019.04.06힌트1. id와 pw에는 싱글쿼터를 필터링 하지 않고 있다. 힌트2. pw에는 md5로 해시 해버린다. 즉 싱글쿼터를 넣어도 의미없다는 소리. 힌트3. 쿼리를 만들곳은 id이다. 풀이 첫번째 문제와 비슷한데 다른점이 있다면, pw의 값을 GET으로 받으면 md5로 해시를 해버린다. 즉 pw에 싱글쿼터나 어떤 쿼리를 넣게되면 의미 없다는 소리이다. 또 다른 점은 $result[‘id’] 가 ‘admin’ 이어야 한다. 그럼 쿼리를 입력해야하는 곳은 id이다. admin으로 로그인 하기 위해서는 정말 쉽게 아래 쿼리를 넣어주면 된다. ?id=admin’%23
[LOS] – gremlin 힌트 및 풀이
[LOS] – gremlin 힌트 및 풀이
2019.04.06힌트1. 겁나 쉽다. 힌트2. id와 pw에는 싱글쿼터를 필터링 하지 않고 있다. 힌트3. id와 pw에는 or,and, = 같은 것을 필터링 하지 않고 있다. 풀이. 쿼리를 넣을 때 가장 중요하게 봐야 하는건 싱글쿼터 일 것이다. 이 문제는 싱글 쿼터를 필터링 하지 않으므로 쉽게 풀수 있다. $result[‘id’]에 어떠한 값이 존재하면 solve() 라는 함수를 호출하기 때문에 아래 처럼 GET 으로 넘겨준다. ?id=1′ or 1%23 여기서 #을 그대로 적지 않고 url encoding 값인 %23을 적은 이유는 브라우저에서 #을 문자열의 끝으로 인식하기 때문에 제대로된 값이 전달되지 않는다. 따라서 GET으로 #을 넘기기 위해서는 %23을 넘겨 주어야 한다.
[FireShell_2019] – Crypto > Alphabet writeup
[FireShell_2019] – Crypto > Alphabet writeup
2019.04.06https://ctf.fireshellsecurity.team/challenges FireShell CTF 문제를 풀어 봤는데 3문제 시도 했지만… 1문제 품.. { Problem : Crypto > Alphabet } 72dfcfb0c470ac255cde83fb8fe38de8a128188e03ea5ba5b2a93adbea1062fa 맨 첫번째 줄에 있는 첫 단어 인데, 문자의 갯수를 세어보니 64글자 였다. Google에 “Crypto 64 characters” 라고 검색 해보니 sha-256이 나왔다. 위 문자를 복호화 해보니 다음과 같이 나왔다. ‘ 72dfcfb0c470ac255cde83fb8fe38de8a128188e03ea5ba5b2a93adbea1062fa ‘ : ‘ L ‘ 하지만 sha -..