반응형

헤더 인젝션으로 풀어야하는 8번 문제입니다.


먼저 처음 문제에 들어가시면 



USER-AGENT Access Denied! 라는 문구가 나옵니다.

여기서 USER-AGENT라는것은 웹페이지를 요청할 때 사용하는 헤더 중에 한개입니다.

그렇다면 burp-suite라는 프록시툴로 한번 확인을 해보겠습니다.



이렇게 웹페이지를 요청하면 그에 맞는 헤더를 보내주는 것입니다.

그럼 저 유저 에이전트를 지워버리고 문제의 페이지를 요청하면


done 이라는 말이 나오네요 여기서 소스보기(index.phps)를 해보면


이런 소스가 나오는데요.


쿼리 구문중에서 insert를 사용해 user-agent와 아이피를 넣어주면서 guest라는 레벨을 설정해주네요.

하지만 필터링중에서 싱글쿼터와 주석은 존재하지 않기때문에 insert구문에서 여러개를 db에 넣을 수 있게 됩니다. 즉, 페이로드는 이렇습니다.


User-Agent : nekoplus','123','admin') %23 ','$ip','guest') 


이 헤더를 웹페이지를 요청할 때 user-agent를 조작해서 보내면 nekoplus 의 존재유무를 판단해 없다면 admin레벨로 insert시킵니다. 그렇다면 다시 nekoplus 로 보낸다면 클리어!

'Write up > Wargame' 카테고리의 다른 글

[Webhacking.kr]10번 문제  (0) 2014.10.30
[Webhacking.kr]9번 문제  (0) 2014.10.30
[Webhacking.kr]7번 문제  (0) 2014.10.05
[Webhacking.kr]6번 풀이  (0) 2014.10.05
[Webhacking,kr]5번 풀이  (0) 2014.10.05
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

300점짜리 간단한 SQL Injection문제입니다.



처음 페이지에서 Auth라는 버튼을 눌러보니 Access Denied라는 경고창이 뜨네요.

여기서 소스보기를 해보면

url에 인자값인 admin page는 val가 2라네요.

그래서 val=2를 해보니, Query Error가 뜹니다.그래서 힌트인 소스보기(index.phps)에 들어가보니 val에 2가 없으니 union을 이용해서 인젝션하라네요.


정말 간단합니다.

union을 사용할 떄 앞의 값이 거짓이 되면 앞의 값이 출력 되지 않고 union select 뒤의 값이 출력되기 때문에 거짓으로 만든다음 union select 2%23을 해줍니다.

하지만 스페이스인(%20)이 막혀있기때문에 이를 우회하기 위한 %0A,%0D등을 씁시다.

이렇게 해보면 nice try가 나올텐데, 괄호갯수를 3개정도로 고정시켜놓고 새로고침해주면 

성공입니다!

'Write up > Wargame' 카테고리의 다른 글

[Webhacking.kr]9번 문제  (0) 2014.10.30
[Webhacking.kr]8번 문제  (0) 2014.10.30
[Webhacking.kr]6번 풀이  (0) 2014.10.05
[Webhacking,kr]5번 풀이  (0) 2014.10.05
[Webhacking.kr]4번 풀이  (0) 2014.10.04
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

암호화기초부분인 100점짜리 문제입니다.


user라는 쿠키값의 존재여부를 묻고

그 안의 값이 각각 base64로 20번 인코딩 되네요.

그리고 1은 !로 2도 @로 치환이 되었으니 각각 해당되는 값들을 치환시키신게


user,password라는 쿠키값에 넣어지게 되었고,


디코드 되는 부분은 인코딩 부분과 과정을 반대로 해주시면 되구요.


근데 여기서 디코드된 아이디와 비밀번호가 각각 admin일때 문제가 풀리니


admin을 base64로 인코딩을 20번해주시고 치환시킬껀 시키신다음에

password에도 똑같은 값을 넣어주시면 성공!

(노가다 성이 짙은 문제..ㅠㅠ)

'Write up > Wargame' 카테고리의 다른 글

[Webhacking.kr]8번 문제  (0) 2014.10.30
[Webhacking.kr]7번 문제  (0) 2014.10.05
[Webhacking,kr]5번 풀이  (0) 2014.10.05
[Webhacking.kr]4번 풀이  (0) 2014.10.04
[Webhacking.kr]3번 풀이  (0) 2014.10.04
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

300점짜리 문제입니다.



첫페이지는 이렇게 뜹니다. 왠지 어드민으로 로그인 해야할것 같은 기분이 드네요.ㅋㅋㅋ

먼저 로그인버튼을 클릭하게 되면


다음과 같은 창으로 넘어가게 되는데, 웹페이지의 소스를 보겠습니다.

현재페이지에 POST방식으로 값이 전달되네요.

