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

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
eli_ez3r

eli_ez3r

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

webhacking.kr Level 59 문제풀이

2018. 7. 29. 11:01

Level 59

 

<?
if($_POST[lid] && $_POST[lphone])
{
    $q=@mysql_fetch_array(mysql_query("select id,lv from c59 where id='$_POST[lid]' and phone='$_POST[lphone]'"));

    if($q[id])
    {
        echo("id : $q[id]<br>lv : $q[lv]<br><br>");

        if($q[lv]=="admin")
        {
            @mysql_query("delete from c59");
            @clear();
        }
        echo("<br><a href=index.php>back</a>");
        exit();
    }
}

if($_POST[id] && $_POST[phone])
{
    if(strlen($_POST[phone])>=20) exit("Access Denied");
    if(eregi("admin",$_POST[id])) exit("Access Denied");
    if(eregi("admin|0x|#|hex|char|ascii|ord|from|select|union",$_POST[phone])) 
        exit("Access Denied");

    @mysql_query("insert into c59 values('$_POST[id]',$_POST[phone],'guest')");
}
?>

전체 소스이다. if문 하나씩 살펴보자.

if($_POST[lid] && $_POST[lphone])
{
    $q=@mysql_fetch_array(mysql_query("select id,lv from c59 where id='$_POST[lid]' and phone='$_POST[lphone]'"));

    if($q[id])
    {
        echo("id : $q[id]<br>lv : $q[lv]<br><br>");

        if($q[lv]=="admin")
        {
            @mysql_query("delete from c59");
            @clear();
        }
        echo("<br><a href=index.php>back</a>");
        exit();
    }
}

쿼리문을 보면 c59테이블에서 id와 lv값을 조회한다. 그리고 id가 존재하는 경우 id와 lv값을 출력한다.


lv의 값이 'admin'인 경우 문제가 풀리게 된다.

 

if($_POST[id] && $_POST[phone])
{
    if(strlen($_POST[phone])>=20) exit("Access Denied");
    if(eregi("admin",$_POST[id])) exit("Access Denied");
    if(eregi("admin|0x|#|hex|char|ascii|ord|from|select|union",$_POST[phone])) 
        exit("Access Denied");

    @mysql_query("insert into c59 values('$_POST[id]',$_POST[phone],'guest')");
}

phone 파라미터 값이 20이상이면 "Access Denied"를 출력한다.


id 파라미터 값이 'admin'이면 "Access Denied"를 출력한다.


phone 파라미터 값에 'admin, 0x, #, hex ..' 등이 있으면 "Acess Denied"를 출력한다.


쿼리문을 보면 insert문을 이용하여 c59테이블에 id와 phone파라미터를 'geust'로 넣는다.


id 파라미터는 ' ' 로 감싸 있지만, phone은 감싸져 있지 않으므로, phone은 정수만 입력 가능하다.

 

여기서 우리는 phone 파라미터를 인젝션 포인트로 잡는다.



 

위와 같이 입력하게 되면, insert into c59 values('test', 1, 123)-- ,'guest')) 이렇게 값이 들어가게 된다.


결론 적으로 insert into c59 values('test', 1, 123) 이 되게 된다.





정상적으로 인젝션이 잘 이루어 지고 있음을 알 수 있다.


이제 admin이라는 문자열을 필터링을 우회하면 될 듯 하다.


insert 쿼리는 values 부분에 문자열 대신 칼럼명을 넣을 수 있다.

예를들어, insert into member(id, lv) values('test', id) 라고 입력하게 되면 lv부분에 id값이 들어가게 된다.

 

위 방법을 이용하여 id값에 'admin'문자열을 거꾸로 넣고, reverse함수를 이용하여 lv값을 세팅하면 될 것 같다.



위와 같이 넣게 되면, insert into c59 values('nimda', 1, 'admin') 이 될것이다.


그렇게 되면 id:nimda, phone:1, lv:admin 이 된다.




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

    티스토리툴바