eli_ez3r
eli_ez3r
eli_ez3r
전체 방문자
오늘
어제
  • 분류 전체보기 (202)
    • 0x01 끄적끄적 :) (57)
      • Network (5)
      • Security (14)
      • Reversing (2)
      • Forensic (5)
      • Operation System (10)
      • Development (10)
      • Solution (7)
      • 보안 상식 (3)
    • 0x02 Study :) (127)
      • Pwnable (59)
      • Webhacking (56)
      • Reversing (11)
      • Machine Learning (1)
    • 0x03 ETC :) (16)
      • IT Unpacking (5)
      • IT Information (1)
      • Enjoy (4)
      • Etc (6)
    • Admin :) (0)
      • 0x01 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

  • github.io 블로그 개설

인기 글

태그

  • write
  • hack
  • hacking
  • LOB
  • buffer
  • hakcing
  • BOF
  • 과정
  • overflow
  • 오버플로우
  • school
  • 공격
  • webhacking.kr
  • 해커
  • 스쿨
  • Up
  • pwnable
  • LEVEL
  • 암호
  • 메모리
  • 패스워드
  • 풀이
  • 문제풀이
  • 설명
  • password
  • attack
  • 해킹
  • web
  • 문제
  • hacker

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
eli_ez3r

eli_ez3r

Webhacking.kr Level 41 문제풀이
0x02 Study :)/Webhacking

Webhacking.kr Level 41 문제풀이

2018. 7. 31. 20:36

Level 41




<?
$hidden_dir="???";

$pw="???";

if($_FILES[up])
{
    $fn=$_FILES[up][name];
    $fn=str_replace(".","",$fn);
    if(eregi("/",$fn)) exit("no");
    if(eregi("\.",$fn)) exit("no");
    if(eregi("htaccess",$fn)) exit("no");
    if(eregi(".htaccess",$fn)) exit("no");
    if(strlen($fn)>10) exit("no");
    $fn=str_replace("<","",$fn);
    $fn=str_replace(">","",$fn);
    $cp=$_FILES[up][tmp_name];

    copy($cp,"$hidden_dir/$fn");

    $f=@fopen("$hidden_dir/$fn","w");
    @fwrite($f,"$pw");
    @fclose($f);

    echo("Done~");
}
?>
<form method=post action=index.php enctype="multipart/form-data">
<input type=file name=up><input type=submit value='upload'>
</form>

코드를 보면 파일을 받아 파일이름을 필터링 하고 hidden_dir이라는 곳에 카피한 후, 패스워드를 그 곧에 쓴다.

 

 

따라서 우리는 hidden_dir의 주소를 알아야 한다. 

코드를 자세히 보면, eregi함수를 통해 필터링 하는 부분과 str_replace를 통해 필터링 하는 부분이 있다. 


이 두가지 특성이 있는데, str_replace는 치환을 하는 반면, eregi는 치환은 하지 않지만, 해당 문자열이 존재하면 종료시켜 버린다. 


여기서 한가지 생각을 해야 한다. fn값이 '.' 이나 '<', '>' 이면 공백으로 치환되는데 이럴때 어떻게 처리가 될까? 



 이 소스에서 예외처리 하는 부분은 없다. 따라서 시도해 보았다.





어이없는 삽질을 기록해 보자면, 실제 파일의 이름을 '.', '>', '<' 로 바꾸려고 했었다. 순간 안되서 몇분간 삽질...

리눅스에서 파일 만들어서 옮겨볼까 생각까지...ㅋㅋ 바보였음;

 

먼저 텍스트 파일을 만들고, Fiddler를 켜서 파일 업로드하는 패킷을 캡쳐하였다.




캡쳐 후, filename을 '<'로 수정하고 보냈다.





 

그러고 나니 다음과 같은 페이지가 출력되면서, hidden_dir의 경로가 노출되었다.







 

 

다시 정상적으로 파일을 업로드 한 후, hidden_dir 경로 / 파일이름+확장자 으로 접속하면 pw가 존재한다.

 

확장자의 '.'은 replace로 치환되어 사라졌다.

 



flag : 634af6ff99668de457bbb583585f45ff

 

[!] 플래그는 파일 이름에 따라 다른듯 하다.


저작자표시 비영리 변경금지 (새창열림)
    '0x02 Study :)/Webhacking' 카테고리의 다른 글
    • Webhacking.kr Level 22 문제풀이
    • webhacking.kr Level 46 문제풀이
    • webhacking.kr Level 35 문제풀이
    • Webhacking.kr Level 39 문제풀이
    eli_ez3r
    eli_ez3r

    티스토리툴바