일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 서치어드바이저
- SQL블라인드인젝션
- WebHacking
- HTTP_쿠키
- Hello_world!
- 웹마스터
- SW블로그
- 정보보안
- 웹해킹_1번
- webhacking.kr_1번
- 코드블럭
- 수집보류
- sql인젝션
- webhacking.kr
- 수집오류
- 쿠키조작
- aaencode
- 코드블럭_설치오류
- c언어
- webhacking.kr_3번
- 웹해킹
- 패킷조작프로그램
- webhacking.kr_4번
- Burp
- 수집성공
- 코드블락
- 레인보우테이블
- 블로그_시작
- 패킷조작
- 워게임
- Today
- Total
호빵둥이 IT Blog
Webhacking.kr 3번 풀이 :: 호빵둥이 IT Blog 본문
안녕하세요!
오늘은 워게임, Webhacking.kr Challenge 3번 문제를 풀어보도록 하겠습니다.
이번 문제는 SQL 인젝션을 사용한 문제입니다. 먼저 시작하기 전에 아주 간단하게 SQL 인젝션이 무엇인지 알아보도록 하겠습니다.
#SQL 인젝션
SQL 인젝션은 이름이 가지고 있는 뜻 그대로, SQL 코드를 인젝션, 삽입하여 보안 오류를 일으키는 것을 말합니다.
대부분 DB의 경우 사용자로부터 데이터를 입력받고, 그 데이터를 SQL에 명령문 형태로 삽입합니다.
예를 들어, INSERT INTO{테이블} VALUES {값} 이런식으로 말이죠.
하지만, 이를 악용하면 SQL문을 우회할 수 있습니다.
SELECT user FROM user_table WHERE id='아이디' AND password='비밀번호';
이런 문이 있다고 가정할 때, 아이디를 입력하고 비밀번호 부분에 1' or '1'='1 을 넣게 되면,
SELECT user FROM user_table WHERE id='아이디' AND password='1' or '1'='1';
이렇게 논리적으로 or를 통해 조건을 참으로 만들 수 있습니다. 즉, 아이디를 알고 비밀번호를 모르는 경우에도 로그인이 가능하게 됩니다.
이를 이용하여 1' or '1'='1 뒷 부분에 UNION 이나 JOIN, SET, DELETE등을 추가하면 해커가 원하는대로 데이터를 삭제하거나 생성, 모든 데이터 열람 등이 가능하게 됩니다.
실제로도 SQL 인젝션은 굉장히 오래된 해킹 기법 중 하나입니다. 그렇다면 SQL 인젝션으로 해킹이 불가능 할 것 같은데, 그렇지는 않습니다.
2017년 숙박어플 '여기어때'의 SQL 인젝션 해킹, 2015년 유명 커뮤니티 '뽐뿌'의 SQL 인젝션 해킹 등 우리 주변에서 생각보다 많이 일어나고 있습니다.
"SQL 인젝션은 무한히 발전 가능한 해킹 방법이고, 그만큼 보안 업체에서도
꼼꼼하게 해킹 시도를 차단하는 해킹방법이라고 할 수 있습니다."
#본론으로
자 이제 문제를 풀어보도록 합시다.
로그인을 한 후에 https://webhacking.kr/challenge/web-03/에 접속하도록 합시다.
분명 워게임인데 노노그램이 나왔군요. 노노그램을 풀어봅시다.
노노그램은 숫자가 있는대로 칸을 칠하는 게임입니다. 우리나라에서는 네모네모로직으로 알려져있습니다.
유명한 네모네모로직 사이트를 첨부합니다.(심심할 때 해보시면 꽤 재미있어요:D)
http://nemonemologic.com/logic_board.php
자 이렇게 노노그램을 풀고, Solved 버튼을 눌러봅시다.
그랬더니 이렇게 로그를 남기기 위해 이름을 적으라고 합니다. 아무 이름이나 적고 submit을 해봅시다.
이렇게 본인의 IP, 답과 함께 기록이 된 모습을 볼 수 있습니다.
그러면 어떻게 풀어야할까요? 뒤로가기를 눌러 소스코드를 분석해봅시다.
#소스코드 분석하기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
<html>
<head>
<title>Challenge 3</title>
</head>
<body>
<center>Nonogram</center>
<p>
<hr>
<form name=kk method=get action=index.php></form>
<form method=post action=index.php>
<input type=hidden name=answer value=1010100000011100101011111>
Clear!<br>enter your name for log : <input type=text name=id maxlength=10 size=10>
<input type=submit value='submit'>
|
cs |
10번째 줄에서 answer과 id 값을 index.php로 get 형식으로 보내는 것을 알 수 있고,
12번째 줄을 보면 answer 값은 '1010100000011100101011111'로 고정, hidden(숨김상태, 일반적으로 input 박스를 볼 수 없음) 되어있군요.
그러면 answer 값을 이용해서 SQL 인젝션을 시도하면 되겠다고 유추할 수 있습니다.
대부분 input에 hidden 을 넣는 경우 DB에 값을 넣을 때 사용자가 임의로 수정하는 것을 막기 위해서 쓰곤 합니다.
하지만 우리는 소스코드를 알고 있기 때문에, SQL 인젝션을 시도해보도록 하겠습니다!
#문제 해결하기
처음에 설명했던 것처럼 일단 answer 값을 1' or '1'='1 로 해볼까요?
크롬브라우저에서 F12를 눌러 개발자도구로 들어가 봅시다.
여기서, answer input 값의 value부분을 더블클릭해서 1' or '1'='1 로 바꿔보죠.
이후 submit 을 누르면
이렇게 문제를 풀 수 있습니다!
#연관된 활동
사실 한번만에 푼 경우에는 굉장히 운이 좋았다고 할 수 있습니다.
그 이유는, 우리는 index.php의 내용을 모르는 상태에서 SQL 인젝션을 시도했는데, 만약 index.php파일에 해당 구문을 쓸 수 없게 우회하는 기능을 넣어 놨을지도 모릅니다.
이럴 때를 대비하기 위해서 스페이스바를 대신할 수 있는 기능(공백을 탭으로 우회, 주석사용 등..)들을 잘 숙지하고 있는 것이 좋습니다.
또한, SQL에 데이터를 넣을 때 PHP를 사용하므로 PHP언어에서 사용되는 주석이나 여러 스킬들을 알아두고 있는 것이 문제를 푸는데 도움이 많이 되겠죠?
이상, Webhacking.kr 3번문제 풀이를 마치겠습니다.
포스트 잘 보셨다면 하단에 ♡ 꼭 눌러주시길 부탁드립니다!
(♡ 는 블로거에게 큰 힘이 됩니다)
[이전글] : 2020/05/12 - [SW/[워게임]Webhacking.kr] - Webhacking.kr Challenge 1번 :: 호빵둥이 IT Blog
[다음글] : 2020/05/14 - [SW/[워게임]Webhacking.kr] - Webhacking.kr Challenge 4번 :: 호빵둥이 IT Blog
'프로그래밍 > [워게임]Webhacking.kr' 카테고리의 다른 글
Webhacking.kr 7번 풀이 :: 호빵둥이 IT Blog (2) | 2020.05.17 |
---|---|
Webhacking.kr 6번 풀이 :: 호빵둥이 IT Blog (0) | 2020.05.16 |
Webhacking.kr 5번 풀이 :: 호빵둥이 IT Blog (0) | 2020.05.15 |
Webhacking.kr 4번 풀이 :: 호빵둥이 IT Blog (1) | 2020.05.14 |
Webhacking.kr 1번 풀이 :: 호빵둥이 IT Blog (0) | 2020.05.12 |