일단 쓰고보자

[los] zombie_assassin 본문

모의해킹/Lord of SQLInjection

[los] zombie_assassin

휘갈기갈기 2020. 4. 10. 00:01

#문제

#문제 의도

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

$_GET['id'] = strrev(addslashes($_GET['id']));
$_GET['pw'] = strrev(addslashes($_GET['pw']));
if(
preg_match('/prob|_|\.|\(\)/i'$_GET[id])) exit("No Hack ~_~"); 
if(
preg_match('/prob|_|\.|\(\)/i'$_GET[pw])) exit("No Hack ~_~"); 

  1) prob

  2) _

  3) .

  4) ()

  5) addslashes() 함수는 싱글쿼터('), 더블쿼터("), \, NULL 문자 입력 시 문자 앞에 \를 붙여 일반 문자로 만든다.
  6) strrev() 는 인자로 받은 문자열 순서를 반대로 리턴한다. 예를 들면, 'abc'를 넣으면 'cba' 리턴.

- 목표

strrev(addslashes()) 함수를 적절하게 우회하여 쿼리 결과가 존재하도록 만들면 해결.

 

#확인사항

- 어쨌든 싱글쿼터(')를 탈출해서 구문을 입력해야 할텐데, strrev() 함수는 문자열을 뒤집는다고 했다. 그런데 그 문자열로 addslashes()를 적용한 문자열을 넣는다고 하니... 어떤 구멍이 생길 것 같다. (우회하는 걸 방지하려고 했더니 뒤집고 앉았다.)

- 우선 쿼리 값을 참으로 만들기 위해서는 아래 쿼리가 필요하다. (목표 구문)

id='"\' and pw='or id in (0x61646D696E)#

- 입력 값에 따라 함수를 거쳤을 때의 변화를 살펴보자. 쿼리 결과에는 문자열로 취급되는 문자열을 빨간색으로 표시했다.

- 그 중 쿼리문을 원하는 방향으로 조작할 수 있는 입력 값은 더블쿼터(")가 되겠다.

- 더블쿼터(")를 사용해서 목표 구문을 만들기 위해선 아래와 같이 변수를 입력해면 된다.

id="&pw=%23)E696D64616x0( ni di ro

- 풀고 보니, addslashes() 함수와 strrev() 함수를 동시에 쓰는 사람이 있을까 싶다.

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

[los] xavis  (0) 2020.04.24
[los] nightmare  (0) 2020.04.10
[los] succubus  (0) 2020.04.08
[los] assassin  (0) 2020.04.08
[los] giant  (0) 2020.04.07