세 션 사기 구 조 를 이용 한 가장 은밀 한 WebShell

부지불식간에'LM 패 거 리 는 흑 방 을 보 는 것 이 이미 봄 과 가을 이 되 어 기한 이 늦 지 않 았 다.이렇게 오랫동안 열심히 수련 했 는데 도 한두 수 를 쓰기 시작 할 수 있 게 되 었 다.흑 방 2 기'드 림 위 버:사 이 버 위기'라 는 글 을 보고'LM 패 거 리 는 속 으로 는 말 할 수 없 는 설 렘 을 느 꼈 다.인터넷 홈 페이지 의 40%가 이런 구멍 이 있다 고 생각 했다.그러면 또 N 다 육 계 를 수확 할 수 있 지 않 을 까.그러나 자세히 연구 한 결과 이 글 의 방법 에 문제 가 있 고 생각 보다 쉽게 발휘 되 지 않 는 다.다음은 여러분 과 함께 세 션 을 토론 하 겠 습 니 다. 
세 션 사기 얘 기 라면 세 션 이 무엇 인지,어떻게 일 하 는 지 살 펴 보 자.ASP 에서 서버 는 세 션 대상 을 통 해 서로 다른 브 라 우 저 를 구분 할 수 있 습 니 다.세 션 대상 은 브 라 우 저 쪽 의 변 수 를 기록 하고 사용자 이름 등 민감 하거나 유용 한 정 보 를 저장 하기 때 문 입 니 다.이 점 은 쿠키 와 비슷 한 것 같 습 니 다.그러나 쿠키 의 값 은 클 라 이언 트 에 저 장 된 것 이 고 Session 의 값 은 서버 에 저 장 된 것 을 알 고 있 습 니 다.모든 방문 자가 서버 의 ASP 웹 페이지 를 처음 방문 할 때 서버 는 그 에 게 새 롭 고 독립 된 Session 대상 을 만들어 주 고 이 세 션 에 세 션 표지 번 호 를 할당 하 며 세 션 식별 자 를 포함 한 특수 암호 화 버 전의 Cookie(세 션 표지 번호)를 고객 에 게 보 냅 니 다.쿠키(세 션 표시 번호)에서 Expires 값 을 제공 하지 않 았 기 때문에 브 라 우 저가 닫 히 면 이 세 션 표시 번호 도 사라 집 니 다. 
사용자 가 이 ASP 사 이 트 를 방문 할 때마다 ASP 는 브 라 우 저 를 통 해 이 세 션 의 표지 번 호 를 찾 습 니 다.ASPSESSIONIDxxxxxxxxxx 라 고 명명 되 었 는데,그 중 x 는 알파벳 이다.우 리 는 수신 가방 을 잡 을 때 볼 수 있다. 
Set-Cookie: ASPSESSIONIDSQBBQQDS=GCINNKPDIGDNPEAOGLDFFFEM; path=/ 
그러나 이 쿠키(세 션 표시 번호)는 Request.Cookies 나 Respsones.Cookies 집합 에 나타 나 지 않 습 니 다.ASP 가 숨 겼 지만 브 라 우 저 에 저 장 됩 니 다.모든 ASP 웹 페이지 의 요청 에 대해 ASP 는 이 값 을 확인 해 야 합 니 다.이 쿠키(세 션 표시 번호)에 포 함 된 값 은 이 사용자 의 세 션 을 가 리 킵 니 다.따라서 해당 세 션 대상(이 대상 은 메모리 에 있 으 며 이전 페이지 요청 과정 에서 초 작 동 하 는 모든 값 을 포함 하고 있 습 니 다)의 내용 을 ASP 페이지 에 넘 길 수 있 는 스 크 립 트 입 니 다.즉,브 라 우 저 엔 드 는 서버 가 할당 한 세 션 ID 번 호 를 가지 고 있 습 니 다.요청 이 있 을 때 서버 는 이 ID 번 호 를 통 해 해당 세 션 대상 의 값 을 찾 을 수 있 고 서로 다른 브 라 우 저 를 구분 할 수 있 습 니 다. 
활용 단어 참조 
문필 이 좋 지 않 아 앞의 원리 부분 에서 세 션 에 대한 인식 이 어느 정도 있 었 는 지 모르겠다.이제'드 림 위 버 사 이 버 위기'라 는 글 이 세 션 세 션 세 션 세 션 을 어떻게 활용 하 는 지 살 펴 보 자. 
이미 한 사이트 abc.com 이 있 습 니 다.아래 에 로그 인 페이지 가 있 습 니 다.Login.asp,로그 인 에 성공 하면 민감 한 정 보 를 볼 수 있 는 OK.asp(방문 제한 이 있 고 검증 이 통과 되면 표시)로 전환 합 니 다.그렇지 않 으 면 Fail.asp 로 전환 합 니 다. 
이 글 에서 저 자 는 먼저 hack.asp 의 웹 페이지 를 만 들 고 이 웹 페이지 를 방문 하여 Session 세 션 을 만 들 고 Session 검증 에 필요 한 값 을 설정 한 다음 주소 표시 줄 에 로그 인 한 웹 페이지 ok.asp 를 직접 입력 하려 고 합 니 다.ok.asp 는 Session 을 통 해 검증 되 기 때문에 저 자 는 이렇게 성공 할 수 있다 고 생각 합 니 다.그러나 앞의 분석 을 통 해 알 수 있 듯 이 ok.asp 와 hack.asp 가 같은 서버 에 없 으 면 이런 공격 은 실 현 될 수 없다.세 션 대상 의 값 은 서버 에 남아 있 기 때문에 작성 자가 말 한 것 처럼 ASP 를 실행 시 키 고 IE 에 세 션 값 을 남 길 수 없습니다.IE 가 가지 고 있 는 것 은 세 션 의 세 션 표지 번호 에 불과 합 니 다.만약 에 우리 가 이 컴퓨터 나 다른 서버 에서 hack.asp 를 탐색 했다 면 설 정 된 인증 치 는 hack.asp 가 있 는 서버 에 있 지만 ok.asp 가 있 는 서버 에 해당 하 는 인증 치 를 설정 하지 않 았 고 Session 세 션 도 만 들 지 않 았 는데 어떻게 검증 을 통과 합 니까?이 를 통 해 알 수 있 듯 이 ok.asp 와 hack.asp 가 같은 서버 에 없 으 면 네트워크 위 기 를 일 으 키 지 않 을 것 이다. 
하지만 우 리 는 이런 세 션 사기 방법 을 통 해 침입 후 자신 에 게 쉽게 죽 일 수 없 는 뒷문 을 남 길 수 있다!마 이 파워 파워 파워 3.5 를 예 로 들 어 세 션 사 기 를 통 해 백 스테이지 에 직접 접속 하 는 방법 을 보 여 준다. 
먼저 동력의 소스 코드 를 살 펴 보 겠 습 니 다.Admin 에 있 습 니 다.ChkPurview.asp 의 세 션 검증: 
AdminName=replace(session("AdminName"),"'","") 
if AdminName="" then 
call CloseConn() 
response.redirect "Admin_login.asp" 
end if 
sqlGetAdmin="select * from Admin where UserName='" & AdminName & "'" 
이 를 통 해 알 수 있 듯 이 동력 은 Session 대상 의 Admin Name 변 수 를 통 해 인증 되 고 사용자 이름 으로 데이터 베 이 스 를 조회 하 며 Admin Name 의 최초 할당 값 은 Admin 입 니 다.ChkLogin.asp 에서 사용자 가 로그 인 에 성공 하면 두 개의 Session 값 을 드 립 니 다. 
session.Timeout=SessionTimeout 
session("AdminName")=rs("username") 
로그 인 후 세 션 대상 을 통 해 검 측 되 기 때문에 저 희 는 방문 할 수 있 는 모든 ASP 페이지 에서 다음 과 같은 문 구 를 구성 할 수 있 습 니 다(예 를 들 어 Copyright.asp). 
<%session("AdminName")="admin"%> 
이렇게 하면 AdminChkPurview.asp 의 Session 이 검증 되 었 습 니 다.그 중에서 Admin 은 존재 하 는 관리 사용자 이름 을 가리킨다.이렇게 구 조 된 후에 우리 가 육계 에 있 는 모든 목마 가 조사 되 더 라 도 관리자 의 사용자 이름 이 변경 되 지 않 으 면 우 리 는 먼저 Copyright.asp 를 방문 한 다음 에 Admin 을 직접 입력 할 수 있 습 니 다.Index.asp 는 바로 백 스테이지 에 로그 인 할 수 있 습 니 다! 
그렇다면 이런 상황 을 어떻게 예방 할 것 인가?사실 동력 도 일정한 방법 을 사 용 했 습 니 다.이런 방법 으로 다른 배경 페이지 를 입력 하면 성공 할 수 없다 는 것 을 알 게 될 것 입 니 다.이것 은 AdminChkPurview.asp 는 다음 과 같은 검증 이 있 습 니 다. 
ComeUrl=lcase(trim(request.ServerVariables("HTTP_REFERER"))) 
if ComeUrl="" then 
response.write "
맞 출 수 없습니다.시스템 안전 을 위해 주 소 를 직접 입력 하여 이 시스템 의 배경 관리 페이지 에 접근 할 수 없습니다.


