일단 쓰고보자

[los] darkknight 본문

모의해킹/Lord of SQLInjection

[los] darkknight

휘갈기갈기 2020. 4. 7. 13:23

#문제

#문제 의도

- 입력 값 필터링 규칙 (no)

if(preg_match('/prob|_|\.|\(\)/i'$_GET[no])) exit("No Hack ~_~"); 

if(preg_match('/\'|substr|ascii|=/i'$_GET[no])) exit("HeHe");

  1) prob

  2) _

  3) .

  4) ()

  5) 싱글쿼터(')

  6) substr

  7) ascii

  8) =

 

- 입력 값 필터링 규칙 (pw)

if(preg_match('/\'/i'$_GET[pw])) exit("HeHe"); 
$_GET[pw] = addslashes($_GET[pw]); 

  1) 싱글쿼터(')

  2) addslashes() 함수는 싱글쿼터('), 더블쿼터("), \, NULL 문자 입력 시 문자 앞에 \를 붙여 일반 문자로 만든다. 

 

- 목표

필터링을 사용하지 않거나 우회하여 admin 계정의 pw를 알아내면 해결.

 

#확인사항

- 싱글 쿼터(')를 잃은 상태에서는 입력 값이 숫자인 no를 공략하는 것이 좋을 것 같다.

- golem 문제의 필터링에서 추가로 ascii() 함수를 추가로 잃었다. ascii() 함수만 우회하면 어렵지 않게 풀 수 있을 것이다.

- "Hello admin" 문구를 확인하며 Blind Injection을 시도해보자.

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

  2) ascii() 함수가 사용되는 구문과 우회 방법은 아래와 같다. // 그냥 안 쓰면 된다.

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

  ※ char() 함수 사용할 때 주의할 점은 Mysql이 대소문자 구분을 하지 않는다는 것이다.

  즉, mid(pw,1,1) 값이 'a' 라고 가정하면 'a'인 char(97)만 맞아야되는데 'A'인 char(65)도 참으로 나온다는 것.

- 위 Blind Injection 구문을 통해 알아낸 pw 문자열은 0b70ea1f

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

[los] giant  (0) 2020.04.07
[los] bugbear  (0) 2020.04.07
[los] golem  (0) 2020.04.07
[los] skeleton  (0) 2020.04.07
[los] vampire  (0) 2020.04.07