본문 바로가기

1. 이번에도 학교에서 포스터가 뜸.

2. 역시 이번에도 경험치 먹어야되니 신청함.

3. 역시 이번에도 같이나갈 사람이 없음.

4. 이젠 그냥 그러려니 하고 나감.

 

5. ㅇㅇ 최종 9등함

 

6. 시작부터 대충 6시간은 삽질한듯.

7. 웹문제 HTML에 FLAG 있는거 못보고 다른 취약점 쑤시고다녔으니

 

8. ????: 어 이거 왜 파일 다운로드됨?

9. ????: 어 이게 소스코드가 다운로드되네ㅋㅋ

10. ????: 어 이게 필터 안되있네ㅋㅋ

11. ????: 이야 이게 웹쉘이 올라가네ㅋㅋ

12. ????: 근데 왜 FLAG 작동안하냐????

 

13. 알고보니 첫페이지에 FLAG 들어있는거였음ㅋㅋ

14. 아무튼 취약점가지고 로그인페이지 소스코드를 얻어서 로그인부분에 SQLI 하라는거 무시하고 다음으로 넘어감

15. 그거때문에 문제 하나 못품ㅋㅋㅋㅋㅋㅋㅋㅋ

16. 아니 관리자페이지에 접근하라면서 접근했는데 왜 FLAG가 안나오냐

17. 아마도 admin 계정 password가 FLAG였을거임

18. 아님말고

 

19. 노가다 하는 문제 있었음.

20. 대충 3000번인가 압축해놓은 이상한 파일 있는데 그거 압축 다풀면 FLAG 나옴.

21. 근데 푸는법 몰라서 매크로만들어서 품.

 

22. 포렌식 하는 문제 2개 있었음.

23. 하나는 그냥 확장자 없는 파일 던져줬음.

24. 헤더 보니깐 풀리더라.

 

25. 다른 하나는 docx 파일 던져줬음.

26. 이게 뭐냐 싶었는데 힌트 올라옴.

27. ooxml hider이랬음.

28. 급하게 구글 뒤져서 ooxml 이 뭐냐 docx 파일은 어떻게 생겼나 등등 다 벼락치기함.

29. 근데 찾아보니깐 2013 코드게이트에 저거랑 완전 똑같은 문제가 있더라.

30. 그거 롸업보고 품.

31. ㄹㅇ 완전 똑같이 풀리더라

 

32. 또 문제 뭐있더라

33. 기억안남

 

34. 암튼 다끝나고 기숙사 올라가는데 문 안열어줘서 1시 넘어서잠.

35. 아직도 피곤해서 몸떨림.

36. 머리도 터질거같음

37. CTF뛸때마다 수명 줄어든다는건 진짜인거같음.

38. 살려주셈

'????' 카테고리의 다른 글

박제봇 유입 왜이럼?  (0) 2021.03.11
NOE.systems 복구됨  (0) 2021.03.09
wargame.kr lazy judge  (0) 2020.10.27
후 복구됬나  (0) 2020.09.24
아니 왜 이거 스킨 초기화됨?  (0) 2020.09.24
댓글

이런저런 소스코드들을 뜯어보다보니 잘못하면 대형사고 나게끔 만들어진게 여러개 있더라고요.

그래서 그냥 비정기 간행물 식으로 이런거 하지 마세요 하는거 보여줄거에요.

 

아무튼 여기에 평범한 어드민 로그인창이 있어요.

 

미리 준비해둔 유저권한 계정을 이용해서 로그인을 해보면

 

id는 평문, pw는 sha512 해시를 돌려서 JSON으로 묶어서 날리게 되요.

혹시나 해서 하는말이지만

PW를 해싱해서 request 보내니깐 중간에서 가로채도 원래 비밀번호가 뭔지 모르겠지!! 히히

하다가 혼나요.

저런식으로 보내면 DB에 들어있는건 해시일거니깐 평문을 몰라도 상관없거든요.

또, 해싱해서 보내니깐 pw에 a' or 1=1# 같은거 넣어도 해싱되니 작동 안하겠지!! 히히

하면서 SQLI 안막아놔도 혼나요.

 

아무튼 로그인을 시도하면

 

1. 클라이언트에서 ID/PW를 전송함.

2. 서버에서 ID/PW를 받고 쿼리를 돌림.

3. 결과를 클라로 전송.

4. 결과의 accessLevel 컬럼을 바탕으로 로그인 가능여부를 파악.

 

이 되도록 되어있는데

 

뭔가 이상하지 않아요?

이미 토큰 받았는데 클라이언트에서 못넘어가게 하는거잖아요.

 

그러니 그냥 결과의 accessLevel 을 변조해버리면

 

그대로 다음으로 넘어가면서

 

개인정보를 싹 빼돌린다든지 할 수 있는거죠.

 

그러면 저걸 어떻게 막아야 할까요?

