sqli - lab 상세 풀이 - 문제 풀이 노트 1 - 10 (입문 급 주석)

5753 단어 SQL 주입
(제목 은 자신 이 번역 한 것 입 니 다. 수준 과 이해 가 유한 합 니 다. 번역 이 정확 하지 않 을 수도 있 습 니 다. 전문 용어 가 아 닐 수도 있 습 니 다. 참고 만 하 십시오. 양해 해 주 십시오!) less - 1 기반 오류 - 작은 따옴표 문자열 원본: SELECT * FROM users WHERE id = '$id' LIMIT 0, 1 답 및 해석:http://127.0.0.1/sqli-labs-master/Less-1/?id= ’ or ‘1’='1 ’ or 1=1 --+ (- 나중에 빈 칸 을 넣 어야 설명 할 수 있 지만, 인터넷 주소 표시 줄 에 입력 할 때 마지막 으로 빈 칸 을 넣 어 해석 할 때 제거 되 므 로 +, 물론% 20 을 사용 해도 됩 니 다) or 1 = 1 \ # (불 여우 아래 url 표시 줄 에 사용 하면 \ # 주석 이 잘못 되 어 url 인 코딩% 23 으로 바 꾸 면 됩 니 다)단일 따옴표 만 닫 고 정확 한 조회 문 구 를 만 들 면 됩 니 다. 그러나 이 단 계 는 SQL 주입 구멍 의 유형 만 판단 할 뿐, 그 다음 에 일련의 작업 을 해 야 우리 가 필요 로 하 는 정 보 를 얻 을 수 있 습 니 다. 일반적으로 공동 조회 + 주석 을 사용 하면 데이터 베 이 스 를 얻 을 수 있 습 니 다. 추가 작업: 1. 먼저 데이터 베 이 스 를 판단 하여 나중에 공동 조 회 를 사용 할 수 있 도록 해 야 합 니 다.
http://127.0.0.1/sqli-labs-master/Less-1/?id=1' order by 4--+

그 중에서 4 는 데이터베이스 열 수 를 말 합 니 다. 우 리 는 끊임없이 바 꾸 고 맞 혀 야 합 니 다. 숫자 가 데이터베이스 열 보다 크 면 오 류 를 보고 하고 작 으 면 정상 적 인 반환 을 받 을 수 있 습 니 다. 문제 중의 데이터 베 이 스 는 3 열 이 있 습 니 다. 4 타 임 스 오 류 를 맞 히 고 3 으로 바 꾸 면 정확 합 니 다.
2. 유 니 온 조회 로 출력 위치 와 내용 판단
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,3 --+ 

여기 있 는 - 1 은 소수 나 자모 로 바 꿀 수 있 습 니 다. id 는 보통 자연수 이기 때문에 id 가 아 닌 숫자 를 입력 하면 where 가 성립 되 지 않 으 면 뒤에 있 는 유 니 온 조회 내용 만 표 시 됩 니 다. (제목 은 한 줄 만 표시 합 니 다)결 과 는 Welcome Dhakkan Your Login name: 2 Your Password: 3 으로 select 의 첫 번 째 필드 가 표시 되 지 않 고 두 번 째, 세 번 째 필드 는 각각 두 번 째, 세 번 째 줄 의 콜론 뒤에 표 시 됩 니 다. 즉, 이 두 줄 은 우리 가 정 보 를 얻 는 출력 점 입 니 다.
3. 그 다음 에 데이터 베 이 스 를 얻 을 수 있 는 기본 적 인 정 보 를 얻 을 수 있 습 니 다. 작업 은 위의 문장 중의 2, 3 을 각각 필요 한 조회 내용 의 문장 으로 바 꾸 어 데이터 베이스 버 전과 현재 데이터 베이스 의 이름 을 얻 는 것 입 니 다.
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,version(),database() --+ 

데이터베이스 현재 사용자, 데이터베이스 이름, 버 전 정보 가 져 오기
http://127.0.0.1/sqli-labs-master/Less-1/?id=-1' union select 1,2,concat_ws(0x7e,user(),database(),version()) --+

