일단 쓰고보자

[los] golem 본문

모의해킹/Lord of SQLInjection

[los] golem

휘갈기갈기 2020. 4. 7. 12:58

#문제

#문제 의도

- 입력 값 필터링 규칙 (공통)

if(preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 
if(
preg_match('/or|and|substr\(|=/i'$_GET[pw])) exit("HeHe"); 

$_GET[pw] = addslashes($_GET[pw]);

  1) prob

  2) _

  3) .

  4) ()

  5) or

  6) and

  7) substr(

  8) =

- 목표

필터링을 사용하지 않거나 우회하여 admin 계정의 pw 값을 구하면 해결

 

#확인사항

- prob, _ 문자는 테이블 접근하지 못하도록 걸어둔 것 같고, ()는 특정 함수 쓰지 못하게 걸어둔 것 같다.

- 필터링 보면 or, and, substr( 을 걸어둔 것을 보면 저 문자 없이 Blind Injection 할 수 있는지 물어보는 것 같다.

- 이전 문제에서 or, and 는 우회를 해봤으나, substr() 함수와 = 문자를 우회할만한게 있는지 살펴보자.

  1) or → ||

  2) and &&

  3) substr() → mid() // substr() 함수와 mid() 함수는 용례가 같고, left(), right() 함수는 조건이 맞으면 대체할 수 있다.

  4) = → <> // equal 문자를 not equal 로 대체해서 쓸 수 있다. 단지 출력 값이 반대로 나오니 그 점만 주의.

- Blind Injection을 위한 기본 구문과 조건문 2가지

  orc 문제와 다른 점은 쿼리에 id가 guest 로 지정되어 있어서 쿼리 결과가 admin의 pw가 되도록 쿼리를 더 수정해야한다는 것.

  pw='123' or id in (0x61646D696E) && [조건문]#

  1) length(pw)<>n // n=[pw 문자열 길이]

  2) ascii(mid(pw,n,1))<>m // m=[pw n번째 문자의 ascii 코드]

  ※ 조건문이 참이라면 "Hello admin"을 출력해 줄 것이고, 거짓이면 아무것도 출력하지 않을 것이다.

   이번엔 = 대신 <> 문자를 썼으니 반대로 "Hello admin" 문구가 나오지 않는 경우를 참으로 간주한다.

  ※ 위 처럼 일부 노가다가 필요한 상황이 있으므로, 웹 프록시 도구 Burp Suite 기능인 Intruder를 이용하도록 하자.

- 위 구문을 통해 웹 프록시 도구(Burp Suite) Intruder를 통해 얻은 정답은 아래와 같음.

'모의해킹 > Lord of SQLInjection' 카테고리의 다른 글

[los] bugbear  (0) 2020.04.07
[los] darkknight  (0) 2020.04.07
[los] skeleton  (0) 2020.04.07
[los] vampire  (0) 2020.04.07
[los] troll  (0) 2020.04.07