[그림 1]

level 숫자를 달리 하였더니 숫자별로 뭔가 값을 불러 오는것을 확인 했다 소스 코드를 확인하자

[그림 2]

음 불러온 값이 admin이면 해결 되는 문제인거 같다.

preg_match 문자열 비교 함수를 잘 우회해서 해결하면 될거 같다. 몇번의 no hack 표시를 본후 구문을 완성 하였다.

?lv=99%0a%7C%7C%0aid%0alike%0a0x61646d696e

사전에 99는 존재하지 않는 것을 확인하여 lv=99라는 부분은 거짓을 만들어 뒤에 id=admin을 불러오도록 하였다.

char(97,100,109,105,110)을 사용하지 않은 이유는 필터링에 ,(콤마)가 들어어 no hack이 뿜어져 나왔다.

[그림 3]

'Challenge > webhacking.kr' 카테고리의 다른 글

Webhacking 51번 문제 풀이  (0) 2020.02.19
Webhacking 50번 문제 풀이  (0) 2020.02.19
Webhacking 48번 문제 풀이  (0) 2020.02.18
Webhacking 47번 문제 풀이  (0) 2020.02.17
Webhacking 46번 문제 풀이  (0) 2020.02.17

[그림 1]

일단 파일을 올려보았다.

[그림 2]

[uploadfile]과 [Delete]가 있는데 전자는 내가올린 파일을 다운하고  후자는 삭제 하는 일을 수행한다.

무슨 변화가 있나 싶어 test파일을 다운받아서 봐보았지만 안에 플래그가 적혀 있거나 그러지는 않았다.

[그림 3]
[그림 4]

웹쉘 파일 이름에 command를 포함시켜 업로드 하였고 해당 파일을 삭제 하였다. 

'Challenge > webhacking.kr' 카테고리의 다른 글

Webhacking 50번 문제 풀이  (0) 2020.02.19
Webhacking 49번 문제 풀이  (0) 2020.02.18
Webhacking 47번 문제 풀이  (0) 2020.02.17
Webhacking 46번 문제 풀이  (0) 2020.02.17
Webhacking 45번 문제 풀이  (0) 2020.02.17

[브루트 포스]

브루트 포스 일명 무차별 대입 공격은 공격자가 공격 대상에게 무수하게 많은 요청을 보내 하나 맞아 떨어지는 것을 찾아내는 공격 기법이다. 가능한 모든 경우의 수를 검색해 보는 것이기에 이론적으로는 정확도가 굉장히 높다.

여기서 눈 여겨봐야 될 것은 공격자의 컴퓨터 자원이다. 브루트 포스의 경우 병렬 작업이 가능하여 여러대의 컴퓨터 혹은 병렬 프로그래밍 기법을 사용하여 공격에 걸리는 시간을 단축 시킬 수 있다. 

 

브루트 포스 공격은 크게 두가지로 구분 할 수 있다.

1. 자동 부루트 포스 : 무식하게 모든 경우의 수를 전부 대입하는 방법이다.

 

문자열은 0~9 a~z A~Z 그리고 특수 문자들까지 경우의 수를 따져보면 자릿수가 늘어날때마다 기하급수적으로 증가한다.

ex)48^n (n은 자릿수)

 

그렇기에 많은 회원가입 서비스들이 몇자리 이상, 대소문자, 특수문자를 섞어 쓰는 것을 권장한다.

 

이는 단순히 문자열의 복잡성을 증가시켜 브루트 포스의 공격을 완화시키는 방법이지만 효과는 확실하다.

http://howsecureismypassword.net/를 통해 재미삼아 자신의 비밀번호가 얼마나 안전한지 확인 해볼 수 있다.

 

2. 딕셔너리 어택 : 사전에 있는 단어를 순차적으로 대입하는 방법이다.

 

사전에 적힌 문자열을 참조하여 사람들이 많이 사용하는 단어들을 공격에 사용한다.

 

*만약 딕셔너리에서 자신이 사용하는 비밀 번호를 발견한다면 교체하는 것을 권장한다.

 

대응 방법

 

무차별 적인 대입 공격을 컴퓨터는 순식간에 처리해 줌으로 이를 뒷바침해준다. 그렇다면 처리 속도를 의도적으로 늦춰주는 방법은 어떨까?

 

속도를 늦출 수야 있지만 언젠가는 풀리기 때문에 근본적인 해결책은 되지 못한다.

처리 지연 시간이 길면 일반적인 사용자는 피해를 보며 공격자는 공격 성공까지의 시간이 늦춰질 뿐이다.

 

그렇기에 n회 인증 내에 성공하지 못하면 locking이 되는 방식이 도입되었다.

여러 웹 사이트에서 사용 되고 있으면 휴대용 단말기에서도 사용 되고 있다.

Lociking

 

