728x90

코게 2018문제를 풀다가 큰 수를 소인수분해해야될 일이 생겼다. 파이썬으로 코딩을 해도 시간이 엄청 걸릴것같아서 툴을 찾아보다가 yafu라는 툴을 알게 되었다.

 

https://sourceforge.net/projects/yafu/ 

 

일단 저 사이트에서 다운을 받자.

 

 

압축을 풀면 저렇게 구성되어 있다. 딱봐도 cmd같은곳에서 실행하게 생겼다. 일단 그러면 환경변수 설정부터 해두자. 어떻게 하는지는 다 알겠지만 일단 혹시나 해서 이번만 설명을 하겠다.

 

1. 제어판 -> 시스템 및 보안 -> 시스템

 

2. 내 PC 우클릭 -> 속성

 

 

위의 두가지 방법중 아무거나 사용하면 된다. 그렇게 들어간 다음 고급 시스템 설정을 클릭한다.

 

 

그리고 고급을 클릭한다.

 

 

 

그다음 환경변수를 클릭한다.

 

 

 

그리고 Path를 더블클릭해준다. 들어가서 새로 만들기를 클릭한후에 아까 yafu를 깔았던 곳으로 가자.

 

 

위에 주소창을 클릭하면 저렇게 경로가 뜬다. 저걸 복붙해주고 확인을 클릭하면 환경변수 설정이 된다. 물론 yafu말고 모든 환경변수 설정을 이렇게 하면 된다.

 

 

 

이제 명령 프롬프트를 들어가서 yafu-x64를 실행시켜보자. 위의 사진처럼 오류가 안나면 성공한것이다.

 

 

사용방법은 yafu-x64 factor(숫자) -threads2를 해주면된다. 물론 threads를 안하면 1로 기본 세팅된다. 보통 그냥 기본 세팅으로 하면 될것이다.

 

 

계산기를 보니 저기 3223857은 0x313131에 대한 10진수 값이다.

 

 

10진수를 넣으면 그냥 그 10진수가 나온다.

 

 

 

내가 풀 n은 띄워져 있어서 되는지 봤더니 그건 안되는것같다.

 

 

 

그럼 파이썬으로 코딩해서 공백을 없애주자!

 

 

이렇게 나온다. 다 나오기를 기다릴려고 했는데 너무 오래걸릴 것 같아서 그냥 중간과정만 캡쳐했다. 하여튼 이렇게 yafu라는 툴을 쓰면 된다.

 

 

'Hacking > Tool' 카테고리의 다른 글

NoSQLMap  (0) 2018.01.22
gdb-peda  (0) 2018.01.09
728x90

NoSQLMap 설치하는법

https://github.com/codingo/NoSQLMap에 나와있는데로 따라하면 된다.

 

NoSQLMap의 기능

 

 

 

NoSQLMap을 시작하면 나오는 화면이다. 1번을 선택하면 옵션을 세팅할수있다. 1번을 한번 선택해보자.

 

 

 

여러가지 옵션들을 세팅할 수 있다. 일단 1번을 보면 타겟의 호스트나 IP를 설정할 수 있다. 공격하려는 대상 웹서버나 MongoDB의 host나 IP를 세팅해주면 된다. 2번은 웹 어플리케이션 포트를 설정하는 것인데 웹 어플리케이션이 공격하려는 대상인 경우에 웹 어플리케이션의 TCP포트를 설정해준다. 그리고 3번은 URI 경로설정이다. 페이지 이름과 매게 변수를 포함하지만 호스트 이름이 아닌 URI의 일부를 적는곳이다. 예를들면 /app/acct.php?acctid=102같은게 있다. 4번은 HTTPS를 켜고 끄는것이다. 4번 같은 경우에는 꺼져있을 경우 치면 켜지고 반대로 켜져있을때 치면 꺼진다. 5번은 MongoDB의 포트를 설정해주는 것이고 6번은 HTTP요청 방법을 설정한다. 7번은 로컬 MongoDB랑 Shell의 IP를 설정하는 것이다. MongoDB 인스턴스를 대상 Mongo 설치의 IP로 직접 공격하여 대상 데이터베이스를 복제하거나 Meterpreter 셸을 열려면 이 옵션을 설정하면된다. 8번은 쉘 listner 포트를 설정하는 것이다. Meterpreter 셸을 여는 경우 포트를 설정하면 된다. 9번은 Verbose mode를 끄고 켜는 것이다.

 

 

이제 Scan for Anonymous MongoDB Access에 대해 알아보자. NoSQL DB Access Attacks과 NoSQL Web App attacks은 그냥 누르면 아까 설정했던 곳으로 공격이 실행되는것이라 딱히 볼게 없다. Scan for Anonymous MongoDB Access를 사용하기 위해 4번으로 들어가면 위의 화면처럼 뜬다. 이건 근데 언어 그대로 누르기만 하면 된다.  

 

 

