들어가보면
위와 같은 소스코드가 뜬다.
가장 눈에 띄는 include를 보고나서 일단 링크 뒤에 붙여봤다.
그런데 그냥 이 파일 자체였다.
코드가 무슨 내용인지 파악해보았다.
먼저 login_chk()라는 함수를 호출한다.
그리고 preg_match라는 함수의 인수로는 아래와 같다.
첫 번째 인수 : 정규식 표현 작성.
두 번째 인수 : 검색 대상 문자열.
세 번째 인수 : 배열 변수 반환. 패턴 매치에서 매칭된 값을 배열로 저장.
반환값 : 매칭에 성공하면 1, 실패하면 0이 반환
id와 'admin'이 같으면 solve이지만 아니면 admin이 아니라고 출력한다. pw에 대한 조건은 없었다.
저번에 한 거와 마찬가지로 해봤지만 실패....
id에 쓴것은 id 따옴표 안에, pw에 쓴 것은 pw안에 들어간다.
여기에 쓰인 md5() 함수는 문자열의 MD5 해시를 계산한다.
해시(hash)란 단방향 암호화 기법으로 해시함수(해시 알고리즘)를 이용하여 고정된 길이의 암호화된 문자열로 바꿔버리는 것을 의미한다고 한다. 그래서 내가 쓴 게 그대로 적용이 안 될 것이다.
그러면 성공조건 if($result['id'] == 'admin') solve("cobolt"); 를 만족해야 한다.
id가 admin이어도 pw가 False라면 and로 묶인 것이 True가 안되서 실패가 한다. 그래서 해당 구문을 닫고 구문을 추가하는 방법밖에 없다.
그럴려면 md5함수를 무시해야 하는데 찾아보니 해당 구문을 닫고 새로운 조건을 추가할 수 있다는 방법을 알게 되서 이를 적용하였고, 뒤에 남은 ')도 없애야 한다. 그래서 #으로 처리했지만, url에서 바뀌지 않아서 #의 인코딩 값 %23을 대신 써주고 엔터를 쳐봤더니 성공을 받을 수 있었다.
?id=admin&pw=') or pw='1' or '1'='1' and id='admin'%23
?id=admin&pw=%27)%20or%20pw=%271%27%20or%20%271%27=%271%27%20and%20id=%27admin%27%23
'Hacking & Security > Web Hacking' 카테고리의 다른 글
[XSS Challenge] Stage 03 (0) | 2022.05.29 |
---|---|
[LOS] goblin (0) | 2022.05.29 |
[natas] 05>06 (1) | 2022.05.28 |
[natas] 04>05 (0) | 2022.05.28 |
[natas] 03>04 (0) | 2022.05.28 |