일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- sql
- injection
- 자바 has-a
- Los
- 자바
- 스프링 종류
- 소켓
- 자바 문법
- 해킹
- 세션
- lord of sqlinjection`
- 자바 Array list
- 서버
- 쿠키
- lord of sqlinjectin
- php
- 클라이언트
- 웹
- 스프링구조
- XSS
- APM
- sqlinjection
- 보안
- Lord of sqlinjection
- 마이크로서비스 아키택트
- 웹 개발
- 스프링
- 자바 is-a
- 세션쿠키
- 스프링 특징
- Today
- Total
목록IT 보안 (28)
LJ
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: 를 통해 브라우저에서 자바스크립트 코드로 인식되고 실행된다. 이외에 이벤트 핸들러를 통해 많이 사용된다. )
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 ..