마지막으로 Change Platform (Current: MongoDB)를 한번 들어가보자. 들어갔더니 아직은 저거 두개밖에 지원을 안하는것같다. CouchDB로 바꾸고 세팅을 들어가면 바껴있을까 궁금해서 한번 해보았다.

 

 

MongoDB에서 바껴있다. 그래도 벌써 두개나 지원하는게 좋은것같다. 일단 이렇게 기본적인 기능만 겉핥기식으로 봤다. 나중에 직접 MongoDB를 기반으로 만들어서 거기 공격을 해보는걸 포스팅 해야겠다.

 

 

참고자료

https://www.darknet.org.uk/2017/08/nosqlmap-automated-nosql-exploitation-tool/

https://github.com/codingo/NoSQLMap

 

 

'Hacking > Tool' 카테고리의 다른 글

yafu  (0) 2018.02.09
gdb-peda  (0) 2018.01.09
728x90

gdb-peda 설치하는법

 

1. git clone https://github.com/longld/peda.git ~/peda

2. echo "source ~/peda/peda.py" >> ~/.gdbinit

3. echo "DONE! debug your program with gdb and enjoy"

 

위 표의 3개를 순서대로 쳐주면 gdb-peda를 쓸수있다.

 

gdb-peda의 기능

 

 

그냥 disas main을 하면 일반 gdb처럼 글자색이 동일하다.

 

 

그러나 pdisas main을 하게되면 글자색이 구분되어 있어 훨씬 보기 편해진다.

 

 

또 메타스플로잇에 내장되어있는 패턴 페이로드 생성기가 peda에 내장되어 있어서 일일이 메타스플로잇에서 패턴을 생성하고 복붙하는 작업을 줄일수있다.

 

 

또한 pattern search를 사용하면 패턴 시작위치부터 EIP까지의 거리를 알수있다.

 

 

그리고 ropsearch "검색어"를 통해 쓸만한 가젯들을 찾아낼수도 있다.

 

 

 

그리고 공격 유형에 맞게 쉘코드를 생성해주는 기능도 있다.

 

 

또한 skeleton이라는 기능이 있는데 이 기능은 바이너리 공격 코드를 자동으로 생성해주는 기능이다. 바이너리 공격 형태와 생성할 파일명을 위와같이 설정해주면된다. 이러면 공격자는 생성된 파이썬코드의 일부만 수정하여 간편하게 공격을 할수있다.

 

#!/usr/bin/env python
#
# Template for local argv exploit code, generated by PEDA
#
import os
import sys
import struct
import resource
import time

def usage():
    print "Usage: %s target_program" % sys.argv[0]
    return

def pattern(size=1024, start=0):
    try:
        bytes = open("pattern.txt").read(size+start)
        return bytes[start:]
    except:
        return "A"*size

def nops(size=1024):
    return "\x90"*size

def int2hexstr(num, intsize=4):
    if intsize == 8:
        if num < 0:
            result = struct.pack("<q", num)
        else:
            result = struct.pack("<Q", num)
    else:
        if num < 0:
            result = struct.pack("<l", num)
        else:
            result = struct.pack("<L", num)
    return result

i2hs = int2hexstr

def list2hexstr(intlist, intsize=4):
    result = ""
    for value in intlist:
        if isinstance(value, str):
            result += value
        else:
            result += int2hexstr(value, intsize)
    return result

l2hs = list2hexstr

def exploit(vuln):
    padding = pattern(0)
    payload = [padding]
    payload += ["PAYLOAD"] # put your payload here
    payload = list2hexstr(payload)
    args = [vuln, payload]
    env = {"PEDA":nops()}
    resource.setrlimit(resource.RLIMIT_STACK, (-1, -1))
    resource.setrlimit(resource.RLIMIT_CORE, (-1, -1))
    os.execve(vuln, args, env)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        usage()
    else:
        exploit(sys.argv[1])

 

이것이 sol.py의 소스코드이다.

 

 

context라는 기능도 있는데 이것을 치면 메모리/코드구조를 gdb에 비해 보기쉽게 나타내준다. 물론 context code라는 식으로 입력하면 따로따로 볼수도 있다.

 

 

그리고 또 find라는 명령어를 통해 특정 스트링도 찾을수있다.

 

 

 

checksec이랑 aslr이라는 명령어로 보호기법이 걸려있는지 체크도 할수있다.

 

마무리

위에 말했던 기능말고도 strings같은 굉장히 많은 기능들이 있다. phelp라는 명령어를 통해 한번 자세히 알아보면 좋을것같다.

 

 

 

 

 

 

 

 

 

 

 

'Hacking > Tool' 카테고리의 다른 글

yafu  (0) 2018.02.09
NoSQLMap  (0) 2018.01.22

+ Recent posts