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 블로그 개설

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
eli_ez3r

eli_ez3r

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

webhacking.kr Level 46 문제풀이

2018. 7. 31. 21:26

Level 46

 

<form method=get action=index.php>
level : <input name=lv value=1><input type=submit>
</form>
<?
if(time()<1256900400) exit();
    $_GET[lv]=str_replace(" ","",$_GET[lv]);
    $_GET[lv]=str_replace("/","",$_GET[lv]);
    $_GET[lv]=str_replace("*","",$_GET[lv]);
    $_GET[lv]=str_replace("%","",$_GET[lv]);

    if(eregi("union",$_GET[lv])) exit();
    if(eregi("select",$_GET[lv])) exit();
    if(eregi("from",$_GET[lv])) exit();
    if(eregi("challenge",$_GET[lv])) exit();
    if(eregi("0x",$_GET[lv])) exit();
    if(eregi("limit",$_GET[lv])) exit();
    if(eregi("cash",$_GET[lv])) exit();

    $q=@mysql_fetch_array(mysql_query("select id,cash from members where lv=$_GET[lv]"));

    if($q && $_GET[lv])
    {
    echo("$q[0] information<br><br>money : $q[1]");

    if($q[0]=="admin") @solve();
}
?>

index.phps 파일을 보면, 특정 필터링이 일어나고, 쿼리문을 통해 얻은 값이 'admin'이면 문제가 풀린다.




 

1을 넣어보니 위와 같이 출력되었다.


lv 파라미터를 통해 'admin'의 데이터를 추출해야 하므로 다음과 같은 방법을 사용하면 될것 같았다.



 

 

위 그림을 통해 'admin'이 출력되는 것을 볼 수 있다.


그러면 lv값에는 무엇을 넣어야 되는지 궁금할 수 있다.





위 사진처럼 lv값에 상관없이 'admin'의 값이 먼저 출력된다. 이런 경우라면 lv의 무엇이든 상관 없다.



하지만, 대상 시스템에서는 어떻게 출력 될지 모르므로 확실하게 앞부분을 False로 만들고 'admin' 데이터만 출력하게 하는 것이 좋다.

(실제 이문제에서도 lv값이 False일 때 풀리게 된다.)



 

이제 필터링 되는 문자들의 대안을 찾아보자.


필터링에 걸리는 거라 해봣자 공백 밖에 없는것 같다.


 

공백은 %20인데 %0a(개행)으로 바꿔도 상관 없다.





값을 입력해 보았지만, 원하는 출력이 나오질 않았다. 혹시나 php에 magic_quotes_gpc 를 사용했을까 싶어 char함수를 이용해 보았다.

 

magic_quotes_gpc는 php에서 싱글쿼터('), 더블쿼터("), 이스케이프(), NULL(%00) 갑에 대해 앞에 문자 '\'를 붙임으로써 공격을 방지하는 기능을 가지고 있다.

 

char()함수에는 입력하고자 하는 문자열의 ascii값을 넣으면 된다.


'admin' = char(97,100,109,105,110)





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

    티스토리툴바