현재 그누보드 기본 kcaptcha 문제점 정보
현재 그누보드 기본 kcaptcha 문제점본문
스팸글이 계속해서 올라오길레
kcaptcha 가 어떻게 보여주고 있나 한번 살펴 보았습니다.
1. /bbs/board.php?bo_table= 게시판 호출
2. /bbs/write.php?bo_table= 글쓰기 화면 호출
3. /bbs/kcaptcha_session.php kcaptcha_keystring 생성
4. /bbs/write.php?bo_table=humor 광고글 글쓰기
이렇게 요청이 들어오더군요.
1. 요청시작
2. 이전 요청 3초 후
3. 이전 요청 1초 후
4. 이전 요청 8초 후
이렇게 주기적으로 들어오고요.
write_update.php 할때
skin=miso
pskey=pskey
hidden_key=83850
tcheck=83850
wr_key=83850
이런 변수가 같이 넘어옵니다. 83850은 kcapchar_string 이었고요.
브라우저 동작을 반복하는 매크로가 아닌
socket 통신을 사용한 봇으로 생각됩니다.
그런데 이상한 점은 /bbs/kcaptcha_image.php 가 없습니다.
즉 kcaptcha 이미지를 분석하는게 아니라
이미지를 읽지도 않고 글을 쓰더란 말입니다.
그래서 조금 더 살펴보니까
bbs/kcaptcha_session.php 요청시 해당 captcha_keystring 를 md5 hash로 return 하고요.
if (typeof(f.wr_key) != 'undefined')
{
if (hex_md5(f.wr_key.value) != md5_norobot_key)
{
alert('자동등록방지용 글자가 순서대로 입력되지 않았습니다.');
f.wr_key.select();
f.wr_key.focus();
return false;
}
}
이런 코드에서 사용하고 있는 것을 보았습니다.
현재 그누보드 기본 kcaptchar 에 의하면
keystring이 숫자로 된 기본 값이고 5~6자리 밖에 안되니까
미리 다 생성해서 테이블 구축해놓고
md5 hash 값으로 원본 string 찾는 것은 일도 아닌 것이죠.
즉 봇 막으려고 javascript에서 넣은 코드 값 때문에
오히려 이미지 파싱도 안하고 return 하게 되었던 것입니다.
(정확히는 사용자 실수 방지에 가깝지만요)
어떻게 하는게 보다 근본적인 해결책이 될지는 잘 모르겠습니다만
각각의 사이트마다 대응책은 있으나
그누 공식 패치에 들어갈 방법이 뭐가 적당할지 모르겠네요.
각 사이트마다 대응책은
1. kcaptchar_string을 뿌려주지 않는다
bbs/kcapcha_session.php 에서
// echo md5($captcha->getKeyString()); 를 주석처리하고요
write.skin.php 에서도 체크를 빼야곘죠.
// if (typeof(f.wr_key) != 'undefined') { 이 부분을
// if (0 && typeof(f.wr_key) != 'undefined') { // 이렇게 고쳐 동작하지 않도록 하는겁니다.
사용자가 잘못 입력하였을 경우
페이지 전송 전에 javascript로 체크하는 부분이 빠지므로 조금 불편해질 수는 있는데
현재로선 그나마 가장 괜찮은 해결책 같습니다.
2. md5 말고 다른 알고리즘이라든가 salt를 섞는다
bbs/kcapcha_session.php 에서
echo md5($captcha->getKeyString()); 를
echo md5($captcha->getKeyString() . 'my_secret_code');
로 바꾸고
write.skin.php 에서
if (hex_md5(f.wr_key.value) != md5_norobot_key) { 를
if (hex_md5(f.wr_key.value+'my_secret_code') != md5_norobot_key) {
로 바꿉니다.
일단 해결책은 될것 같으나 암호화 방법을 javascript 코드에 써줘야 한다는 점에서
봇 코드를 고치면 되니까 어쩔수 없고요.
3. kcaptchar_config 에서 $allowed_symbols 를 숫자 이외에 다른 글자도 넣는다.
조금 더 불편해지고 경우의숫자가 많아지긴 하겠지만
이것도 스팸 돌리는 쪽에서 md5_hash DB 다 구축해버리면 답이 없긴 하고요.
그래도 적용해주는 것이 좋지 않을까 싶기도 하네요
0
댓글 3개

지금은 패치가 되었으며 만족할만한 효과를 얻고 있습니다.
http://sir.co.kr/bbs/board.php?bo_table=g4_pds&wr_id=5812
혹시 최신패치에서도 문제가 되는것인지요?
감사합니다. ㅠㅠㅠ
뒷북 작렬 했군요.
그래도 꽤 최근에 받고 설치한 녀석에 문제가 되어서 보고있었던건데 OTL

자세한 분석 감사합니다.
포럼으로 복사하도록 하겠습니다.