webhacking.kr - old 08

2024. 3. 27. 14:53·Wargame/Webhacking.kr

 

 

문제화면이다.

 

소스코드를 한번 확인해 보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

길다.

 

나눠서 살펴보자.

 

 

 

 

<?php
$agent=trim(getenv("HTTP_USER_AGENT"));
$ip=$_SERVER['REMOTE_ADDR'];
if(preg_match("/from/i",$agent)){
  echo("<br>Access Denied!<br><br>");
  echo(htmlspecialchars($agent));
  exit();
}

 

HTTP 요청 헤드에 사용자의 에이전트 정보를 가져와 $agent 변수에 저장한다.

getenv() 함수를 이용하면 환경 변수를 읽어온다.

 

클라이언트 ip 주소를 $ip에 저장하고

 

preg_match() 함수를 이용해서 가져간 에이전트 정보에 "from"이라는 문자열이 있는지 확인 [대소문자 구분 없이]

포함되어 있음 액세스 거부 시킨다.

 

에이전트 정보에 대한 필터링?인 거 같다 아마도

 

 

 

 

 

 

 

 

$db = dbconnect();
$count_ck = mysqli_fetch_array(mysqli_query($db,"select count(id) from chall8"));
if($count_ck[0] >= 70){ mysqli_query($db,"delete from chall8"); }

$result = mysqli_query($db,"select id from chall8 where agent='".addslashes($_SERVER['HTTP_USER_AGENT'])."'");
$ck = mysqli_fetch_array($result);

if($ck){
  echo "hi <b>".htmlentities($ck[0])."</b><p>";
  if($ck[0]=="admin"){
    mysqli_query($db,"delete from chall8");
    solve(8);
  }
}

 

dbconnect() 함수를 호출해서 db에 연결시킨다.

 

db에 "chall8" 테이블의 레코드 수를 조회한다. [sql에 있는 사용자에 대한 담긴 정보인 거 같다.]

mysqli_fetch_array를 통해서 배열을 가져온다. [레코드를 가져오는 거 같다.]

그걸 $ck에 저장한다.

[이 부분이 쿼리가 직접적으로 실행되는 곳인 거 같다.]

 

"chall8" 테이블의 레코드 수가 70개 이상이면 모든 레코드를 삭제한다.

 

ck 가 0 일 때 즉 'admin' 이면 문제해결이다.

 

 

만약 쿼리의 결과가 없으면 ~

 

 

if(!$ck){
  $q=mysqli_query($db,"insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')") or die("query error");
  echo("<br><br>done!  ({$count_ck[0]}/70)");
}

 

값을 추가하는 형식으로 만드는 거 같다.

 

그래서 처음에 'hi guest'라고 출력된 거 같다.

 

이 부분에서 쿼리에 대한 결과($ck)가 없으면 insert를 이용해서 (agent, ip, id)를 추가하는 거 같다.

 

그러면 이 'insert'를 이용하면 되는 문제인 거 같다.

 

HTTP_USER_AGENT는 HTTP 요청 헤더에 포함되어 있는 정보라 패킷 안에 들어있다.

Burp_suite 사용해서 패킷을 확인해 보자.

 

 

 

 

 

패킷을 보면 User-Agent라고 되어 있다 한번 쿼리문이 반응하는지 실험해 보자.

 

 

 

 

 

반응을 한다.

 

이것으로 SQL INJECTION 이 가능하다는 걸 알 수 있다.

 

 

 

 

 

 

 

 

 

"insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')

 

이 부분을 조작해야 한다.

 

'testuser,'0.0.0.0','admin'),('shield

 

이렇게 값을 대입하면

 

기존의 있던 쿼리문

 

"insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')

 

여기서

 

insert into chall8(agent,ip,id) values('testuser','0.0.0.0','admin'),('shield','{$ip}','guest')

 

이렇게 변하는 것이다.

 

 

 

 

 

 

 

 

 

대입해 보자.

 

 

 

 

 

 

 

 

 

정상적으로 실행된다.

 

 

 

 

 

 

 

그렇다면 testuser 로 agent 값을 넣어보자.

 

 

 

 

 

 

'Wargame > Webhacking.kr' 카테고리의 다른 글

webhacking.kr - old 47  (0) 2024.03.28
webhacking.kr - old 36  (0) 2024.03.28
webhacking.kr - old 21  (0) 2024.03.27
webhacking.kr - old 33  (1) 2024.03.26
webhacking.kr - old 07  (0) 2024.03.22
'Wargame/Webhacking.kr' 카테고리의 다른 글
  • webhacking.kr - old 47
  • webhacking.kr - old 36
  • webhacking.kr - old 21
  • webhacking.kr - old 33
G_OM
G_OM
최대한 설명 열심히 하려고 합니다. 궁금한 거 있으면 언제든지 물어보셔도 좋습니다.
  • G_OM
    끄적끄적
    G_OM
  • 전체
    오늘
    어제
    • 분류 전체보기 (139) N
      • 모의해킹 (8) N
      • Wargame (69)
        • Linux_bandit (33)
        • Webhacking.kr (36)
      • DreamHack (52)
        • WEB (14)
        • Reverising (9)
        • System (0)
        • CTF (22)
      • Android_security (5)
      • 정보보안기사 (2)
      • IT? (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • DreamHack 에 대한 문제들...
  • 인기 글

  • 태그

    drozer
    Linux
    php wrapper
    webhacking
    cookies
    bandit
    Linux wargame
    lfi
    bandit30
    union
    bandit18
    webhacking.kr
    정보보안기사
    wargame
    난독화
    안드로이드
    bandit20
    워게임
    url encode
    리눅스 워게임
    bandit17
    php
    overthewire
    리눅스
    sql injection
    CTF
    Cookie
    Android
    Dreamhack
    insecurebankv2
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
G_OM
webhacking.kr - old 08
상단으로

티스토리툴바