webhacking.kr old 29번 문제풀이(Writeup)
문제를 들어가면 위와 같이 출력된다. 사실 들어가자마자 backdoor를 올렸는데 실행이 안돼서 다른 느낌의 문제구나 싶었다. 바로 위에 공지를 보면 FLAG가 다른 테이블에 있다고 한다. 이걸 보고 이건 database 문제이구나 싶었다.
파일 업로드 취약점을 통해 database의 정보를 알아올 수 있다는 것을 오늘 알았다. 파일 업로드 취약점에 대해 더 공부해야겠다.
insert into 테이블명 values (값)
먼저 MySQL에서 입력을 할 때 위와 같이 들어간다.
ex) RRR 테이블에 새로운 레코드를 추가할 때
INSERT INTO RRR(ID, Name, ReserveDate, RoomNum) VALUES(5, '이순신', '2016-02-16', 1108);
그렇다면 똑같이 values의 값이 time과 ip, file이 나뉘어있다. 그런데 어떤 요소가 몇 번 위치에 있는지 모르기에 위치부터 찾아줘야 한다.
그래서 Burp Suite로 캡처해서 filename에 time, filename, ip순으로 넣었더니 upload error가 나왔다. 순서가 맞지 않았다. 그래서 몇 번 더 시행착오를 겪었다.
찾았다. 순서는 filename, time, IP 순으로 들어간다. 따라서 이제부터 금방 풀릴 것이다. 먼저 database이름부터 찾아보자.
#DBname
리피터로 50번 정도 시행착오를 한 것 같다. 앞부분은 4번 사진과 똑같다. 이번엔 database 이름을 들고 와야 하기에 select 명령어를 통해 database() 이름을 들고 와서 file 이름에 넣었고, 이후에 참이 되도록 하기 위해 시간과 IP를 넣었다.
database이름은 chall29이다.
#table_name
테이블은 여러 개가 있을 수 있으므로 concat 함수를 이용해보려고 한다. concat은 가끔 column이나 table의 여러 값을 가져올 때 사용하는 함수이다.
test', 0912, 'IP'),((SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema='chall29'), 123, 'IP')#
앞부분은 똑같고, SELECT를 통해 여러 테이블을 순서대로 합쳐서 출력해주는 group_concat함수를 이용해 table_name을 구한다.
이때 information_schema.tables를 통해 생성된 테이블을 전체로 조회를 하게 되는데, WHERE 조건문을 통해 table_schema가 'chall29라는 데이터베이스인 것을 찾는다.
딱 봐도 files는 아닐 것 같고 flag_congratz 테이블일 것 같다. 이제 테이블 이름을 찾았으니 Column 이름을 찾아보자.
#Column_name
Column_name을 찾기 위한 쿼리는 사실 테이블 이름 찾으려고 썼던 쿼리에서 아주 살짝만 바꾸면 되기에 설명은 생략한다.
test', 0912, '183.108.62.136'),((SELECT group_concat(COLUMN_NAME) FROM information_schema.columns WHERE table_name='flag_congratz'), 123, '183.108.62.136')#
column_name은 flag이다. 거의 다 왔다.
#flag 값
flag 값을 찾는 쿼리는 사실 database를 배운 분이라면 다들 알만한 쿼리이다. flag_congratz라는 테이블 안에 flag라는 column 값을 출력하라는 쿼리이다.
test', 0912, '183.108.62.136'),((SELECT flag FROM flag_congratz), 123, '183.108.62.136')#
flag가 출력된다.
쿼리를 만들면서 데이터베이스는 참 재밌고 힘들고 오묘하다.
'웹해킹 > webhacking.kr' 카테고리의 다른 글
webhacking.kr old 43번 문제풀이(Writeup) (0) | 2022.10.25 |
---|---|
webhacking.kr old 40번 문제풀이(Writeup) (0) | 2022.10.23 |
webhacking.kr old 28번 문제풀이(Writeup) htaccess 취약점 설명 (0) | 2022.10.21 |
webhacking.kr old 24번 문제풀이(Writeup) (0) | 2022.10.20 |
webhacking.kr old 37번 문제풀이(Writeup) (0) | 2022.10.19 |