일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 웹
- 세션
- XSS
- sqlinjection
- php
- 자바 문법
- 마이크로서비스 아키택트
- lord of sqlinjectin
- 자바 Array list
- APM
- Los
- Lord of sqlinjection
- lord of sqlinjection`
- 자바
- 스프링구조
- 해킹
- 소켓
- 스프링 특징
- injection
- 자바 has-a
- 스프링
- 스프링 종류
- 자바 is-a
- 세션쿠키
- sql
- 쿠키
- 클라이언트
- 서버
- 보안
- 웹 개발
- Today
- Total
목록보안 (13)
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..
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..
Darkelf는 코드만 보며 간단히 풀 수 있다. 위의 코드 중 필터링 하는 부분을 보면 or and를 대소문자 구분없이 필터링 하고있다. 그렇다면 or= ||, and=&&를 대신 써서 사용하면 된다.
Lord of SQLinjection 4번 orc이다. 간단한 코드 리뷰 및 분석1. query : {$query}"; // 쿼리 출력8. $result = @mysqli_fetch_array(mysqli_query($db,$query)); // 쿼리 실행 및 결과 추출9. if($result['id']) echo "Hello admin"; // 관리자 확인//이 조건문은 $result['id']에 값이 있고 그 값이 참(true)으로 평가될 경우 (즉, 'admin' 등과 같이 빈 문자열이 아닌 경우) 실행10. 11. $_GET[pw] = addslashes($_GET[pw]); // SQL 인젝션 방지를 위한 addslashes 사용12. $query = "select pw from ..