2022 스터디

[web hacking] 2022

EYR 2023. 11. 3. 14:39

이 글은 작년 진행했던 웹 해킹(보안) 스터디 백업본입니다.

주로 write up 으로 이루어져 있습니다.

 

워게임 등의 문제 답과 풀이가 나와있기 때문에 열람에 주의하시길 바랍니다.

 

 

1) webhacking 44번 문제

더보기

Challenge 44                           webhacking 44번 문제

 

1)    코드분석

system("echo 'hello! {$id}'"); // You just need to execute ls

이 코드를 우회시켜 ls 명령어를 실행시키면 된다라고 나와있다.(힌트)

본래는 그저 넣은 문장을 echo로 내보내는 코드이다.

단, $id = substr($id,0,5); 를 주의해야 한다. 5글자까지만 입력이 가능하다.(substr문자열 자르기)

2)    문제 풀이 방향

- escapeshellcmd() 등으로 우회되어 있지 않기 때문에 단순히 command 공격을 하면 될 것 같다. 한 문장에 여러 명령을 하는 식으로

3) 문제 풀이

system("echo 'hello!‘;’ls'");

‘;’ls // 딱 다섯글자…

("echo

'hello!‘;

’ls'

");

이렇게 코드가 두 부분으로 나뉘어서 실행되게 된다.

앞쪽은 hello에 대한 (원래 구문) 이고 뒤쪽이 ls에 대한 응답이다

flag와 index.php 두 파일이 있는데 index.php는 현 주소의 php 파일이니 신경 안 써도 된다.

 

주소를 이동하면 답이 나온다.(flag)

 

 

 

 

2. webgoat XXE 3번문제

더보기

http://localhost:8080/WebGoat/start.mvc#lesson/XXE.lesson/3

 

0)    문제 개요

root 디렉토리의 파일 리스트를 출력하라는 문제.

 

1)    코드분석

 

버프스위트로 받은 에플리케이션단의 패킷

보면 Content-Type: application/xml

<?xml version="1.0"?><comment>  <text>a</text></comment> *XML 선언

등에서 xml을 이용하고 있는 걸 알 수 있다.

 

2)    문제 풀이 방향

1.     DTD 생성 (외부 엔티티는 DTD 내에 선언되어야 하기 때문에)

<!DOCTYPE XXE [

2.     외부 엔티티 선언

<!ENTITY root SYSTEM 'file:///'> *외부의 경로를 가진 root(이곳부터 파싱을 시작한다던데 이 공격에선 이름을 무엇으로 하든 상관이 없다.) **SYSTEM 키워드는 외부 엔티티를 선언하기 위해 사용하는 키워드(요소의 타입)

]>

 

3.     덧글창처럼 눈에 보이는(블라인드가 아님) 상황이기 때문에 그 덧글창에 선언한 객체를 불러오도록 한다.

 

3)    문제 풀이

다음과 같이 입력해 공격해주면

success가 뜬다.

덧글창엔 디렉토리의 모습이 보이게 된다.

 

 

 

 

3. webhacking.kr 14/15/24/49

더보기
  1. old-14

 

코드 해석

 

13 - ul의 값, 본 URL (https://webhacking.kr/challenge/js-1/)

14 - ul의 값, .kr의 index (18)

15 - ul의 값, ul*30

 

pw는 18*30 = 540

 

 

  1. old-15

getFlag에 Flag 값이 존재

 

  1. old-24

ip의 값이 127.0.0.1이면 해결된다.

 

$REMOTE_ADDR 라는 값을 수정해주면 된다

 

127.0.0.1

하지만 12 -> 

7. -> 

0. -> 

으로 변환되기 때문에

 

112277. .. 00. .. 00. .. 1

여기서 지워지는 부분은 빨강, 이걸 빼보면

 

127.. 0.. 0..1

이 된다

..은 .으로 변경되기 때문에

127.0.0.1이 된다.

 

  1. old-49

 

if(preg_match("/select|or|and|\(|\)|limit|,|\/|order|cash| |\t|\'|\"/i",$_GET['lv'])) exit("no hack");

>검증문 부분

 

"/select|or|and|\(|\)|limit|,|\/|order|cash| |\t|\'|\"/i" >이게

$_GET['lv'] > 이 안에 들어있는지 검증 (lv에 들어가는 사용자 입력값이다.)

-select

-or

-and

-\

-() 괄호도 막힌듯



$result = mysqli_fetch_array(mysqli_query($db,"select id from chall49 where lv={$_GET['lv']}"));

>안쪽 쿼리문

 

echo $result[0] ;

    if($result[0]=="admin") solve(49);

>level(lv)의 결과가 admin(id) 이면 성공

 

lv5 에 해당되는 결과는 존재하지 않는다 (그 이후로도 한동안 존재하지 않는듯.)

 

select id from chall49 where lv=5 || id = “admin”

 

인데 “”eh ‘’도 막혀있다.






'2022 스터디' 카테고리의 다른 글

java 스터디 사전조사  (0) 2023.05.14
[2023] 스택/큐  (0) 2023.03.13
넘파이 스터디 20230308  (0) 2023.03.08
JAVA 스윙 공부  (0) 2022.11.10
js 스터디 - 2주차  (0) 2022.04.15