분류 전체보기
[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] – golem 힌트 및 풀이
[LOS] – golem 힌트 및 풀이
2019.04.06힌트1. or,and 우회 기법은 알것이다. 이번에는 = 을 막고 있다. 우회 방법은? 힌트2. 그렇다. blind… 힌트3. 그런데 substr을 막고 있다. 우회 방법은? 풀이. 이번 문제는 나에게 새로운 우회 방법을 가르쳐 준 문제이다. = 을 우회하기 위해서는 like 를 사용하면 된다. 일단 admin으로 로그인을 해보자 ?pw=1′ || id like ‘admin 여기까지 했으니 admin의 pw를 알아낼 수 있다. pw길이를 알아내보자. 1′ || id like ‘admin’ %26%26 length(pw) like 1%23 import requests import string import time wordList=['a','b','c','d','e','f','g','h','i','j','k..
[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 -..
[python] - beautiful soup를 이용한 웹 크롤러 만들기
[python] - beautiful soup를 이용한 웹 크롤러 만들기
2019.04.06Web Crawler 란? 정식 명칭은 Web scraping 이라고 불리며, 이는 웹 사이트에서 원하는 정보를 추출하는 것을 말한다. 웹 사이트에 방문헤서 자료를 수집하고, 하나의 페이지 뿐만 아니라 그 페이지에 링크되어 있는 것도 방문하여 정보를 수집한다. 필자는 python 을 이용하여 간단한 web scraping을 만들어 볼 것이다. Web Crawler를 만들기 전에 필자는 모듈을 2가지를 쓸 건데, requtests 와 bs4 라는 모듈을 사용할 것이다. pip install requests pip install bs4 requests 모듈에 대한 간단한 설명은 아래 포스트를 참고하면 도움이 될 것이다. https://universe-blog.tistory.com/entry/python-re..
[python] - requests 모듈을 이용한 웹 요청
[python] - requests 모듈을 이용한 웹 요청
2019.04.06이번 글에서 소개할 모듈은 requests 모듈이다. 간단한 웹 크롤러를 만들기 전에 requests 모듈과 몇가지 함수를 설명할 것이다. 1. requests 모듈 설치 다음 명령어를 통해서 requests 모듈을 설치한다. pip install requests 2. import requests 모듈을 설치 했으면 아래처럼 import requests 를 추가하게 되면 사용이 가능하다. dir 함수를 통해 requests 모듈에서 지원하는 함수들의 목록을 볼 수 있다. 많은 함수들이 보이는데, 필자가 많이 쓰는 get, post, status_codes 함수를 소개할 것이다 import requests print(dir(requests)) # Result #['ConnectTimeout', 'Conne..
[python] – sha256 암호화 및 복호화
[python] – sha256 암호화 및 복호화
2019.04.06hashlib 모듈을 사용하여 암호화 복호화가 가능하다. 단, 복호화는 한글자로 암호화된 값만 복호화가 가능하다. [SHA-256 Encrypt] import hashlib str = "test" print(hashlib.sha256(str.encode()).hexdigest()) # Result # 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08 [SHA-256 Decrypt] sha-256 복호화는 한글자로 암호화된 값을 복호화하는 해시 테이블을 만들어서 복호화를 한다. import hashlib str = """ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb 2e7..
[python] – md5 암호화 및 복호화
[python] – md5 암호화 및 복호화
2019.04.06[MD5 Encrypt] Python 에서 hashlib이라는 모듈로 md5 암호화 및 복호화가 가능하다. import hashlib str = “test” result = hashlib.md5(str.encode()).hexdigest() print(result) # Result # 098f6bcd4621d373cade4e832627b4f6 [MD5 Decrypt] python에서 md5 복호화는 단순 한글자가 암호화된 값만 복호화 가능하다. 즉, 간단한 한글자를 해시 테이블 처럼 만들어서 그 문자로 치환 해주는 코드라고 생각 하면 될 것이다. import hashlib str = “0cc175b9c0f1b6a831c399e269772661 4a8a08f09d37b73795649038408b5f33” ..
[python] - argparse module
[python] - argparse module
2019.04.06참고 : 링크 > python을 실행할때 파일 이름 말고도 여러 옵션들을 적거나 값들을 추가적으로 적어주는 것을 본적이 있을 것이다. python에는 여러가지 모듈을 지원해주는데 sys 모듈을 쓰면 가능하다. 하지만 sys 모듈을 사용하면 사용자로 부터 어떤 옵션, 값을 받을지 모르기 때문에, 많은 예외가 발생한다. sys 말고 argparse 라는 모듈을 사용하면 쉽게 해결이 된다. > 아래 내용부터는 코드와 코드 설명을 위주로 argparse 모듈에 대해 설명 해보겠다. == Example_1 == ArgumentParser 라는 함수를 이용해 parser 를 생성. add_argument 함수를 이용해 변수와 type, help 를 정의해준다. parse_args() 함수를 통해 사용자로 부터 입력..
[html] - iframe 페이지 안보이게 하기
[html] - iframe 페이지 안보이게 하기
2019.04.06혹시나 웹 개발을 하다가 혹은 악의적인 목적으로 iframe 태그를 사용할때, 사용자에게 페이지를 보여주고 싶지 않은 상황이라면 아래와 같이 style 속성으로 넣어주면 해결이 된다.
[php] - 시간 크기 비교하는 strtotime 함수
[php] - 시간 크기 비교하는 strtotime 함수
2019.04.06strtotime 함수는 날짜를 비교해야하는 상황에 쓰이는 함수이다. 예를들어, 최근 글인지 구분하기 위해서 작성된 날짜와 서버의 날짜를 비교할때 쓰이게 된다. date("Y-m-d") 를 통해 현재 시간을 가져온다. 만약 현재 시간에 하루 전의 시간을 구하고 싶다면 date("Y-m-d", strtotime("-1 days")) 이렇게 하면 현재시간의 하루전 시간을 구할 수 있다. $timenow = date("Y-m-d"); $timetarget = "2018-20-28"; $str_now = strtotime($timenow); $str_target = strtotime($timetarget); if($str_now > $str_target) echo "비교할 시간이 현재 시간보다 이전입니다."; ..
[php] - 값이 숫자인지 확인하는 함수 is_numeric()
[php] - 값이 숫자인지 확인하는 함수 is_numeric()
2019.04.05숫자만 요구하는 특별한 경우가 존재한다. 예를들면 전화번호, 생일 등등 이런 값들은 숫자만 들어가야 한다. PHP에서는 서버측으로 전송되는 값이 숫자인지 확인하는 함수 is_numeric() 이라는 함수가 존재한다. is_numeric() 함수 사용방법은 아래 소스코드를 보면 알 수 있을 것이다. is_numeric() 함수 리턴 값은 그 변수에 만약 숫자만 있다면 참(1)을 리턴 변수에 숫자 말고 다른 스트링이 있다면 거짓(0)을 리턴한다.