또한 브루트 포스에 한정하여 캡챠도 좋은 방안중에 하나이다.(캡챠도 완벽하지는 않다 우회가 가능 하기 때문이다.)

현재는 많은 대응 방법이 나와있다.

CAPTCHA

갭챠의 새로운 버젼인 리캡챠도 대응 방안의 하나이다.

 ReCAPTCHA

브루트 포스 공격에 대한 대응 방안이기에 완벽히 안전하지는 않다.

 

추후에 이 방법들의 우회도 다루어 보도록 하겠다.

'Basic Concepts > Web' 카테고리의 다른 글

생각날때마다 끄적이는 웹 공격 대응방법  (0) 2020.03.05
XSS (Cross Site Script)  (0) 2020.02.26
meta 태그(meta tag)  (0) 2020.02.25
CSRF(Cross-Site Request Forgery)  (0) 2020.02.25
커맨드 인젝션(Command Injection)  (0) 2020.02.19

[그림 1]

보내봤다.

 

[그림 2]

Mail이 전송되었다는데 나는 얘한테 주소를 알려준적이 없다. 혹시나 해서 가입할때 썼던 이메일로 들어가 보았지만 역시나 없었다.

 

Mail 취약점에 대해 알아보았다.

Text를 사용하여 Cc를 수행하면  참조인에게도 메일이 가는 것을 확인했다. 

[그림 3]

input태그를 textarea로 바꾸어 사용하였다. (Flag뒤에 %0D%0A를 사용해도 된다. CRLF)

 

[그림 4]

'Challenge > webhacking.kr' 카테고리의 다른 글

Webhacking 49번 문제 풀이  (0) 2020.02.18
Webhacking 48번 문제 풀이  (0) 2020.02.18
Webhacking 46번 문제 풀이  (0) 2020.02.17
Webhacking 45번 문제 풀이  (0) 2020.02.17
Webhacking 44번 문제 풀이  (0) 2020.02.14

[그림 1]
[그림 2]

lv을 Get으로 받고 필터링한다. (공백 limit등등...)

 

그에 맞춰서 구문을 짜주면 

 

?lv=99%09or%09id=char(97,100,109,105,110)

char로 변환되어 admin이 된다.

[그림 3]

'Challenge > webhacking.kr' 카테고리의 다른 글

Webhacking 48번 문제 풀이  (0) 2020.02.18
Webhacking 47번 문제 풀이  (0) 2020.02.17
Webhacking 45번 문제 풀이  (0) 2020.02.17
Webhacking 44번 문제 풀이  (0) 2020.02.14
Webhacking 43번 문제 풀이  (0) 2020.02.13

[그림 1]

초기 화면이다,

제출 해보니 hi guest라는 출력과 함께

[그림 2]

get방식으로 전송되는 것이 보인다.

[그림 3]

소스코드를 확인해보자 mb_convert_encoding함수가 무슨 일을 수행하는지 알아보아야 될것 같다.(표준 사용법, 용도, 취약점 등)

 

$result['id'] == "admin" 이면 문제가 풀리는거 같다.

 

"select id from chall45 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')"

이걸 잘 고려해서 Get방식으로 값을 넘겨주면 될 거같다.

(정말 몇시간이 걸렸다...)

 

https://dydgh499.tistory.com/32 를 참조하여 mb_convert_encoding 함수를 이해 하였다.

 

요지는 이 함수는 인코딩 할때 사용되는 함수이며 언어를 바꿔줄 때 사용된다.

멀티바이트를 사용하는 환경에서는 역슬래쉬 앞에 %a1~%fe의 값이 있으면 인코딩이 깨지면서 역슬래쉬를 덮어씌어 2바이트의 멀티바이트를 하나의 바이트 처럼 표현 되도록 하는 것이다! 

ex) addslashes 함수에서 사용된다면 

0x27 -> 0x5c27 -> 0xa15c27 -> 0x27

       '   ->  \'     ->   (\)'    -> '

 

함수 취약점을 이용한 ' 사용방법이다!

싱글 쿼터를 사용할 수 있으니 이제 내 입맛에 맞게 query문을 조작 할 수 있다.

 

"select id from chall45 where id='{$_GET['id']}' and pw=md5('{$_GET['pw']}')"

"select id from chall45 where id='' and pw=md5('  ')"

 

 

id=guest%fe%27%20or%20id%20like%20char(97,100,109,105,110)--%20&pw=guest

[그림 4]

'Challenge > webhacking.kr' 카테고리의 다른 글

Webhacking 47번 문제 풀이  (0) 2020.02.17
Webhacking 46번 문제 풀이  (0) 2020.02.17
Webhacking 44번 문제 풀이  (0) 2020.02.14
Webhacking 43번 문제 풀이  (0) 2020.02.13
Webhacking 42번 문제 풀이  (0) 2020.02.13

+ Recent posts