Webhacking Writeup 44번 문제입니다.
사이트에 접속하면 소스코드를 제공해줍니다
제공해주는 소스부터 보겠습니다.
코드가 매우 간결합니다.
거기에 주석까지 친절하게 달아줬네요
코드부터 해석해보면
POST 방식으로 id를 전달받는데
if구문으로 id가 존재한다면 substr함수로 id를 5개만
변수 id에 저장을 합니다.
그리고 특이하게 시스템 함수를 사용하는데
검색해보니 인수를 2개받고
위의 사진처럼 커맨드가 실행가능한 함수라고 합니다.
그런데 제공된 소스에서는 더블쿼터로 (" ") 하나로 묶여있습니다.
즉 인젝션을 수행해 2개의 인수로 나눠야 한다는 겁니다.
주석내용은 ls를 수행하면 된다는 내용으로
즉, 우리는 인수를 2개로 만들고 커맨드중
ls를 사용하면 된다고 알 수 있었습니다.
여러가지를 시도해보려 했으나
아래 사진처럼 5개의 입력제한으로 도저히 방법이
생각나지 않았습니다.
그래서 SQL를 처음부터 알아보자는 생각으로
아래의 사이트에서 mySQL사용법을 차근차근 보았습니다.
https://rankup.co.kr/etc/howto_mysql.html
알아두면 편리해요 -MYSQL 사용방법- 랭크업제공
정상적으로 ./mysql -u test_user -p test_db < table_ex.sql 이 실행이 되었는지 확인을 하실수 있습니다. 화면상의 명령어 show tables; : 테이블을 보여주게 하는 명령어 desc : 해당 테이블의 구조를 보여주는
rankup.co.kr
차근 차근 살펴보다보니
인젝션을 사용할때는 사용하지 않았던 ';' 이 항상 끝에 오는걸 보고
팍 떠오르더라구요.
해킹쪽만 공부하다보니 세미콜론 ';' 을 잘 쓰지 않아 잊었는데
echo를 쓰는 PHP나
printf를 사용하는 C언어나
자주사용하는 mySQL이나
항상 구문을 끝낼 때는 세미콜론 ';' 이라는 것을요
그렇게 생각한 식은 먼저
"echo 'hello! {$id}' "
구문을 끝내기 위해 hello! 앞에달린 싱글쿼터를 닫는 것이 필요해
싱글쿼터 한개 ( ' )
echo 구문을 끝내기 위해 세미콜론 ( ; )
{$id}끝에 닫기 위한 싱글쿼터가 있기에 다시 열어줄 싱글쿼터 한개 ( ' )
마지막으로 커맨드 명령어 ls
이렇게 정리하니
딱 ';'ls 길이가 5개로 떨어지더라구요
이걸 문제페이지에 전달하면
FLAG가 출력되었습니다!
신나는 마음에 제출하면....
안됩니다.
생각해보니 flag는 항상 대괄호가 있었는데
없는걸 빠르게 눈치챘어야 했습니다.
작성자는 여기서 당황하고 삽질을 좀했습니다
뒤에 index.php가 나오길래
전체를 복사해서 url에 전달도 해봣는데
공백 %20 때문인지 해서 지우고 전달도 해보는등 삽질을 하다가
우연히 index.php를 지우고 url을 입력했습니다.
그랬더니....
FLAG에 대괄호가 붙은 진짜 FLAG가 출력되었습니다.
(라이트업을 보시게 되면 저처럼 부끄러운 삽질은 피하시길 바랍니다...)
진짜 FLAG를 제출해주면
문제가 해결되었습니다.
'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글
Webhacking Writeup 34번 문제 (0) | 2022.08.19 |
---|---|
Webhacking Writeup 21번 문제 (0) | 2022.08.16 |
Webhacking Writeup 61번 문제 (0) | 2022.08.15 |
Webhacking Writeup 56번 문제 (0) | 2022.08.15 |
Webhacking Writeup 42번 문제 (0) | 2022.08.15 |