Los(11)
-
[WriteUp]/[Lord Of SQLInjection] dragon
$query = "select id from prob_dragon where id='guest' # and pw='{$_GET[pw]}'";→ 여기서 #은 한 줄만 주석으로 친다.⇒ 줄을 바꿔주고 query를 작성하면 주석처리가 적용되지 않는다.[도메인 값]?pw=%0a and pw='' or id='admin→ %0a로 줄바꿈 처리→ pw를 =’’로 재정의→ 그 후 or을 이용해 id=’admin으로 지정해준다.
2025.03.07 -
[WriteUp]/[Lord of SQLInjection] xavis
if(preg_match('/prob|_|\\.|\\(\\)/i', $_GET[pw])) exit("No Hack ~_~");if(preg_match('/regex|like/i', $_GET[pw])) exit("HeHe");→ 여기서 역대 문제들 중에서 regex라는 함수가 첫 등장을 한다.regex란?다중 like 문을 사용해야 할때 간단하게 줄여주는 함수from requests import geturl = ### xavis의 URL ###cookie = dict(PHPSESSID="### 자신의 PHPSESSID ####")length = 0password = ''print("### find for pw length ###")while(True) : param = "?pw=1232%27%20o..
2025.03.07 -
[Writeup]/[Lord of SQLInjection] nightmare
if(preg_match('/prob|_|\\.|\\(\\)|#|-/i', $_GET[pw])) exit("No Hack ~_~");if(strlen($_GET[pw])>6) exit("No Hack ~_~);→ pw에서 (prob, _, ., (), #, -)를 필터링한다.→ pw의 입력값의 길이가 6이 넘지 않아야한다.→ 6자 이내로 id가 admin과 다르다고 설정한 후 우회한다.풀이→ pw의 입력값을 괄호로 막아주기 위해 ‘)’를 사용→ MySQL은 쿼리를 읽을 때 NULL을 만나면 멈추는데, 이 점을 이용해서 ;%00을 사용해준다.⇒ pw값이 참이 되도록 만드는 것에 중점을 둔다.[도메인 값]?pw=')';%00-> 클리어 창이 뜬다.
2025.03.05 -
[Writeup]/[Lord Of SQLInjection] zombie_assassin
코드 분석$_GET['id'] = strrev(addslashes($_GET['id']));$_GET['pw'] = strrev(addslashes($_GET['pw']));strrev = 문자열을 거꾸로 반환하는 함수addslashes = 싱글쿼터나 더블쿼터, NULL(%00)의 앞에 특수문자를 문자열로 만들어주는 \를 넣어서 문자열로 만듦⇒ strrev(addslashes) = 특수문자가 문자열 처리 된 후에 순서가 뒤집힘→ 입력값이 거꾸로 반전되는 것까지 고려해야하는 문제풀이null 문자를 넣어서 문제를 해결하되 입력값이 거꾸로 삽입되는 점을 이용해서 처음부터 역순으로 넣어준다.?id=%00&&pw=%23 eurt ro
2025.03.05 -
[WriteUp]/[Lord Of SQLInjection] giant
여기서 살펴봐야할 코드는 다음과 같다.if(strlen($_GET[shit])>1) exit("No Hack ~_~");→ shit의 길이가 1보다 크면 뚫을 수 없게 해놨다.$query = "select 1234 from{$_GET[shit]}prob_giant where 1";그리고 from과 prob_giant가 붙어있다 = 공백이 없음if(preg_match('/|\\n|\\r|\\t/i', $_GET[shit])) exit("HeHe");→ 여기서 필터링 되는 구문들이 몇 개 있다.우선 공백을 넣는 방법은 대표적으로 다섯개 존재한다.%09 (tab \t)%0a (linefeed \n)%0b (vertical tab)%0c (form feed)%0d (carriage return \r)⇒ 여기서 ..
2025.03.05 -
[Writeup]/[Lord Of SQLInjection] bugbear
if(($result['pw']) && ($result['pw'] == $_GET['pw'])) solve("bugbear");→ admin에 사이트에서 요구하는 pw 값과 일치하는 값을 정확하게 입력해야함을 명시하고 있음→ ‘는 “, substr()은 mid(), =과 like는 in, space(공백)은 /**/으로 대체하여 해결→ Hello admin이라고 뜨는 걸로 보아, pw의 길이가 8이라는 것을 알 수 있다.이전에 제가 풀었던, vampire처럼 1:1로 대응하는 방법도 있겠지만 너무 노가다이므로,,, 파이썬 코드로 자동화 시켜서 알아보겠습니다import requestspassword = ''for admin_len in range(8): #pw의 길이 8만큼 수행 for admin_p..
2025.03.05