일단 여기까지 login.php 입니다.


혹시나싶어 url에서 login.php를 지워봤더니


아래와 같이 파일들이 그대로 드러나게 됩니다.

join.php라는 파일에 들어가서 소스를 보고 간단하게 정리해봤습니다.


=============================login.php=================================

l='a';

ll='b';

lll='c';

llll='d';

lllll='e';

llllll='f';

lllllll='g';

llllllll='h';

lllllllll='i';

llllllllll='j';

lllllllllll='k';

llllllllllll='l';

lllllllllllll='m';

llllllllllllll='n';

lllllllllllllll='o';

llllllllllllllll='p';

lllllllllllllllll='q';

llllllllllllllllll='r';

lllllllllllllllllll='s';

llllllllllllllllllll='t';

lllllllllllllllllllll='u';

llllllllllllllllllllll='v';

lllllllllllllllllllllll='w';

llllllllllllllllllllllll='x';

lllllllllllllllllllllllll='y';

llllllllllllllllllllllllll='z';

I='1';

II='2';

III='3';

IIII='4';

IIIII='5';

IIIIII='6';

IIIIIII='7';

IIIIIIII='8';

IIIIIIIII='9';

IIIIIIIIII='0';

li='.';

ii='<';

iii='>';

lIllIllIllIllIllIllIllIllIllIl=lllllllllllllll+llllllllllll+llll+llllllllllllllllllllllllll+lllllllllllllll+lllllllllllll+ll+lllllllll+lllll; //oldzombie

lIIIIIIIIIIIIIIIIIIl=llll+lllllllllllllll+lll+lllllllllllllllllllll+lllllllllllll+lllll+llllllllllllll+llllllllllllllllllll+li+lll+lllllllllllllll+lllllllllllllll+lllllllllll+lllllllll+lllll; //document.cookie


if(eval(lIIIIIIIIIIIIIIIIIIl).indexOf(lIllIllIllIllIllIllIllIllIllIl)==-1) { bye; } //oldzombie쿠키 여부


if(eval(llll+lllllllllllllll+lll+lllllllllllllllllllll+lllllllllllll+lllll+llllllllllllll+llllllllllllllllllll+li+'U'+'R'+'L').indexOf(lllllllllllll+lllllllllllllll+llll+lllll+'='+I)==-1) //document.url에서 mode=1 인지 확인

=======================================================================

이렇게 되는데요. 잘보시면 oldzombie라는 쿠키값의 존재 여부를 묻고 있고 url에 인자값으로 mode를 받고있는 것을 알 수 있네요. 해당하는 값들을 전부 적용한다음

아래와 같은 페이지로 되는데,


id란에 최대 길이가 5이상이 될수 없다고 소스에 적혀있습니다.

여기까지 보았을때 sql insert에러가 생각나게 되는데요.

id varchar(5) 이렇게 되어있다면 만약 6글자를 넣었을 떄

5글자만 들어가게 되는 것입니다. 그렇다면 현재페이지에서 id의 maxlength를 수정하고 admin 로 값을 보내고 login.php에서 admin으로 로그인하시면 성공!

'Write up > Wargame' 카테고리의 다른 글

[Webhacking.kr]7번 문제  (0) 2014.10.05
[Webhacking.kr]6번 풀이  (0) 2014.10.05
[Webhacking.kr]4번 풀이  (0) 2014.10.04
[Webhacking.kr]3번 풀이  (0) 2014.10.04
[Webhacking.kr]2번 풀이  (0) 2014.10.04
블로그 이미지

KuroNeko_

KuroNeko

,
반응형


사이트에 접속하면 이런 창이 뜨는데 Base64로 암호화 되어있습니다.


Base64를 디코딩 시켜서 Password에 넣으면 성공!

'Write up > Wargame' 카테고리의 다른 글

[Webhacking.kr]6번 풀이  (0) 2014.10.05
[Webhacking,kr]5번 풀이  (0) 2014.10.05
[Webhacking.kr]3번 풀이  (0) 2014.10.04
[Webhacking.kr]2번 풀이  (0) 2014.10.04
[Webhacking,kr]1번 풀이  (0) 2014.10.04
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

간단한 SQL Injection 문제입니다.


일단 이 문제는 먼저 퍼즐을 푸셔야합니다.

퍼즐을 푸셨다는 가정하에 진행하겠습니다.



이런 입력창이 뜹니다. 저 name값에 인젝션을 해도 문제의 해답이 나오지 않았습니다.

그렇다면 burp suite를 사용해 중간에서 값을 보도록 하겠습니다.



answer이란 값이 보이네요. 한번 쿼리구문을 예상해보면

select * from 테이블 where answer=값

이런 식인 것 같습니다. 그렇다면

정답을 가져오기 위해선 항상 answer값을 true로 만들어야 겠죠.

