일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- sqli
- goblin 3번
- Kail Linux
- Lord of SQL Injection
- sql injection
- 2002(HY000)
- Lord of SQLinjection
- No module named ‘requests’
- M2
- LOS 5번
- docker compose
- blind SQLi
- Error Based SQL Injection
- Python requests 설치
- 우분투
- mocOS
- 1819 (HY000):
- ubuntu
- SQLi wargame
- ModuleNotFoundError: No module named ‘requests’
- Union SQL Injection
- SQL i
- los.rubiya.kr
- str_replace함수
- utmp
- XAVIS
- MySQL
- UTM
- btmp
- 가상머신 os
- Today
- Total
klaus
[Lord of SQL Injection] darkknight 12번 본문
0. 다크나이트
다크나이트를 검색하면 batman만 나온다..ㅎㅎ
php마이페이지를 만들다가 힘들어서 문제하나를 풀어봅니다.(?)
1. 전체 코드
2. 주요 코드 분석
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'/i', $_GET[pw])) exit("HeHe");
if(preg_match('/\'|substr|ascii|=/i', $_GET[no])) exit("HeHe");
$query = "select id from prob_darkknight where id='guest' and pw='{$_GET[pw]}' and no={$_GET[no]}";
먼저, preg_match함수를 확인해보면 no를 받는 변수에서 prob와 _ , . , ( , ) 을 필터링하고 추가로 '와 subtstr과 ascii, =을 필터링한다.
또 pw를 받는 변수에서는 '를 필터링한다. 둘 다 i를 통해 대소문자를 구분하지 않는 것을 알 수 있다.
SQL 쿼리문을 보면 아이디는 Guest로 고정되어 있습니다.
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_darkknight where id='admin' and pw='{$_GET[pw]}'";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("darkknight");
addslashes 함수로 ', ", 널 값을 필터링한 쿼리문을 다시 실행시켜 $result['pw'] == $_GET['pw'] 이면 Solve 결과적으로 이번 문제도 진짜 비밀번호를 찾아야 풀리는 문제입니다.
3. Solve
이번 문제 역시 블라인드 SQLi이기 때문에 참 또는 거짓값이 나오는 페이로드를 작성하고 페이로드를 바탕으로 문제를 풀어보겠습니다.
Step. 1 admin으로 로그인할 수 있는 기본 페이로드 작성( 참/거짓)
먼저, ?no=1 || id like "admin" 사용하여 admin으로 로그인하였습니다. 하지만, 해당 문제는 패스워드도 알아야하기 때문에 기본 페이로드를 통해 문제를 풀어보겠습니다.
Step2. Pw길이파악하기
[+] 우회코드
- substr : mid, right(left), substring
- ascii : ord,hex
? no=1 || id like "admin" %26%26 length(pw) like 8 에서 참 값으로 pw의 길이는 8
Step3. Pw data 찾기
mid함수를 사용해서 문제풀이!! mid함수를 사용하여 subtstr를 필터링 우회하겠습니다.
사용법은 subtstring와 동일합니다.
그럼 기본 페이로드를 작성해보겠습니다.
? no=1 || id like "admin" %26%26 mid(pw,1,1) like 0로 작성할 수 있습니다.
다만, 해당 페이로드로는 숫자만 찾을 수 있기 때문에 ascii를 우회할 방법으로
hex함수를 사용해서 16진수로 변경해주고
conv함수를 사용해서 입력된 값을 16진수에서 10진수로 변경해서 문제를 풀었습니다.
길이는 8
pw는 0b70ea1f
'모의해킹 > Wargame' 카테고리의 다른 글
[Lord of SQL Injection] giant 14번 (feat. 공백 우회) (1) | 2022.12.21 |
---|---|
[Lord of SQL Injection] bugbear 13번 (0) | 2022.12.21 |
[Lord of SQL Injection] golem 11번 (0) | 2022.12.09 |
[Lord of SQL Injection] skeleton 10번 문제 (0) | 2022.12.08 |
[Lord of SQL Injection] vampire 9번 문제 (0) | 2022.12.07 |