먼저 파일을 업로드 하면은 저렇게 time, 자기 ip, file이름이 출력된다.
그래서 처음엔 file이름을 <script>이렇게 변조하면 xss공격이 가능하지 않을까 해서 시도해봤는데
괄호가 오면은 html인코딩을 해버리고 심지어 '/'가 오면은 '/'앞의 내용을 전부 삭제해버린다.
그래서 이 방법은 틀린 것 같고 flag가 다른 테이블에 있다 했으니 sql injection을 의심해보았다.
파일을 업로드 한다 치면은 Insert into table values (time, ip, filename) 이런식 아닐까 했는데 생각해보니 time, ip, filename이 바뀌어서 들어갈 수도 있었다.
그래서 여러가지 시도해보았다.
1. time, ip, filename
f')이렇게 하면 filename이 마지막으로 오게 하니 시도해봤지만 upload error가 떴다.
2. filename, time, ip
filename, time, ip순서대로 해보니 upload success가 떴다.
그러므로 파일을 insert into table values (filename, time, ip) 이런식으로 넣는걸 알 수 있다.
그다음은 테이블 명을 뽑아야 한다. 테이블 명을 뽑기 위해선 먼저 database이름을 뽑아야하기 때문에
Select database()를 filename에 집어넣어 보겠다.
데이터베이스 이름 chall29를 뽑을 수 있었다.
그다음 table이름을 뽑아야하는데 information schema 문서를 참조했다.
https://dev.mysql.com/doc/mysql-infoschema-excerpt/8.3/en/information-schema-table-reference.html
https://dev.mysql.com/doc/mysql-infoschema-excerpt/8.3/en/information-schema-tables-table.html
information_schema.tables에 table_schema에 db내용을, table_name에 table이름을 담고있기 때문에 아래와 같이 payload를 작성했다.
f', 123,'61.37.142.156'), ((Select group_concat(table_name) from information_schema.tables where table_schema='chall29'), 123, '61.37.142.156')#
group_concat은 여러 문자들을 하나로 붙여서 출력하는 함수이다.
이렇게 넣어보면은 테이블 files와 flag_congratz를 얻을 수 있는데 flag_congratz 테이블의 내용을 읽어오면 된다.
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
[Webhacking.kr] old-28 (with. htaccess in apache) (0) | 2024.07.12 |
---|---|
[Webhacking.kr] old-02 (0) | 2024.07.06 |
Webhacking.kr old-34풀이 (2) | 2024.02.08 |
Webhacking.kr old-55 풀이 (2) | 2024.02.06 |
Webhacking.kr old-52 풀이 (0) | 2024.02.04 |