일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Los
- UnCrackable
- 월세
- 안드로이드
- 투자
- webhacking.kr
- 후킹
- 매물
- 웹해킹
- Mid()
- APKManager
- 아파트실거래가
- Blind Injection
- 아파트
- 전세
- 일기
- Frida
- 부동산
- 블라인드 인젝션
- 호갱노노
- ADB
- 서울
- Lord of SQLInjection
- NOX
- jeb
- 모의해킹
- 부동산분석
- Today
- Total
일단 쓰고보자
[los] nightmare 본문
#문제
#문제 의도
- 입력 값 필터링 규칙 (pw)
if(preg_match('/prob|_|\.|\(\)|#|-/i', $_GET[pw])) exit("No Hack ~_~");
if(strlen($_GET[pw])>6) exit("No Hack ~_~");
1) prob
2) _
3) .
4) ()
5) #
6) -
7) pw 입력 값이 6자가 넘으면 안 됨
- 목표
pw 값을 6자 이하로 입력, 필터링을 우회하여 쿼리 결과값이 존재하도록 해라.
#확인사항
- 가장 먼저, 주석문을 삽입해서 뒤에 and id!='admin' 조건문을 우회해야 할 것 같다.
- Mysql에서 주석을 사용하는 방법을 알아보자.
1) # → 필터링 됨
2) --공백 // 예를 들어, --%20 혹은 --%09 등 → 필터링
3) /*주석 내용*/ → 파라미터가 하나라 사용하기 부적절
4) ;%00
- pw 입력 값을 닫아주기위해 ') 문자로 반드시 사용해야하고, ;%00 문자로 뒷 문장을 주석해야하니 최대 2문자를 사용해서 문제를 해결해야한다. 조금 가혹한 것 같은걸...
- 처음 문제를 해결하려고 할 땐 pw=('')||1;%00 와 같이 or 를 집어넣어서 해결하려고 했는데, 이 방법으론 무조건 6자를 초과해버린다. 아래를 참고해서 다른 방법을 찾아보도록 보도록 하자.
- 테스트 목적으로 test 테이블에 몇 가지 내용을 넣고, 쿼리에 따른 결과를 정리해봤다.
1) pw=('test')=0 인 경우 pw 값이 'test' 아닌 결과만 조회되며,
2) pw=('test')=1 인 경우 pw 값이 'test' 인 결과만 조회된다.
- 위 결과를 토대로, 문제 쿼리에 적용해보면 pw 값이 공백인 경우를 조회할 지, pw 값이 공백이 아닌 경우를 조회할 지 판단이 선다.
- 결론적으로 아래 4가지를 모두 충족하려면 pw=')=0;%00 이 되겠다.
1) 입력 값 닫기
2) pw 값이 공백이 아닌 경우 조회
3) 주석 처리
4) 입력 값 6자 이하
- 입력 값 6자 이하만 아니었어도 금방 푸는건데...
'모의해킹 > Lord of SQLInjection' 카테고리의 다른 글
[los] dragon (0) | 2020.05.11 |
---|---|
[los] xavis (0) | 2020.04.24 |
[los] zombie_assassin (2) | 2020.04.10 |
[los] succubus (0) | 2020.04.08 |
[los] assassin (0) | 2020.04.08 |