Security/WebHacking
DIMI-CTF exec-me
DIMI-CTF exec-me
2020.11.08View Source 문제 이름을 보니 실행시키는게 주 목적인 문제인거 같다. 코드를 보니 역시나 필터링이 stristr 함수를 이용해 이루어지고 있다.stristr 함수는 첫번째 인자로 주어진 문자열 속에서 두번째 인자로 주어진 문자열이 존재하는지 찾는 함수다. www.w3schools.com/php/func_string_stristr.asp Try it Yourself » Definition and Usage The stristr() func" data-og-host="www.w3schools.com" data-og-source-url="https://www.w3schools.com/php/func_string_stristr.asp" data-og-url="https://www.w3schools...
[root-me.org - Web-Server] HTTP - POST
[root-me.org - Web-Server] HTTP - POST
2020.09.15Give a try! 버튼을 누르면 랜덤값으로 나의 점수가 출력된다. 그 출력되는 점수가 저 999999점을 이기면 깨는 문제다. 일단 저 점수가 어떻게 해서 결정되나를 알아보기 위해 소스코드를 살펴보았다. POST 방식으로 Math.floor(Math.random() * 1000001) 값을 요청해 이 값을 나의 점수로 한다. 코드를 보니 점수는 score라는 name을 가진 input 태그의 value 속성에 저장되는거 같다. 그럼 이걸 조절할 수 있을까? 버프수트를 사용해보자! Give it a try! 버튼을 누르자 버프수트에 다음과 같은 데이터가 잡혔다. 살펴보니,,, 점수를 POST 방식으로,,,하는구나? 그럼 이걸 999999보다 큰 숫자로 바꿔보자 score를 9999999로 바꾸고 For..
[root-me.org - Web-Server] HTTP - Cookies
[root-me.org - Web-Server] HTTP - Cookies
2020.09.15들어가면 볼 수 있는 화면이다. 이메일 주소를 적으면 그 이메일 주소들이 모두 저장돼서 관리자만 볼 수 있는 구조다. Saved email adresses를 눌러 저장된 메일 주소를 보려고 하니 위와 같이 Problem with cookie 라고 쿠키값이 맞지 않다는 에러문구가 출력된다. 주소를 살펴보니 visiteur(visitor로 추정) 이 c라는 이름의 파라미터로 주어져있다. 저게 쿠키값인거 같다. editthiscookie 확장 프로그램을 사용해 살펴보니 저 Value를 admin으로 바꿔주고 다시 접속해보니...?
[root-me.org - Web-Server] HTTP - User-agent
[root-me.org - Web-Server] HTTP - User-agent
2020.09.15시작하자마자 admin이 아닌게 들통났다. 오또카지~ 오또카지~ 에러문을 잘 살펴보니 Wrong user-agent...? user-agent는 BurpSuite에서 자주 보던 친구다. 기본적으로는 접속자의 브라우저 정보나, 운영체제 종류 등의 데이터가 실리는 항목인데, 이걸 보고 admin이 아니라고 판단한거라면 쉽게 생각해서..너무너무 쉽게 생각해서 user-agent를 admin으로 바꿔보자 위와 같이 내 정보가 담겨있는 User-Agent 항목을 아래와 같이!!! 요로코롬..? 요로코롬~~~~~ Password: rr$Li9%L34qd1AAe27
[root-me.org - Web-Server] HTTP - Open redirect
[root-me.org - Web-Server] HTTP - Open redirect
2020.09.15목표는 위와 같다. 챌린지를 시작하면 세 개의 버튼으로 정해진 사이트로만 이동할 수 있다.(페이스북, 트위터, 슬랙) 버튼을 눌렀을 때 정해진 3개의 사이트가 아닌 다른 사이트로 리다이렉션 시키면 되는 문제다. 저 3개중 어느 한 버튼을 눌렀을 때 그 버튼에 해당하는 링크로 바로 리다이렉션 되는걸 보니, 이 중간에 값을 조작해줘야 할거같다. 서버에 어떠한 형태로 데이터가 전해지는지 확인해보았다. 이와 같이 리다이렉션 되는 사이트의 url과 h라는 이름의 어떤 파라미터가 전해진다. 간단하게 저 url 값을 우리들의 국민주소 https://google.com으로 조작했을 때 Incorrect Hash라는 에러문이 출력되었다. 이로써 저 뒤에 같이 주어지는 h 는 해쉬값임을 알 수 있었다. 그럼 저 해쉬값이 ..
[root-me.org - Web-Client] Javascript - Obfuscation 1
[root-me.org - Web-Client] Javascript - Obfuscation 1
2020.09.14챌린지를 시작하자마자 비밀번호를 입력하라는 칸이 나오고 일정시간 후에 끝나버린다. 그 끝나버린 창에서 소스코드를 봐보았다. pass에 16진수(아스키코드로 추정)가 들어가있다. 그리고 사용자가 입력한 값(h)와 unescape(pass)가 같으면 풀리는 문제다. 그럼 unescape(pass) 값을 알아내보자. unescape 함수를 직접 찾아보고 결과값을 예상해보는 방법도 있겠지만, 개발자 도구의 콘솔창을 사용하면 쉽게 알아낼 수 있다. unescape() 함수 안에 문자열의 형태로 값을 넣어주면 이를 다른 값으로 디코딩 해준다. 저 값을 다시 그 비밀번호 입력창에 넣어주면...?둨흔? cpasbiendurpassword unescape() 함수는 문자열을 디코딩하는 함수였다. 위의 문제에서는 아스키코..
[root-me.org - Web-Client] Javascript - Authentication
[root-me.org - Web-Client] Javascript - Authentication
2020.09.14철새답게 여러 사이트를 돌아다니다가 root-me.org에 앉아보았다... 기본적인 로그인 화면이 뜨고 뭐 다른 보이는게 없으니 소스코드를 살펴보자. Login Username : Password : login.js에 속해있는 Login() 함수를 호출하는 버튼을 클릭하면 사용자가 입력한 pseudo(아이디)와 password(비밀번호)가 Login() 함수로 들어가는 것으로 보인다. 그럼 login.js를 살펴볼까...? /* */ 앞에서 사용자의 값을 가져오고 그걸 모두 소문자화 시킨다. 그리고 pseudo가 "4dm1n", password가 "sh.org", 이 두가지 조건을 모두 만족하면 "이 비밀번호를 정답 인증하는데 써라~_~"라는 느낌의 문장이 alert 된다. 그럼 그냥 Flag 작성칸에 ..
[Webhacking.kr] Challenge old-33
[Webhacking.kr] Challenge old-33
2020.08.16Challenge old-33번 문제다. Challenge 33-1이라고 나와있는걸 보니 33번은 여러 작은 문제들로 이루어져 있을것 같다는 생각이 들었다. 소스코드를 살펴보자. Challenge 33-1 view-source get 이라는 이름으로 GET 방식을 이용해 "hehe"라는 값을 전해주면 된다. 주소 뒤에 ?get=hehe를 붙여 해결해보자. 활성화된 Next 버튼으로 넘어가보쟈 소스코드를 살펴보자. Challenge 33-2 view-source POST 방식으로 post라는 이름으로 "hehe", post2라는 이름으로 "hehe2"를 넘겨주면 되겠다. 버프수트를 사용할 수도 있을거 같지만 귀찮으니깐 브라우저의 개발자도구를 활용해 해결해보자 기존의 소스코드에 위의 사진처럼 form 태그를..
[LOS / LORD OF SQL INJECTION] gremlin
[LOS / LORD OF SQL INJECTION] gremlin
2020.08.16los.rubiya.kr/gate.php https://los.rubiya.kr/gate.php los.rubiya.kr LOS의 goblin 문제를 풀어보았다.
[Webhacking.kr] Challenge old-11
[Webhacking.kr] Challenge old-11
2020.08.15webhacking.kr/old.php Webhacking.kr webhacking.kr 11번 PHP 문제다. 들어오자마자 틀렸다고 하니깐 기분이 묘하네,, 소스코드를 살펴보자 view-source GET방식으로 val이라는 이름의 데이터가 전해지는데, 이 값이 $pat에 저장되는 값과 일치하면 풀리는 간단한 문제다..(전혀 간단하지 않았다씨) 일단 저 가운데에 $_SERVER[REMOTE_ADDR]은 접속자의 IP주소다. 이는 초록창에 'Ip주소 확인'이라고 검색하면 바로 알 수 있다. 그럼 저 앞과 뒤에 저 이상한건 뭘까...? 뭔가 특수기호를 팍팍 쓴걸 보니 특별한 의미가 있어보인다. 바로 그 해답은!!! 정 규 표 현 식~ http://www.nextree.co.kr/p4327/ 정규표현식(Re..
[Webhacking.kr] Challenge old-10
[Webhacking.kr] Challenge old-10
2020.08.14다소 난감한 첫화면,, O | | | | Goal 흠,,,1600px에 Goal 라인이 있고 yOu가 이 라인에 서게 되면 문제가 풀리게된다. 어떻게 옮기지 고민하다가 그냥 한 번 클릭시 움직이는 정도를 1에서 1600으로 바꿨다. 이렇게 하면 한 번 클릭시 1600px을 움직이면서 골라인에 서게 되고, a태그 안에 있는 onclick 속성에 들어가있는 if 조건문이 실행되면서 풀린다!! 바로 아래와 같이! 이 상태로 한 번 클릭하면!
[Webhacking.kr] Challenge old-24
[Webhacking.kr] Challenge old-24
2020.08.14view-source 이 문제를 정확하게 이해하려면 php에 내장된 함수인 exract() 함수에 대해서 살펴볼 필요가 있다. extract는 '추출하다'라는 의미를 가진 영어단어다. 이 뜻에 맞게 어느 배열로부터 추출하면 인덱스(?)만으로 그 값에 접근할 수 있다. 직접 살펴보자. 만약 GET 방식으로 데이터를 주고받을 때 우리는 GET 방식으로 전해진 데이터에 접근하기 위해 $_GET['x'], $_GET['y']와 같이 사용한다. 여기서 만약 extract($_GET)을 앞에 적어준다면????? $_GET['x']는 $x로, $_GET['y']는 $y로 접근할 수 있다. 그럼 위의 코드에서 살펴봐보자. extract($_SERVER); extract($_COOKIE); $ip = $REMOTE_AD..