Query OK 뜨고 accessLevel 이 admin 의 것일경우에만 결과를 클라로 보내준다든지 하면 되겠죠?

 

???? : 난 이렇게 안짜는데요?

아님 말고요.

댓글

LUNE

2020. 11. 6. 16:18

 

m2u & nicode - lune

이것도 띵곡임

'디자인' 카테고리의 다른 글

4L || AB Project  (0) 2023.03.07
무언가  (0) 2021.10.14
4lab  (0) 2020.10.23
폰케이스 만들거임  (0) 2020.10.22
Per Ardua Ad Astra  (1) 2020.10.07
댓글

19번 문제에요.

배점은 376점, 이름은 ip log table 이에요.

 

ip log table

 

Blind SQLi challenge.

You can use 'Ascii' to 'Date'

 

이름에 맞게 테이블이 있어요.

그리고 아무거나 하나를 눌러보면

 

시간이 떠요.

 

POST로 idx를 넘겨주는 방식이네요.

 

저기에다가 구문을 넣어보면?

 

IP log time : 1970-01-01 09:01:12

count(table_name)유닉스 타임스템프로 변환되서 튀어나오네요.

09:01:12 니까 테이블이 72개 있다는 말이겠네요.

 

아무튼 이런식으로 첫번째 테이블의 길이를 알아내보면

 

11글자래요.

이제

idx=0 union select ascii(substr(table_name,1,1)) from information_schema.tables limit 0,1%23

같은식으로 테이블 이름을 뽑아내는 노가다를 하면 되겠네요.

왜 where절 안쓰냐고요? 막혀있던데요?

 

A

 

L

 

L

 

_

 

P

 

L

 

U

 

G

 

I

 

N

 

S

 

ALL_PLUGINS

같은식으로 테이블을 찾으면 되요.

 

근데 왜 실패냐고요?

 

이게

 

왜 안될까요?

'연구글 > ????' 카테고리의 다른 글

코드 이렇게 짜지 마세요 - 2  (0) 2021.07.16
코드 이렇게 짜지 마세요 - 1  (0) 2020.11.17
SQL Injection 필터 우회 정리글  (0) 2020.08.25
dodam.b1nd.com / stored xss  (0) 2020.08.23
webhacking.kr 30 (old) / 실패  (0) 2020.08.22
댓글

18번 문제에요.

배점은 362점, 이름은 SimpleBoard 네요.

 

SimpleBoard

 

Simple Union SQL injection Challenge.

 (but you need script... maybe?)

 

문제 이름에 맞게 BBS가 있어요.

