목록분류 전체보기 (139)
DoR@Hee의 끄적끄적
로그인 창 같은게 보인다 Password Incorrent! 문자열이 보인다. 소스보기를 본 결과 post 방식이며 아이디는 admin이고 Password 는 0~9999라는걸 알 수 있다. URL 정보를 제대로 볼 수 없기 때문에 edit cookie를 이용해 정확한 정보를 알 수 있고 위 3가지 정보를 이용 1 2 3 4 5 6 7 8 9 import requests cookies = {'ASPSESSIONIDASRDRRRB': 'GKODFJNBBAEMKCBNFCEHFOAJ'} for i in range(1, 10000): url = "http://suninatas.com/Part_one/web08/web08.asp" res = requests.get(url, data={'id': 'admin', '..
SQL Injection 이란? 4년에 한 번 가장 위험한 웹 애플리케이션 보안 위험 10가지를 알려주는 owasp10에 주기적으로 1등을 하고 있는 Web Hacking 기법으로써 Database에 쿼리문(질의문)을 넣는 과정에서 데이터를 임의적으로 조작 원하는 SQL 구문을 실행하는 기법이다. SQL Injection 에 기본원리는 WEB과 DB서버 간에 사용되는 쿼리를 우회 원하는 쿼리로 조작을 해 참으로 만들어 원하는 데이터를 추출할 수 있다. 간단한 예제로 확인해 보면 테이블을 간단히 [그림1]와 같이 정의한다 일반적으로 로그인 인증을 할 때 쿼리문을 and 연산으로 사용해서 한다 결과값은 당연히 거짓 당연히 아무런 결과값도 안나온다. 하지만 [그림4]와 같이 쿼리 구문을 우회했을 때 일반적으로..
이 문제는 iron_golem과 비슷한 문제이지만 col | if | case-when 등 조건에 따른 구문을 막고 있다. 하지만 iron_golem에서 이용했던 select 1 union select 2를 이용해서 풀 수 있다. ' (싱글 쿼터)를 입력했을 때 에러 메시지가 나오겠지 하고 생각했으나 아무런 에러메시지가 안 나온다. 혹시 머라도 있을까 했지만 아무것도 없다 즉 쿼리가 참일 경우 아무것도 안 보이게 하고 쿼리가 거짓을 경우 원래 창이 보이도록 해야 한다. 쿼리를 일단 작성해 보았다 위와 같이 쿼리를 작성할 경우 서브 쿼리에 따른 반환 값이 1개 이기 때문에 원래 페이지를 유지하는 것을 확인할 수 있었다. 그것을 mysql에서 확인해보면 쿼리가 값이 한 개만 나오는 것을 확인할 수 있고 서브..
문제 지금까지 와 문제는 다른 문제이다 Hello guest, Hello admin 등 결괏값에 따른 문자열을 찾아볼 수 없고 sleep, benchmark 등 time based sql injection 구문을 막고 있다. 문제를 확인 하기 위해서 '(싱글 쿼터)를 입력하니 Error 가 나왔다 즉 Error를 기반으로 문제를 풀어야 한다는 것을 알았다. 문제를 풀기 위해 일단 SELECT 1 UNION ALL SELECT 1 || SELECT 1 UNION SELECT 2를 이용하기로 했다 select 1 union all select1를 이용할 경우는 위 그림과 같은 레코드 값을 반환한다 이유는 UNION ALL 같은 경우는 중복 값을 포함하기 때문이고 위와 같이 구문을 select 2 union ..
"select id from prob_dragon where id ='guest'# and pw ='' " 이렇게 쿼리문이 넣어져 있다 항상 참값을 만드는 쿼리로 "Hello guest" 문자열을 확인할 수 있다. 위 쿼리에 결과값이 admin 이어야 풀리는 문제 인대 #(주석)을 무시해야 한다 #은 한 줄 주석으로 라인을 이동시켜서 쿼리를 작성하면 되는데 %0a(Line feed) \n을 이용해서 풀이하면 된다. 성공 추가적으로 저렇게 개행을 해도 쿼리가 들어가는 이유를 보자면 mysql에서 작성했을 때 위 쿼리와 같다 "select id from prob_xavis where id ='gues'# and pw=' '" 빨간색 부분이 주석이 되는 부분이고 저기서 라인을 이동시켜 "select id fr..
문제 소스코드 이때까지 풀었던 los 문제 중 가장 까다롭고 짜증 나는 문제이다. 1. 별다른 필터링은 존재 하지 않다. regex, like를 필터링하고 있는대 일단 저 2개는 안 쓸 거니까 무시 일단 admin pw의 길이를 알아내기 위해서 length(pw) 를 이용 12자리 인 것을 알았다. 그 후 맨날 쓰는 뻔한 쿼리를 작성해서 admin pw를 알아내려고 시도할려고 파이썬 코드를 작성 후 계속해서 돌려보는데 "값이 안 나온다." 아스키코드 1~255를 다 돌려봤는대도 안나온다 Hex도 물론 안나온다 일단 다른 방식으로 접근해보기 위해서 pw의 한자리 길이를 알아보려고 했는데 길이가 4랜다 일반적으로 mysql에서 길이를 비교해보면 문자, 숫자는 다 1 인대 한글만 3이다 3이 나온 이유는 db..
1. preg_match를 이용해 /prob, _, \(문자)., 문자(), #, -, 등을 필터링 하고 있다. 2. 6자리 이상이면 exit(No Hack)를 출력하고있다. 일단 이 문제를 해결하려면 ('')와 and id!= 'admin'을 해결해야하는대 and id!='admin'은 주석 ;%00으로 해결 할 수 있을거 같다. 일단 pw파라미터에 ;%00이 들어갔을 경우 쿼리는 "select id from prob_nightmare where pw =('');%00 and id!='admin'"으로 인식된다 빨간색 부분은 주석부분 이렇게 쿼리를 작성했을 경우 ('')를 완성해야 하는대 아마 ('')는 문자열로 인식하고 있는 쿼리인거같다. 확인 해보기 위해서 mysql에서 pw=('')=0을 넣어봤더..
1-1 모듈 - 함수나 , 변수, 클래스 들을 모아 놓은 파일 - 다른 파이썬 프로그램에서 불러와 사용할 수 있게끔 만들어진 파이썬 파일 import 방식을 사용하기 위해서 test.py를 만들었다 test.py는 간단하게 전달인수 2개를 더해주는 함수이다. import 사용법은 import 모듈이름 으로 사용 할 수 있다. import test 하고 test.py를 import한 뒤 test.py에 정의돼어있는 sum 함수를 사용 할 수 있다. import.py에서 실행시 정상적으로 결과값도 출력된다. 또한 import 모듈이름 말고 다른방식에 모듈 선언 방식도 존재한다 사용방식은 from 모듈이름 import 모듈함수 이와 같은 방식을 사용하면 test.sum 이런식으로 안쓰고 sum만 했을 때 su..