일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- authentication bypass
- 악성코드 분석
- MALWARE
- really simple security plugin
- cve-2024-27954
- wp-automatic plugin
- XSS
- 모의해킹
- nmap
- broken access control
- LPE
- DLL Injection
- pentesting
- 1-day analysis
- cve-2024-2242
- Command Injection
- Burp Suite
- cve-2024-27956
- Stored XSS
- rce
- SQL Injection
- kioptrix
- cve-2024-10924
- 악성코드
- cve-2024-5084
- cve-2024-4439
- plugin
- wordpress
- 리버스 쉘
- wp-automatic
- Today
- Total
목록분류 전체보기 (96)
Psalm

perl로 작성된 웹서버가 1616포트로 실행되고 있다. username과 password를 입력받는다. 여기서 중요한점은 username에 command injection이 가능하다는 것이다. 웹서버는 flag16권한으로 실행되고이음으로 명령어를 flag16 권한으로 실행시킬 수 있다. tmp폴더에 파일 하나를 생성해주고, cp /bin/sh ./; chmod u+s sh를 입력해준다. 그 후 파일에 실행권한을 준다. 그리고 웹 서버에 접속해 username에 `/*/FLAG`를 입력해주면 아까 만든 쉘 파일이 실행된다.(/*/: 모든 경로에서 탐색한다는 의미) 그리고 flag16폴더에 가보면 setuid가 걸린 sh파일이 생성되고, 실행시키면 flag16권한을 획득할 수 있다.

바이너리를 실행하니 strace를 쓰라고 나온다. strace로 바이너리를 살펴보면 /var/tmp/flag15의 하위디렉토리를 검색하면서 libc.so.6 파일을 찾으려고 한다. 몇번의 실패를하고, flag15폴더만 여는데, 성공한다. 그리고 /lib/i386-linux-gnu/libc.so.6 파일을 열고, “strace it!”을 출력한다. objdump를 사용해서 바이너리를 분석할수도 있다. /var/tmp/flag15 디렉토리에 있는 libc.so.6 라이브러리를 사용해 컴파일 한것을 알 수 있다. 그리고 libc.so.6은 GLIBC_2.0 버전을 요구하는 것을 알 수 있다. version 파일을 하나 만들어주고, 버전에 맞게 컴파일한다. 그 후 flag15 바이너리를 실행해준다. 근데..

uid가 1000이면 token을 발행해준다. 그런데 현재 로그인된 계정은 level13(1014)이다. chown은 권한이 없어 불가능하고, 후킹을 활용해 조건문을 우회했다. 먼저 flag13 바이너리를 /tmp폴더로 복사해 uid를 level13으로 되게 한다.(LD_PRELOAD 환경변수는 자신이 권한을 가지지 않는 user 파일에 대해선 적용되지 않는다.) 그리고 간단하게 1000을 반환하게 하는 getuid함수를 간단하게 짠 후 라이브러리 파일로 컴파일 해준다.그다음 LD_PRELOAD로 환경변수 등록 후 실행하면 unistd.h에 있는 getuid보다 LD_PRELOAD에 등록된 라이브러리를 먼저 참조해 조건문이 우회되고, 토큰을 받을 수 있다.특정 바이너리 실행시에만 사용LD_PRELOA..

sha1sum을 해서 “4754a4f4bd5787accd33de887b9250a0691dd198” 문자열과 일치하면된다. sha1은 단방향 알고리즘으로 설계되었기 때문에 복호화가 불가능하다. 그래서 복호화가 아닌 다른 방법이 필요하다. command injection 방법을 사용하면 된다. 쉘의 && 연산을 이용해 명령어를 두번 실행하게 한다. 처음 명령은 echo로 그냥 출력시키고, 그다음 명령은 sha1sum이 되게 만든다. 이렇게하면 프로그램에서 40개의 문자만 return되게 해놨으니 처음 echo로 출력한 문자열만 해당돼 조건문을 통과시킬 수 있다.

파일을 읽고, buffer로 출력해주는 코드다. token파일을 읽으려고 시도했지만 파일 권한이 없다고 나온다. 이 부분을 race condition으로 해결해볼까한다. 모든 사용자가 파일을 생성할 수 있는 /tmp파일에 임의의 파일을 생성한다. 그리고 쉘 스크립트를 이용해 반복적으로 링크한다.(백그라운드로 실행) 그다음 18211 포트를 열어주고 대기시켜준다. 반복적으로 파일을 실행시켜주면 아까 권한이 없는 token파일과 임의로 만든 abcd 파일이 권한을 계속해서 변경중일 때 권한이 있는 abcd 파일을 access함수에서 열고, open함수에서는 권한이 없는 파일을 열게되면 token파일의 내용을 볼 수 있다. 그리고 내용을 복사해 flag10의 password로 입력해주면 flag1..

setuid가 걸려있는 php 코드가 있고, 이걸 우회해 flag를 획득하면 된다. spam함수로 “[email” 뒤에 오는 모든 문자를 전달하고, “.” 이가 나오면 “dot”으로 치환하고, ‘@’이가 나오면 “AT”으로 치환한다. 그리고 “[“가 나오면 “”로 치환한다. 여기서 취약점은 첫 번째 치환 함수에서 발생한다. “/e” 정규표현식은 치환 문자열을 php 코드 그대로 실행한다. (보안취약점 때문에 PHP 5.5.0 이후로 제거되었다.) ‘@’가 ‘AT’으로 ‘.’이 ‘dot’으로 바뀐걸 볼 수 있다. 그럼 어떻게하면 쉘을 실행시킬수 있을까? 파일을 생성할 수 있는 tmp폴더를 이용하면 된다.tmp폴더에 쉘을 실행시킬 수 있는 코드의 파일을 만들고, 호출시키면 된다. echo ‘[email ..

모든 사용자에게 읽기 권한이 있는 파일이 있고, 그걸 분석해 flag08로 로그인하라고 한다. pcap 파일이 하나 있다. 네트워크 패킷 캡처 파일인데, python의 HTTPserver 기능을 사용해 서버를 열어 pcap파일을 다운로드 한다. TCP 프로토콜을 사용해 통신한 내역을 볼 수 있고, TCP stream으로 어떤 내용이 통신되는지 확인해본다. 로그인 시도했던 내용이 들어있는걸 확인할 수 있다. 처음에 backdoor00Rm8ate라고 입력했지만 틀렸다. 그래서 통신내역을 16진수로 변환해 어떤 내용을 통신했는지 정확하게 파악했다. 7f는 ASCII에서 backspace를 뜻한다. 그럼 “backd00Rmate” 문자열이 완성된다.

perl로 ping을 날릴수 있는 프로그램이 서버에서 돌아가고 있다. 이렇게 Host파라미터로 ip를 넘겨주면 통신 상태를 확인할 수 있다.하지만 여기서 취약점이 터진다. Host에 우리가 입력한 문자열이 그대로 들어가기 때문에 command injection이 가능하다.만약 여기에 “%3Bgetflag”를 입력하면 앞에 명령을 실행한 뒤에 getflag 명령이 실행되어 또 다른 명령을 실행시킬 수 있게된다. thttpd.conf 설정파일을 보면 프로그램은 flag07권한으로 실행이된다. 그러니까 %3Bgetflag를 입력하면 flag07권한으로 getflag가 실행돼 위 그림처럼 getflag가 실행된다. CGI(Common Gateway Interface)서버와 웹 어플리션이 동적으로 데이터를 주..