그러면 answer에 추가할 값은

||1 이 됩니다.

정답이 나오니 Auth에 넣으면 성공!

'Write up > Wargame' 카테고리의 다른 글

[Webhacking.kr]6번 풀이  (0) 2014.10.05
[Webhacking,kr]5번 풀이  (0) 2014.10.05
[Webhacking.kr]4번 풀이  (0) 2014.10.04
[Webhacking.kr]2번 풀이  (0) 2014.10.04
[Webhacking,kr]1번 풀이  (0) 2014.10.04
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

먼저 2번문제에 들어가면 이런 웹사이트가 뜹니다.


보다시피 time이라는 쿠키값을 생성하고 있고, 웹사이트의 소스를 보아하니


수상한 구간이 보입니다. <!-- 현재시간 --> 이런식으로 보이는데 time이라는 쿠키값을 이용해서 출력하는 것 같아보이네요.


그렇다면 저 time이라는 쿠키값을 변경해서 Blind Sql Injection으로 True,False를 해준다면

각각 <!--2070-01-01 09:00:01--> (True),<!--2070-01-01 09:00:00--> (False)

이렇게 뜰겁니다. 그렇다면 여기서 테이블 이름과 컬럼의 이름, 그리고 데이터 값을 얻어 올 수 있겠네요.

일단 여기까지의 정보를 가지고 저 페이지의 소스를 자세히 보아하니 admin이라는 사이트가 존재하는 것을 알 수 있습니다. 한번 들어가보면 


이런 사이트가 뜨는데 여기서는 아무런 값을 얻을 수 없습니다. 일단 사이트를 전부 돌아다녀 보면 FreeB0aRd라는 게시판이 보이는데, 게시글을 읽어보려니 비밀번호가 걸려있습니다.


자 그럼 테이블 이름을 알 수 없으니 추리(?)해서 값을 비교해 보도록 하겠습니다.


테이블 이름중 한개는 FreeB0aRd 였습니다. 그리고 컬럼중 한개는 password 였습니다.

그렇다면 Blind Sql Injection 을 해보겠습니다.


시간 and if((select ascii(substr(password,1,1)) from FreeB0aRd)=값 ,true,false)


를 자동화시켜 패스워드를 얻은 다음 위의 게시글을 읽을 수 있게됩니다.

읽게되면 admin manual이란 파일을 받을 수 있는데 비밀번호가 걸려있습니다.


그렇다면 admin페이지를 인젝션을 해보면 값이 있을 수도 있겠죠.

혹시나 싶어서 테이블이름을 admin으로 하였더니 인젝션이 되네요. 그렇다면 어드민 페이지의 패스워드를 얻을 수 있습니다.


그럼 admin_manual의 패스워드를 알려주는데,

그 패스워드를 사용해 알집을 풀면 Auth 코드가 나옵니다. 그걸 Auth에 넣으면 성공!

'Write up > Wargame' 카테고리의 다른 글

[Webhacking.kr]6번 풀이  (0) 2014.10.05
[Webhacking,kr]5번 풀이  (0) 2014.10.05
[Webhacking.kr]4번 풀이  (0) 2014.10.04
[Webhacking.kr]3번 풀이  (0) 2014.10.04
[Webhacking,kr]1번 풀이  (0) 2014.10.04
블로그 이미지

KuroNeko_

KuroNeko

,
반응형

쿠키값을 변경하는 아주 간단한 문제입니다.


index.phps(소스보기)를 제공하고 있구요.


해당 핵심이 되는 코드들은 아래와 같습니다.


<?
if(!$_COOKIE[user_lv])
{
SetCookie("user_lv","1");
echo(
"<meta http-equiv=refresh content=0>");
}
?>

<?

$password
="????";

if(
eregi("[^0-9,.]",$_COOKIE[user_lv])) $_COOKIE[user_lv]=1;

if(
$_COOKIE[user_lv]>=6$_COOKIE[user_lv]=1;

if(
$_COOKIE[user_lv]>5) @solve();

echo(
"<br>level : $_COOKIE[user_lv]");

?>


user_lv이란 쿠키를 생성하고 if문으로 user_lv의 값을 비교 하고 있네요

비교하고 있는 범위 값이


5<user_lv<=6 이므로 user_lv에 5와 6사이의 값을 넣어주면 성공입니다.

'Write up > Wargame' 카테고리의 다른 글

[Webhacking.kr]6번 풀이  (0) 2014.10.05
[Webhacking,kr]5번 풀이  (0) 2014.10.05
[Webhacking.kr]4번 풀이  (0) 2014.10.04
[Webhacking.kr]3번 풀이  (0) 2014.10.04
[Webhacking.kr]2번 풀이  (0) 2014.10.04
블로그 이미지

KuroNeko_

KuroNeko

,