336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
문제 이름 : cobolt
소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13 |
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id'] == 'admin') solve("cobolt");
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";
highlight_file(__FILE__);
?> |
cs |
이전 문제처럼 자세한설명과 정답은 공개하지 않을예정이다.
답은 다른블로그를 들어가면 나올것이지만
직접공부하면서 생각해보고 스스로 풀어보는게 좋다고 생각하기때문이다.
$_GET 방식을 통해 서버에게 id값과 pw값을 보내준다 .
주의할점은 id,pw값에 prob , . , _ , ( , ) 등 값이 들어가있으면 필터링되게된다.
쿼리를 살펴보면
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
아이디값은 그대로 들어가지만 pw값은 db에 저장될때 md5() 함수를 이용해 md5로 암호화되서 값이 저장된다.
또 10번줄을 보게되면 id는 무조건 admin 이여지만 문제는 풀리는거같다.
그렇다면 pw값을 변조해야한다는것이다.
이전문제에서 작은 따움표를 닫았던것처럼 이번문제도 작은따움표와 괄호를 맞춰서 닫아줘보자 그다음 그사이에 참조건을 넣어보면된다
(참고로 이전문제처럼 참조건을 or 1=1 로하게되면 문제는 풀리지않는다.)
하지만 마지막에 ')값으로 인해 쿼리가 에러가날탠대 # 을 이용해서 주석처리하자
쿼리에 #을 넣게되면 #이후로 온값은 모두 주석처리가된다.
'wargame > los.eagle-jump.org' 카테고리의 다른 글
wolfman (0) | 2017.07.03 |
---|---|
orc (0) | 2017.06.18 |
goblin (0) | 2017.06.15 |
gremlin (0) | 2017.06.15 |
los 사이트 소개 (0) | 2017.06.15 |