등등, SQL 조 회 를 사용 하 는 것 과 마찬가지 로 실전 에 서 는 SQL 언어 와 각 버 전의 데이터베이스 특성 을 숙지 하고 필요 한 정 보 를 조금씩 터 뜨 려 야 합 니 다. 긴 말 하지 않 고 그 다음 에 정 보 를 터 뜨 려 야 합 니 다. TIPS: limit, concat 등 함 수 를 이용 하여 출력 을 제한 하 는 환경 에서 충분히 발굴 하도록 주의 하 세 요.
문제 가 답 을 얻 으 면 끝 이 라 고 할 수 있 습 니 다. 앞에서 말 한 정 보 를 계속 발굴 하 는 것 은 똑 같 습 니 다. 뒤의 문 제 는 주로 답 을 말 하고 중복 되 는 부분 은 더 이상 군말 하지 않 습 니 다.
less - 2 오류 보고 기반 - 정형 소스 코드: SELECT * FROM users WHERE id = $id LIMIT 0, 1 답 및 해석:http://127.0.0.1/sqli-labs-master/Less-2/?id= 1 or 1=1 -1 union select …
less - 3 오류 기반 - 작은 따옴표 문자열 변형 소스 코드: SELECT * FROM users WHERE id = ('$id') LIMIT 0, 1http://127.0.0.1/sqli-labs-master/Less-3/?id= 1’) or 1=1 --+ -1’) union select … --+
less - 4 기반 오류 - 더 블 따옴표 문자열 원본 코드: id = '. id.' ''; (형식 오류 가 발생 하지 않도록 변수 기 호 를 제거) sql = 'SELECT * FROM users WHERE id = ($id) LIMIT 0, 1';http://127.0.0.1/sqli-labs-master/Less-4/?id= 1") or 1=1 --+ -1") union select … --+
소절: 상기 몇 문 제 는 큰 유형 이 라 고 할 수 있 으 며 주입 점 의 유형 에 따라 SQL 문 구 를 구성 합 니 다.
less - 5 더 블 주입 - 작은 따옴표 문자열 입력 id, You are in 만 되 돌려 주 고 데이터베이스 내용 을 되 돌려 주지 않 습 니 다. 2 차 주입 더 블 주입 을 고려 합 니 다. my sql 에 서 는 select count (*), concat (select database (), floor (rand () * 2) 를 입력 합 니 다.as a from information schema. tables group by a 데이터 베 이 스 는 오류 가 발생 하고 굵 은 글 자 를 추가 하 는 부분 을 표시 합 니 다. 그 다음 에 1 또는 0 을 따라 갑 니 다. 기울 임 꼴 부분 은 데이터 베이스 의 모든 표 로 바 꿀 수 있 습 니 다 (여러 줄 이 있어 야 합 니 다)오류 도 몇 번 더 실행 해 야 발생 합 니 다. 중복 되 는 키 값 이 발생 하 는 것 은 확률 사건 이기 때 문 입 니 다. 이 오류 의 원 리 는 인터넷 상의 다른 글 을 참고 할 수 있 습 니 다. 필 자 는 너무 깊이 연구 하지 않 아 도 된다 고 생각 합 니 다. 대체적으로 알 면 된다 고 생각 합 니 다. 아래 참고 링크 를 첨부 합 니 다. 더 블 주입 원리 참조 더 블 주입 이 어떻게 발생 하 는 지 알 고 있 으 면 유 니 온 조회 에 가입 하면 됩 니 다.
http://127.0.0.1/sqli-labs-master/Less-5/?id=1' union select 1,count(*), concat((select database()), floor(rand()*2))as a from information_schema.tables group by a --+

less - 6 쌍 주입 - 쌍 따옴표 문자열 원 리 는 이전 문제 와 같 으 며, 단지 쌍 따옴표 로 바 꾸 어 닫 을 뿐이다.
   http://127.0.0.1/sqli-labs-master/Less-6/?id=1" union select 1,count(*), concat((select database()), floor(rand()*2))as a from information_schema.tables group by a --+

* * less - 7 * * 업데이트 대기
less - 8 블라인드 - 불 형 - 작은 따옴표 라 는 문 제 는 데이터베이스 정 보 를 직접 되 돌려 주지 않 습 니 다. 그러나 where 뒤의 문 구 는 진실 이 고 you are in 을 표시 합 니 다. 그렇지 않 으 면 아무것도 표시 되 지 않 습 니 다. 우 리 는 입력 한 내용 이 진짜 인지 아 닌 지 판단 할 수 밖 에 없습니다. 이때 우리 의 생각 은 하나의 알파벳 을 맞 추 는 것 입 니 다. 예 를 들 어 데이터 베이스 이름 을 찾 으 려 면 첫 번 째 자모 부터 맞 춰 보 세 요.두 번 째 는 모두 시험 해 볼 때 까지 입 니 다. 우 리 는 한 가지 예 가 있 습 니 다.
http://127.0.0.1/sqli-labs-master/Less-8/?id=1' and ascii(substr((select database()),1,1))>64 --+

현재 데이터베이스 의 첫 번 째 알파벳 인 ASCII 코드 의 값 이 64 보다 큰 지, 크 면 진짜 로 되 돌아 가 는 지, 창 에 you are in 을 표시 하 는 지, 그렇지 않 으 면 표시 되 지 않 고 114 까지 시도 할 때 도 진짜 로 되 어 있 는 지, 115 시 까지 가짜 로 되 어 있 는 지, ASCII 코드 가 115 이 고 소문 자 s 에 대응 하여 다른 알파벳 을 얻 을 수 있다 는 것 을 의미한다. 여기 서 알 아야 할 것 은 해당 함수 와 그 용법, ASCII 코드 의 값 등 이다.판단 문 구 는 또 다른 구조 방법 이 있 습 니 다. 원리 가 같 습 니 다. 물론 이렇게 수 동 으로 시험 하 는 효율 이 비교적 낮 습 니 다. 이 때 는 도 구 를 사용 하거나 도 구 를 직접 작성 한 다음 에 다시 말 할 수 있 습 니 다. 주의: select database () 밖 에는 반드시 괄호 로 묶 어야 합 니 다 (select database ().
less - 9 블라인드 - 시간 기반 - 작은 따옴표 라 는 문 제 는 주 입 된 문장의 진 위 를 막론하고 모두 you are in 으로 돌아 갑 니 다. 그러면 이때 시간 을 바탕 으로 하 는 블라인드 사 고 는 바로 입력 이 진실 이 되면 바로 값 을 되 돌려 주 고 입력 이 가짜 일 때 몇 초 후에 돌아 오 며 이에 따라 내용 을 판단 하 는 것 입 니 다.
http://127.0.0.1/sqli-labs-master/Less-9/?id=1' and if(ascii(substr((select database()),1,1))<115,0,sleep(5)) --+

sleep 의 시간 은 필요 에 따라 설정 합 니 다.
less - 10 블라인드 - 시간 기반 - 더 블 따옴표 작은 따옴표 로 바 꾸 고 다른 것 은 같 습 니 다.
필 자 는 불 여우 브 라 우 저 에서 테스트, url 인 코딩 전의 등 세부 적 인 환경 이 다 를 수 있 습 니 다. 글 의 오리지널 에 약간 차이 가 있 을 수 있 습 니 다. 옮 겨 실 으 려 면 작가 에 게 연락 하 십시오!

좋은 웹페이지 즐겨찾기