[HackerRank] Left Rotation / Dynamic Array
2021. 7. 14. 13:57
알고리즘
# Left Rotation (Arrays) [문제] [코드] vector rotateLeft(int d, vector arr) { vector result(arr.size()); int i, j; for(i = 0; i < arr.size(); i++) { j = (i+d) % arr.size(); result[i] = arr[j]; } return result; } [코드설명] 주어진 array를 left rotate 연산하는 문제다. arr내에서 해결하지 않고 추가 배열을 사용해서 해결했다. arr와 동일한 크기의 result 벡터를 만들었다. result 벡터에 arr 벡터의 값을 복사하기 위해 for 반복문으로 벡터의 크기만큼 반복하도록 했다. result의 첫 번째 인덱스부터 값을 채우려고 했..
[LOS] golem
2021. 7. 11. 08:08
Study/Web Hacking
golem 입장! 이번 문제를 해결하기 위해서는 admin의 pw를 알아내야 한다. 소스코드에 주어진 query는 id만을 가져오게 되어있다. 대신 Hello admin이라는 문자열을 통해 쿼리의 참 거짓을 알아낼 수 있다. 즉 Blind SQL Injection으로 해결할 수 있다. 먼저 password의 길이를 알아내야 한다. password의 길이는 8이다. 이제 admin의 pw를 알아내기 위한 자동화 프로그램이 필요하다. 자동화 프로그램 소스코드는 아래와 같다. import requests url = "https://los.rubiya.kr/chall/golem_4b5202cfedd8160e73124b5234235ef5.php" cookies={'PHPSESSID':'tt2tomujp7112o1..
[natas] Level 19 -> Level 20
2021. 7. 11. 05:54
Study/Web Hacking
: level 19 → level 20 http://natas20.natas.labs.overthewire.org natas20의 화면이다. natas21의 password를 알아내려면 admin으로 로그인해야 한다. 소스코드를 살펴보자. natas20
[HackerRank] Jesse and Cookies / Insertion Sort - Part 1
2021. 7. 9. 03:40
알고리즘
# Jesse and Cookies (Heap) [문제] [코드] void insert_heap(int item, int *heap, int *n) { int i; i = ++(*n); while((i != 1) && item < heap[i/2]) { heap[i] = heap[i/2]; i /= 2; } heap[i] = item; } int delete_heap(int *heap, int *n) { int child, item, temp; item = heap[1]; temp = heap[(*n)--]; child = 2; while(child heap[child+1])) child++; if(temp 1) { result++; num1 = delete_heap(B, &A_count); num2 =..
[LOS] skeleton
2021. 6. 27. 21:13
Study/Web Hacking
skeleton 입장! 이번 문제는 뒤에 주석처리만 잘해주면 되는 문제다. query 마지막에 and 1=0 때문에 해당 쿼리는 항상 거짓이 된다. 따라서 pw 마지막에 주석을 달아서 and 1=0 부분을 무효화 해야 한다. payload는 다음과 같이 작성할 수 있다. ?pw=' or id='admin'# → ?pw=%27%20or%20id=%27admin%27%23 skeleton 해결!
[LOS] vampire
2021. 6. 27. 21:12
Study/Web Hacking
vampire 입장! 이번 문제는 str_replace 함수를 이용해서 해결하는 문제다. 이 문제에서 str_replace 함수는 3번째 인자인 $_GET[id]에서 1번째 인자인 "admin"을 찾아 2번째 인자인 "" 빈 문자열로 바꿔준다. 따라서 admin사이에 admin을 넣어주면 가운데 있는 admin은 빈 문자열이 되면서 양쪽에 있는 값들이 합쳐져 admin이 만들어진다. adadminmin → admin payload는 다음과 같다. ?id=adadminmin vampire 해결!
[natas] Level 18 -> Level 19
2021. 6. 27. 19:52
Study/Web Hacking
: level 18 → level 19 http://natas19.natas.labs.overthewire.org natas19는 natas18과 소스코드는 동일하다. 단, 세션 ID의 길이가 좀 더 길어졌다고 한다. 세션 ID의 형태가 어떻게 바뀌었는지 확인하기 위해 아래처럼 3개의 세션값을 받아왔다. 3232372d61646d696e 3337382d61646d696e 3237372d61646d696e 3개의 세션값을 받아온 결과 2d61646d696e는 반복되고, 앞은 3n형식으로 이루어져 있다는 것을 알게되었다. 이 패턴을 기반으로 natas20 password를 알아내보자. 이번에도 역시 자동화프로그램을 사용해서 2d61646d696e 앞의 숫자들을 조합하여 해결했다. 자동화프로그램은 다음과 같다..
[natas] Level 17 -> Level 18
2021. 6. 27. 18:54
Study/Web Hacking
: level 17 → level 18 http://natas18.natas.labs.overthewire.org 위 사진은 natas18의 시작화면이다. 소스코드는 아래와 같다. natas18 Please login with your admin account to retrieve credentials for natas19. Username: Password: View sourcecode 소스코드를 보면 $_SESSION['admin']값이 1이어야 natas19의 password를 알아낼 수 있다. 하지만 함수 로직 상 $_SESSION['admin']값을 1로 바꾸기 어렵다. username과 password를 전송하면 createID 함수에서 1에서 640사이의 세션ID를 생성한다. 분명 admin..
[XSS Challenge] Stage #15
2021. 6. 27. 18:45
Study/Web Hacking
위 사진은 Stage #15의 화면이다. 화면에 보이는 input에 값을 입력하면 해당 내용이 document.write로 작성이 된다. document.write로 입력하면 이번 문제를 해결할 수 있다. document.write에는 \x3c를 로 해석하는 특징이 있다.해당 특성을 사용해서 payload를 작성해봤다. \x3cscript\x3ealert(document.domain);\x3c/script\x3e그러나 아무런 변화도 일어나지 않았다. 소스코드를 확인해보니 '\'문자 하나가 필터링되고 있었다. 이번엔 \를 하나 더 추가하여 작성했다. \\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e 그 결과 alert창이 제대로 실행되었다.