분류 전체보기
- [Webhacking.kr] 18번 SQL INJECTION 2017.09.04
- [Webhacking.kr] 17번 2017.09.04
- [Webhacking.kr] 16번 2017.09.04
- [Webhacking.kr] 15번 2017.09.04
- [Webhacking.kr] 14번 2017.09.04
- 외 2017.09.04
- 5 2017.09.04
- 4 2017.09.04
- 3 2017.09.04
- 2 2017.09.04
[Webhacking.kr] 18번 SQL INJECTION
SQL INJECTIONRESULTindex.phps |
이렇다. SQL INJECTION 문제인듯
소스를 준다니까 소스를 보자.
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 32 33 34 35 36 37 38 39 40 41 | <html> <head> <title>Challenge 18</title> <style type="text/css"> body { background:black; color:white; font-size:10pt; } input { background:silver; } a { color:lightgreen; } </style> </head> <body> <br><br> <center><h1>SQL INJECTION</h1> <form method=get action=index.php> <table border=0 align=center cellpadding=10 cellspacing=0> <tr><td><input type=text name=no></td><td><input type=submit></td></tr> </table> </form> <a style=background:gray;color:black;width:100;font-size:9pt;><b>RESULT</b><br> <? if($_GET[no]) { if(eregi(" |/|\(|\)|\t|\||&|union|select|from|0x",$_GET[no])) exit("no hack"); $q=@mysql_fetch_array(mysql_query("select id from challenge18_table where id='guest' and no=$_GET[no]")); if($q[0]=="guest") echo ("hi guest"); if($q[0]=="admin") { @solve(); echo ("hi admin!"); } } ?> </a> <br><br><a href=index.phps>index.phps</a> </cener> </body> </html> | cs |
1을 입력하면 hi guest가 나온다.
오...ㅇ..오...; 어렵다;; 나한테는 이런 문제가 처음이라
일단 분석
no을 get형식으로 입력받아서 실행된다.
eregi를 사용하여 no을 입력받았을때 이 안에서 필터링하여 만약 no안에
공백, / , \( , \), \t , | , &, union, select, from, 0x 등이 있으면 exit함수로 종료된다.
여기서 sql문에서 id가 guest이고 no=1인 id는 guest이다.
그러므로 대충 2가 admin이라 예상하고 진행하면
id=guest and no=3 or no=2 로 넣는다하면
id가 게스트고 no가 3 이거나 no=2 인 id를 불러온다.
=> (id=guest and no=3) or no=2 으로 앞에 보이는 괄호안의 연산이 먼저 시행된다.
or을 이용하자.
근데.. eregi때문에 공백이 필터되므로 공백을 우회해야한다.
공백 우회로는 \t 이나 \n이 있는데 \t는 필터링되므로 \n을 이용하자 (공백우회(%20)로는 Tab(%09)이용 / Line Feed(%0a) 이용 / Carrage Return(%0d) 이용 / 주석(/**/) 이용 / 괄호() 이용 / AND(&&)나 OR(||) 이용 등등)
\n을 url인코딩한것은 %0a이다.
3 or no=2
=> 3%0aor%0ano=2
url : http://webhacking.kr/challenge/web/web-32/index.php?no=3%0aor%0ano=2
Congratulation!
You have cleared the 18 problems.
Score + 100
'Wargame > 웹해킹(Webhacking.kr)' 카테고리의 다른 글
[Webhacking.kr] 24번 (0) | 2017.09.06 |
---|---|
[Webhacking.kr] 19번 (0) | 2017.09.06 |
[Webhacking.kr] 17번 (0) | 2017.09.04 |
[Webhacking.kr] 16번 (0) | 2017.09.04 |
[Webhacking.kr] 15번 (0) | 2017.09.04 |
[Webhacking.kr] 17번
또 체크 하나만 있다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <html> <head> <title>Challenge 17</title> </head> <body bgcolor=black> <font color=red size=10></font> <p> <form name=login> <input type=passwd name=pw><input type=button onclick=sub() value="check"> </form> <script> unlock=100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10+100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10-100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10/100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10*100*10*10+100/10-10+10+50-9*8+7-6+5-4*3-2*1*10+9999999999; function sub(){ if(login.pw.value==unlock){ alert("Password is "+unlock/10); }else { alert("Wrong"); }} </script> | cs |
소스를 보자.
계산만 하면 될듯...
그냥 js로 저거 복사해서 코드 돌리면 될듯
9997809307가 답이다.
Password is 999780930.7
굿굿 인증하러가자
클리어
+ 2018-03-22 추가
chrome의 개발자도구를 이용해 간단히 계산 가능하다.
unlock 부분을 복사해 Console에서 그대로 붙여넣기를 해주면 결과값을 아래에 보여준다.
'Wargame > 웹해킹(Webhacking.kr)' 카테고리의 다른 글
[Webhacking.kr] 19번 (0) | 2017.09.06 |
---|---|
[Webhacking.kr] 18번 SQL INJECTION (0) | 2017.09.04 |
[Webhacking.kr] 16번 (0) | 2017.09.04 |
[Webhacking.kr] 15번 (0) | 2017.09.04 |
[Webhacking.kr] 14번 (0) | 2017.09.04 |
[Webhacking.kr] 16번
* * *
이게 문제인가?
키를 누르면 별이 막 늘어난다.
마우스를 가져다 내면 별이 막 지워진다.
소스를 보자
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 32 33 | <html> <head> <title>Challenge 16</title> <body bgcolor=black onload=kk(1,1) onkeypress=mv(event.keyCode)> <font color=silver id=c></font> <font color=yellow size=100 style=position:relative id=star>*</font> <script> document.body.innerHTML+="<font color=yellow id=aa style=position:relative;left:0;top:0>*</font>"; function mv(cd) { kk(star.style.posLeft-50,star.style.posTop-50); if(cd==100) star.style.posLeft=star.style.posLeft+50; if(cd==97) star.style.posLeft=star.style.posLeft-50; if(cd==119) star.style.posTop=star.style.posTop-50; if(cd==115) star.style.posTop=star.style.posTop+50; if(cd==124) location.href=String.fromCharCode(cd); } function kk(x,y) { rndc=Math.floor(Math.random()*9000000); document.body.innerHTML+="<font color=#"+rndc+" id=aa style=position:relative;left:"+x+";top:"+y+" onmouseover=this.innerHTML=''>*</font>"; } </script> </body> </html> | cs |
mv함수가 키를 누르면 발생하고 이 키 코드값이 중요한것 같다.
Key Code Reference Table
50 | 2 | 60 | 70 | f | 80 | p | 90 | z | |
51 | 3 | 61 | =+ | 71 | g | 81 | q | 91 | Windows |
52 | 4 | 62 | 72 | h | 82 | r | 92 | ||
53 | 5 | 63 | 73 | i | 83 | s | 93 | Right Click | |
54 | 6 | 64 | 74 | j | 84 | t | 94 | ||
55 | 7 | 65 | a | 75 | k | 85 | u | 95 | |
56 | 8 | 66 | b | 76 | l | 86 | v | 96 | 0 (Num Lock) |
57 | 9 | 67 | c | 77 | m | 87 | w | 97 | 1 (Num Lock) |
58 | 68 | d | 78 | n | 88 | x | 98 | 2 (Num Lock) | |
59 | ;: | 69 | e | 79 | o | 89 | y | 99 | 3 (Num Lock) |
100 | 4 (Num Lock) | 110 | . (Num Lock) | 120 | F9 | 130 | 140 | ||
101 | 5 (Num Lock) | 111 | / (Num Lock) | 121 | F10 | 131 | 141 | ||
102 | 6 (Num Lock) | 112 | F1 | 122 | F11 | 132 | 142 | ||
103 | 7 (Num Lock) | 113 | F2 | 123 | F12 | 133 | 143 | ||
104 | 8 (Num Lock) | 114 | F3 | 124 | 134 | 144 | Num Lock | ||
105 | 9 (Num Lock) | 115 | F4 | 125 | 135 | 145 | Scroll Lock | ||
106 | * (Num Lock) | 116 | F5 | 126 | 136 | 146 | |||
107 | + (Num Lock) | 117 | F6 | 127 | 137 | 147 | |||
108 | 118 | F7 | 128 | 138 | 148 | ||||
109 | - (Num Lock) | 119 | F8 | 129 | 139 | 149 |
키값은 대충 이렇다.
100 : 4 (Num Lock)
97 : 1 (Num Lock)
119 : F8
115 : F4
124 : |
음... |를 누르니까 답이 나왔다. 124
Password is webhacking.kr
클리어
'Wargame > 웹해킹(Webhacking.kr)' 카테고리의 다른 글
[Webhacking.kr] 18번 SQL INJECTION (0) | 2017.09.04 |
---|---|
[Webhacking.kr] 17번 (0) | 2017.09.04 |
[Webhacking.kr] 15번 (0) | 2017.09.04 |
[Webhacking.kr] 14번 (0) | 2017.09.04 |
[Webhacking.kr] 6번 (0) | 2017.09.03 |
[Webhacking.kr] 15번
들어가려하니 Access_Denied 이 뜬다. 50점인걸 보면 쉬울텐데 ㅇㅇ;
소스를 보자.
view-source:http://webhacking.kr/challenge/javascript/js2.html
이렇게 볼수있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | <html> <head> <title>Challenge 15</title> </head> <body> <script> alert("Access_Denied"); history.go(-1); document.write("password is off_script"); </script> </body> | cs |
뭐야... password is off_script
바로 인증하러가자.
클리어
'Wargame > 웹해킹(Webhacking.kr)' 카테고리의 다른 글
[Webhacking.kr] 17번 (0) | 2017.09.04 |
---|---|
[Webhacking.kr] 16번 (0) | 2017.09.04 |
[Webhacking.kr] 14번 (0) | 2017.09.04 |
[Webhacking.kr] 6번 (0) | 2017.09.03 |
[Webhacking.kr] 4번 base64 & SHA1 (0) | 2017.09.03 |
[Webhacking.kr] 14번
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 | <html> <head> <title>Challenge 14</title> <style type="text/css"> body { background:black; color:white; font-size:10pt; } </style> </head> <body> <br><br> <form name=pw><input type=text name=input_pwd><input type=button value="check" onclick=ck()></form> <script> function ck() { var ul=document.URL; ul=ul.indexOf(".kr"); ul=ul*30; if(ul==pw.input_pwd.value) { alert("Password is "+ul*pw.input_pwd.value); } else { alert("Wrong"); } } </script> </body> </html> | cs |
이게 소스다.
ck()함수는 check를 눌렀을때 일어나는 함수다.
<form name=pw><input type=text name=input_pwd><input type=button value="check" onclick=ck()></form>
그리고 ck의 기능은 url에서 ".kr"의 위치를 찾아서 그 위치값을 반환한다. // .indexOf(".kr")
(S.indexOf(target) 함수는 스트링(S)안에서 target의 값을 찾아 그 위치값을 반환하는 함수이다)
반환되는 값은 17이고 이것에 30을 곱하면 510이다
510을 입력하면 답이 나온다.
Password is 260100
Challenges - Auth에서
Auth에 입력햇더니 클리어가 나왔다.
+ 2018-03-22 추가
계산이 귀찮은 사람들을 위한 크롬의 개발자 도구! 너무 편리한 것같은데..
'Wargame > 웹해킹(Webhacking.kr)' 카테고리의 다른 글
[Webhacking.kr] 16번 (0) | 2017.09.04 |
---|---|
[Webhacking.kr] 15번 (0) | 2017.09.04 |
[Webhacking.kr] 6번 (0) | 2017.09.03 |
[Webhacking.kr] 4번 base64 & SHA1 (0) | 2017.09.03 |
[Webhacking.kr] 2번 Blind SQL Injection (0) | 2017.09.03 |
외
5
4
3
2