response.end 
else 
cUrl=trim("http://" & Request.ServerVariables("SERVER_NAME")) 
if mid(ComeUrl,len(cUrl)+1,1)=":" then 
cUrl=cUrl & ":" & Request.ServerVariables("SERVER_PORT") 
end if 
cUrl=lcase(cUrl & request.ServerVariables("SCRIPT_NAME")) 
if lcase(left(ComeUrl,instrrev(ComeUrl,"/")))<>lcase(left(cUrl,instrrev(cUrl,"/"))) then 
response.write "
맞 을 수 없습니다.시스템 안전 을 위해 외부 링크 주소 에서 이 시스템 의 배경 관리 페이지 에 접근 할 수 없습니다.


response.end 
end if 
end if 
하지만 AdminIndex.asp 페이지 에서 Admin 이 호출 되 지 않 았 습 니 다.ChkPurview.asp,그래서 우 리 는 검증 을 통과 할 수 있 습 니 다!근 데 왜 안 돼 요?나한 테 묻 지 마,직접 해 보면 알 아. 
후기 
브 라 우 저 를 닫 으 면 세 션 을 끝 낼 수 있다 는 것 을 알 고 있 지만 서버 가 할당 한 세 션 표지 번호 만 잃 어 버 렸 습 니 다.세 션 세 션 의 수명 주기 가 끝나 기 전에 서버 는 세 션 표지 번호 에 대응 하 는 세 션 값 을 메모리 에서 삭제 하지 않 습 니 다. 
지식:일반 IIS 의 Session 수명 주 기 는 기본적으로 20 분 입 니 다. 
이 원 리 를 이용 하여 다른 브 라 우 저 를 통 해 서버 에 로그 인 할 때 만 든 Session 세 션 표지 번 호 를 일정 경 로 를 통 해 얻 었 다 면.그러면 우 리 는 이 세 션 표지 번호 로 피 랍 브 라 우 저 측 과 같은 권한 을 얻 을 수 있 습 니 다.만약 에 관리자 가 백 엔 드 에 로그 인 한다 면 우 리 는 다른 컴퓨터 에서 이 세 션 표지 번 호 를 사용 하여 Session 사 기 를 통 해 백 엔 드 에 로그 인 할 수 있어 서 타지 의 공격 을 실현 할 수 있 습 니 다.구체 적 인 방법 은 흑 방 포럼 에 가서 토론 하 는 것 을 환영한다. 
글 에 누락 이 있 으 면 형제 에 게 지적 해 주 십시오.어떤 형제 가 더 좋 은 이용 방법 이 있 으 면 함께 공유 하 는 것 을 환영 합 니까?

좋은 웹페이지 즐겨찾기