P_Squirrel
Squirrel Hack
P_Squirrel
전체 방문자
오늘
어제
  • 분류 전체보기 (428)
    • Wargame(Web) (173)
      • Webhacking.kr Writeup (58)
      • DreamHack Writeup (64)
      • Lord of SQLInjection (40)
      • Websec.fr (2)
      • Webgoat (1)
      • G04T war (7)
    • Wargame(Pwnable) (94)
      • DreamHack Writeup (68)
      • pwnable.xyz Writeup (20)
      • G04T war (6)
    • Wargame(Reversing) (26)
      • DreamHack Writeup (26)
    • Wargame(crypto) (6)
      • DreamHack Writeup (6)
    • Wargame(DigitalForensic) (41)
      • CTF-D Writeup (28)
      • DreamHack Writeup (6)
      • Suninatas Writeup (7)
    • Wargame(misc) (4)
      • DreamHack Writeup (4)
    • DreamHack CTF (21)
    • ångstrom CTF (6)
    • AmateursCTF (2)
    • BDSec CTF (5)
    • Hspace war (1)
    • Reference (42)
      • Language_Study (10)
      • Pwnable_Study (24)
      • Web Hacking_Study (3)
      • Linux (2)
      • Windows Kernel (1)
    • 자격증 공부 (2)
      • 정보처리기사 (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 문

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
P_Squirrel

Squirrel Hack

Wargame(Web)/Webhacking.kr Writeup

WebHacking Writeup 7번 문제

2022. 7. 6. 06:39

Webhacking.kr old-7번 문제입니다.

소스코드 링크와 auth가 있습니다 일단 접속 해보겠습니다.

접속이 안된다는 군요 어쩔수 없이 소스코드를 보겠습니다.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 7</title>
</head>
<body>
<?php
$go=$_GET['val'];
if(!$go) { echo("<meta http-equiv=refresh content=0;url=index.php?val=1>"); }
echo("<html><head><title>admin page</title></head><body bgcolor='black'><font size=2 color=gray><b><h3>Admin page</h3></b><p>");
if(preg_match("/2|-|\+|from|_|=|\\s|\*|\//i",$go)) exit("Access Denied!");
$db = dbconnect();
$rand=rand(1,5);
if($rand==1){
  $result=mysqli_query($db,"select lv from chall7 where lv=($go)") or die("nice try!");
}
if($rand==2){
  $result=mysqli_query($db,"select lv from chall7 where lv=(($go))") or die("nice try!");
}
if($rand==3){
  $result=mysqli_query($db,"select lv from chall7 where lv=((($go)))") or die("nice try!");
}
if($rand==4){
  $result=mysqli_query($db,"select lv from chall7 where lv=(((($go))))") or die("nice try!");
}
if($rand==5){
  $result=mysqli_query($db,"select lv from chall7 where lv=((((($go)))))") or die("nice try!");
}
$data=mysqli_fetch_array($result);
if(!$data[0]) { echo("query error"); exit(); }
if($data[0]==1){
  echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=\"alert('Access_Denied!')\"><p>");
}
elseif($data[0]==2){
  echo("<input type=button style=border:0;bgcolor='gray' value='auth' onclick=\"alert('Hello admin')\"><p>");
  solve(7);
}
?>
<a href=./?view_source=1>view-source</a>
</body>
</html>

코드를 해석하면 rand(1,5)로 새로고침할때마다 1~5중 랜덤하게 값이 정해집니다.
쿼리가 실행에 실패하면 nice try가 출력되며
성공하면 $data 값이 나오는데 랜덤한 숫자만큼 $go를 감싸고 있는 것으로 보입니다.
즉, nice try가 떠도 구문은 성공했으나 20%확률로 통과가 된다는 것입니다.

 

맨 아래 코드에서는 $data[0]==2일때 solve(7)이 실행되므로 값을 2로 맞춰야 한다는 것을 알 수 있습니다.

그럼 2를 대입하면 되는데 preg_match()에서 필터링이 걸려있습니다. (2, - ,+, from, _ , = , \s , * , \ )들이 필터링되어 전송되는 것을 보아 우리는 필터링을 우회하면서 2라는 값을 출력해야 한다는 것입니다.

 

 

가장 간단하게 5%3을 먼저 해보겠습니다.

이게...에러가 나는군요 어디서 왜 에러가 났는지는 공부가 부족해서 모르겠습니다.

어쨋든 nice try는 뜨지 않았으니 코드 작성에 실패한 것같습니다.

 

아까 필터링에 + - 도 막혀있어 어떻게 하나 해맸는데
from이 막혀있는걸 보고 SQL문이 생각 났습니다
SELECT 문은 SELECT 6을 입력하면 6이 출력됩니다. 이것을 이용하면 될것 같습니다.

 

일단 2 가 필터링으로 걸려있으니 CHAR(50)을 사용해 2를 표현하겠습니다.

SQL문을 작성하는데 필요한 공백이 필터링에 걸려있으니 ( )를 사용해 대체하겠습니다.

이걸 몰라서 시도했다가 Access Denied를 봤습니다.

 

여기에 SELECT 문을 연결하는 합집합 역할을 하는 UNION문이 필요합니다.

최종 코드는 아래와 같이 됩니다.

val=100을 지정한 이유는 기본값인 1을 하면 앞의 구문이 실행되어 버리는 불상사를 방지하기 위해서입니다.

어떻게 알았냐면...알고싶지 않았어요
기본값을 1로 설정하고 3분간 새로고침을 했는데 20%가 이렇게 안맞아? 하면서 통과되지 않아 찾아보니
앞의 값이 True가 되면 안된다고 합니다. 그래서 val에 없을 만한 값 100으로 지정했습니다.

최종적으로 작성한 코드를 실행하면 당연히 한번에 안됩니다.

랜덤한 1~5이므로 여러번 새로고침해서 랜덤한 값과 일치할때를 찾아야합니다.

그래도 nice try!가 출력됬으니 구문은 실행된것으로 보입니다.

대략 10여번 새로고침하니

문제가 해결되었습니다!

'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글

Webhacking Writeup 17번 문제  (0) 2022.07.06
Webhacking Writeup 16번 문제  (0) 2022.07.06
Challenge(old)-03번 문제 Writeup  (0) 2022.06.15
Challenge(old)-11번 문제 Writeup  (0) 2022.06.15
Challenge(old)-10번 문제 Writeup  (0) 2022.06.15
    'Wargame(Web)/Webhacking.kr Writeup' 카테고리의 다른 글
    • Webhacking Writeup 17번 문제
    • Webhacking Writeup 16번 문제
    • Challenge(old)-03번 문제 Writeup
    • Challenge(old)-11번 문제 Writeup
    P_Squirrel
    P_Squirrel

    티스토리툴바