일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- Lord of sqlinjection
- 자바 문법
- 웹 개발
- sqlinjection
- 자바 is-a
- 자바 Array list
- 스프링 특징
- injection
- 소켓
- lord of sqlinjection`
- 보안
- APM
- XSS
- sql
- 해킹
- Los
- 마이크로서비스 아키택트
- 자바 has-a
- 쿠키
- 세션쿠키
- 스프링
- 세션
- 스프링구조
- lord of sqlinjectin
- 자바
- 서버
- php
- 스프링 종류
- 클라이언트
- 웹
- Today
- Total
목록해킹 (14)
LJ

11번 문제 golem 이다. query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id']) echo "Hello {$result[id]}"; $_GET[pw] = addslashes($_GET[pw]); $query = "select pw from prob_golem where id='admin' and pw='{$_GET[pw]}'"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("golem"); hi..
vampire 문제이다 이 문제도 코드만 보면 너무 쉽게 풀 수 있다. query : {$query}"; $result = @mysqli_fetch_array(mysqli_query($db,$query)); if($result['id'] == 'admin') solve("vampire"); highlight_file(__FILE__); ?> 위의 주석처리 한 부분을 봤을 때 소문자로 변환 후 admin을 한번 제거 하는 것을 알 수 있는데 간단하게 생각해서 admin 사이에 admin을 넣어주면 사이에 들어간 admin이 사라지면서 문제가 해결된다. 안전한 코드 예시이다. prepare("SELECT id FROM prob_vampire WHERE id = ?"); if ($stmt..
troll 문제이다. 굉장히 쉬우므로 빠르게 소스코드 분석부터 해보자 query : {$query}";//생성된 쿼리를 화면에 출력//디버깅 목적으로 사용되며, 실제 배포 환경에서는 제거하는 것이 좋다.$result = @mysqli_fetch_array(mysqli_query($db, $query));//데이터베이스에 쿼리를 실행하고, 결과를 배열로 가져옴.//@ 연산자는 오류를 무시하도록 한다.if($result['id'] == 'admin') solve("troll");//쿼리 결과에서 id가 "admin"인지 확인.//만약 id가 "admin"이면, solve 함수를 호출하여 특정 작업을 수행한다. 여기서는 "troll"을 인자로 전달highlight_file(__FILE__);//__FILE__..

XSS game level 6 이다. 아래 코드를 보면 js 파일이 해시값을 통해 로드 되는 것을 알 수 있다.(브라우저 주소의 해시값은 # 기호로 시작하는 문자열로, 웹 페이지의 특정 위치나 기능을 참조하는 데 사용) 이를 통해 , 외부 악성 js 파일을 로드 시키면 해결될 것으로 보인다. window.location.hash: 이 속성은 현재 브라우저 주소의 해시값을 문자열로 반환한다. 해시값은 # 기호로 시작하며, 해시값의 내용은 # 이후에 오는 모든 문자열이다. .substr(1): 이 메서드는 문자열의 특정 위치부터 시작하여 원하는 길이의 하위 문자열을 추출한다. 이 경우, 첫 번째 문자는 제외하고 (substr(1)) 나머지 문자열을 추출한다. || "/static/gadge..

xss game level 5 문제이다. 아래 코드를 보면 next 인자 값을 받아 next 인자 값을 가진 링크로 이동하는 것을 볼 수 있다. 그렇다면 signup.html에서 링크를 클릭했을 때 alert 창이 뜨게 하려면 해당 a 태그 링크를 눌렀을 때 동작하게 https://xss-game.appspot.com/level5/frame/signup?next=javascript:alert(1) next 인자 값에 인젝션을 시도 했을 떄 문제 해결이 된다. ( javascript:alert(1) 코드는 HTML 태그가 아니지만, href 속성 내 javascript: 를 통해 브라우저에서 자바스크립트 코드로 인식되고 실행된다. 이외에 이벤트 핸들러를 통해 많이 사용된다. )

xss game level 3 이다. 코드를 통해서 문제를 분석해 보겠다. 위의 코드를 보면 해당 이미지에서 URL # 뒤 부분의 숫자를 위 이미지 태그에 넣어 태그를 완성하는 코드이다. 그렇다면 num 변수에 저 태그를 닫고 alert 창을 뜨게 하는 코드를 인젝션 하면 문제가 해결된다.

level 4는 다음과 같은 화면이다. 입력창에 스크립트 구문을 넣으면 터질거같은데 소스코드를 확인해 보자 timer.html 부분을 보면 timer 값을 받는 것을 볼 수 있다. '{{ timer }}'는 템플릿 엔진에서 사용되는 표현식이며, 실제 값으로 바꿔 삽입되게 된다. ** 템플릿 엔진은 동적 콘텐츠를 생성하는 데 사용되는 도구** 이때 사용되는 이벤트 핸들러인 onload를 이용해 이미지가 로드 됨과 동시에 starttimer 함수 뒤에 alert창이 뜰 수 있게 변조해볼 것이다. 해당 구문을 넣으면 문제가 해결된다.

orge 문제이다. 코드 내용(아래 쿼리) 을 봤을 때 문제를 해결하려면 admin의 pw를 알아내야한다. 그러기 위해 일단 pw의 길이부터 알아내야한다. 위 코드를 이용해 Blind SQl injection 수행 결과 패스워드의 길이는 8인 것을 알 수 있다. 다음은 admin의 pw의 값을 한 글자씩 알아본다. import requests # requests 라이브러리를 임포트하여 http 요청을 보낼 수 있게 한다.# 초기 비밀번호를 빈 문자열로 설정pw = ''url="https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php"cookies={'PHPSESSID':'inpc1vtk0dstarnptr..