소스코드를 보면

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?php
    if (isset($_GET['view-source'])){
        if (array_pop(split("/",$_SERVER['SCRIPT_NAME'])) == "classes.php") {
            show_source(__FILE__);
            exit();
        }
    }
    Class DB {
        private $connector;
        function __construct(){
            $this->connector = mysql_connect("localhost""SimpleBoard""SimpleBoard_pz");
            mysql_select_db("SimpleBoard"$this->connector);
        }
        public function get_query($query){
            $result = $this->real_query($query);
            return mysql_fetch_assoc($result);
        }
        public function gets_query($query){
            $rows = [];
            $result = $this->real_query($query);
            while ($row = mysql_fetch_assoc($result)) {
                array_push($rows$row);
            }
            return $rows;
        }
        public function just_query($query){
            return $this->real_query($query);
        }
        private function real_query($query){
            if (!$result = mysql_query($query$this->connector)) {
                die("query error");
            }
            return $result;
        }
    }
    Class Board {
        private $db;
        private $table;
        function __construct($table){
            $this->db = new DB();
            $this->table = $table;
        }
        public function read($idx){
            $idx = mysql_real_escape_string($idx);
            if ($this->read_chk($idx== false){
                $this->inc_hit($idx);
            }
            return $this->db->get_query("select * from {$this->table} where idx=$idx");
        }
        private function read_chk($idx){
            if(strpos($_COOKIE['view'], "/".$idx!== false) {
                return true;
            } else {
                return false;
            }
        }
        private function inc_hit($idx){
            $this->db->just_query("update {$this->table} set hit = hit+1 where idx=$idx");
            $view = $_COOKIE['view'] . "/" . $idx;
            setcookie("view"$viewtime()+3600"/SimpleBoard/");
        }
        public function get_list(){
            $sql = "select * from {$this->table} order by idx desc limit 0,10";
            $list = $this->db->gets_query($sql);
            return $list;
        }
    }
 
cs

이렇게 생겼어요.

대충 쿠키에 "/" . $idx

가 존재하면 값을 읽어오고 아니면 에러를 띄우게 되어있는것같네요.

이것때문에 스크립트가 필요하다고 한걸까요?

 

아무튼 1번글을 누르면

readme.php?idx=1

로 이동하긴 하네요.

그리고 쿠키도 구워지고요.

저기에 구문을 집어넣으려면

 

이런식으로 쿠키까지 구워야 된다는거네요.

 

쿠키를 굽고 구문을 넣으면

작동해요.

 

아무튼 information_schema.table 와 limit를 사용해서 수상한 테이블을 찾아야되는데

limit 0,1

떡하니 README 라는게 튀어나오네요.

보통 이런거 가장 끝에 있던데

:thinking:

 

아무튼 column_namelimit 0,1 를 써서 뽑아내면

flag 네요.

너무 정직한 이름들이네요.

 

아무튼 flag를 읽어보면

6b09d887003faff2a39164a8c632280b68524756

 

빠밤!

 

키가 나왔네요.

 

뭐야 이게

'연구글 > wargame.kr' 카테고리의 다른 글

wargame.kr 17 / pyc decompile  (0) 2020.11.03
wargame.kr 16 / web chatting  (0) 2020.11.02
wargame.kr 14 / php? c?  (0) 2020.10.27
wargame.kr 13 / img recovery  (0) 2020.10.26
wargame.kr 12 / type confusion  (0) 2020.10.23
댓글

17번 문제에요.

배점은 356점, 이름은 pyc decompile 네요.

 

pyc decompile

 

bughela.pyc

:D

 

일단 시작하기전에 .pyc 파일이 뭐냐면요...

python을 컴파일 해놓은 파일이에요.

 

암튼 들어가보면 서버시간과 파일이 있네요.

다운로드 받아서

 

.pyc 디컴파일러를 쓸거에요.

EasyPythonDecompiler.exe

구글링하면 쉽게 찾으실거에요.

암튼 저걸로 디컴파일 해보면

 

이런 코드가 나와요.

대충 현재시간을 가지고 해시를 만들어서 서버시간이랑 비교하는거같은데...

위에서 준 서버시간이 현재시간이랑 다른네요?

 

서버시간이 115초 빠르니깐

 

지금시간에 115초를 더한만큼의 시간으로 해시를 만들어서 돌려보면?

 

해시가 떠요.

 

저걸 ?flag= 에 집어넣어보면?

 

Congratulations!!

Flag is c642ec3384fdd7795279dddb594cbe38b47d969e

 

빠밤!

 

문제가 풀렸네요.

'연구글 > wargame.kr' 카테고리의 다른 글

wargame.kr 18 / SimpleBoard  (0) 2020.11.04
wargame.kr 16 / web chatting  (0) 2020.11.02
wargame.kr 14 / php? c?  (0) 2020.10.27
wargame.kr 13 / img recovery  (0) 2020.10.26
wargame.kr 12 / type confusion  (0) 2020.10.23
댓글

16번 문제에요.

배점은 341점, 이름은 web chatting 이에요.

왜 갑자기 16번이냐고요?

리버싱은 사람이 하는거 아니거든요.

ㅈㅅ

 

아무튼

 

web chatting

 

Simple SQLi Challenge.

How can I set in order to reduce the traffic?

Please try looking at a developer's perspective.

 

아무튼 이름 입력부분이 있어요.

 

아무거나 입력하고 넘어가보면 역시나 채팅창이 있어요.

 

아무거나 넣고 엔터를 누르면

 

채팅이 기록되요.

 

이상한 request와 함께요.

 

그러니 저길 직접 들어가보면?

 

방금 입력했던 내용이 있어요.

 

저 뒤의 숫자를 조작해보니

 

이전사람이 쳐둔 채팅이 있네요.

 

저기에다가 구문을 넣어보면

 

정상적으로 작동해요.

 

그러니 저기에

union select 를 넣어서 컬럼의 숫자를 찾아보면?

 

컬럼의 숫자가 5개네요.

 

그런데 where 절을 사용할수 없으니 limit로 테이블명을 찾아내볼거에요.

information_schema 의 뒷부분에 유저가 생성한 테이블들이 있더라고요.

그러니 길이를 알아내고 가장 뒤에서부터 읽어서 수상한 데이터는 전부 확인해두는식으로 했어요.

 

그렇게 table_name 를 찾아보니

chat_log_secret

네요.

 

같은방법으로 column_name 도 찾아보면

readme

 

그러니 select readme from chat_log_secret 를 넣어보면?

 

2 (5..*.) : e32f1efb1a17572a6388229248d181f1be866ae0

 

빠밤!

 

키가 나왔네요.

'연구글 > wargame.kr' 카테고리의 다른 글

wargame.kr 18 / SimpleBoard  (0) 2020.11.04
wargame.kr 17 / pyc decompile  (0) 2020.11.03
wargame.kr 14 / php? c?  (0) 2020.10.27
wargame.kr 13 / img recovery  (0) 2020.10.26
wargame.kr 12 / type confusion  (0) 2020.10.23
댓글