일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 백준
- PS
- SECGAME
- XSS
- JS
- pwn
- SQLi
- Pwnable.kr
- blind-sqli
- Crypto
- Bob
- 예전글 #CNN
- cryptohack.org
- pwnable
- blind_sqli
- 예전글
- HTB
- 예전글 #PS
- webhacking.kr
- cookie
- regex
- web
- cce2023
- pwn.college
- Today
- Total
목록Study (48)
아모에요
A1 칸에 FLAG{?????????????}이 주어지고 이 값은 다른 시트지에서 받아오는 것을 확인할 수 있다. 시트지 주소로 접속해보면 접속이 되지 않는다. 그러나 페이지를 불러오는 와중에 평문으로 데이터를 받아왔을 것을 예상해서 시트지 링크를 개발자 도구의 Network 탭에서 검색해보았다. 확인해보면 플래그가 나와있다.
정확히 0개의 옵션을 선택해야 제출이 가능한데.. 하나도 선택하지 않으면 제출이 안되는 그런 상황이다. 혹시나 해서 view-source를 보았는데 플래그가 노출되어있다. ...?
문제 소스를 보면 $pat="/[1-3][a-f]_.*$SERVER[REMOTE_ADDR].*\tp\ta\ts\ts" 의 정규표현식 형태이다. 이게 ?val= 값과 일치하면 풀린다. 정규식을 잘 알고 있는 사람이라면 금방 풀 수 있다. [1-3]은 [1-3]범위에 있는 문자 하나를 지칭한다. 1 [a-f]{5}는 [a-f]범위에 있는 문자 5개를 지칭한다. aaaaa _는 _ .*는 .(아무 문자나 가능) *(0개 이상의 개수) 이므로 아무 문자도 입력하지 않아도 된다. $_SERVER[REMOTE_ADDR]는 내 ip주소 \tp\ta\ts\ts는 탭을 인코딩해서 %09p%09a%09s%09s 형태로 입력하면 된다. ?val=1aaaaa_182.224.141.25%09p%09a%09s%09s를 입력하면 ..
문제에 접속하고 소스를 보면 다음과 같은 element가 존재한다. O 이걸 1600번 클릭하면 문제가 풀릴 것 같다. for(var i=0; i
SQLi는 맞는데 필터링이 걸려있는 문제 소괄호는 필터링이 되어있지 않는다. if(true,1,1234) 형태로 입력하면 if조건문에서 no=1이 되고 Apple이 출력된다. 반대로 조건이 false가 되면 no=1234가 되면서 Apple이 출력되지 않는다. blind-sqli로 풀리는 문제 같은데.. 필터링이 빡세서 어떻게 해야할지 고민했다. no=3이면서 id를 구해야하는데.. no가 3이라는걸 어떻게 조건을 맞출까 생각하다가 if(조건문,1,1234)를 입력했을때. 쿼리상에는 다음과 같은 쿼리가 입력되었을 것이다. SELECT text FROM table WHERE no=if(조건문,3,1234) db테이블에 최소 3개의 컬럼이 존재하고 각각 text = 반환되는 텍스트 (no=1일때 Apple,..
"); }echo("Admin page");if(preg_match("/2|-|\+|from|_|=|\\s|\*|\//i",$go)) exit("Access Denied!");$db = dbconnect();$rand=rand(1,5);if($rand==1){ $result=mysqli_query($db,"select lv from chall7 where lv=($go)") or die("nice try!");}if($rand==2){ $result=mysqli_query($db,"select lv from chall7 where lv=(($go))") or die("nice try!");}if($rand==3){ $result=mysqli_query($db,"select lv from chall7..
보호되어 있는 글입니다.
문제 소스를 보면 base64로 20번 인코딩하고 문자열을 치환한 값이 쿠키에 저장된다. 이를 역산한 값이 admin, nimda이면 문제가 풀린다. 어렵지 않게 이를 코드로 짤 수 있다. admin, nimda를 20번 인코딩한 값은 import base64 def encode(text): text_bytes = text.encode('ascii') text_base64 = base64.b64encode(text_bytes) tb64str = text_base64.decode('ascii') return tb64str id = "admin" pw = "nimda" for i in range(20): id = encode(id) pw = encode(pw) print(id) print(pw) 의 코드로 ..
접속하면 login, join 두개의 버튼이 존재하고 join은 작동을 안한다. login.php에 들어가봐서 온갖 SQLi를 시도해도 먹히지 않는다. 뭔가 힌트를 얻을 수 있을까 싶어 /web-05/mem/에 접속해보았더니 보이지 않던 join.php가 존재함을 알 수 있다. join.php에는 괴상한 자바스크립트가 존재하는데 이를 뷰티파이어에 넣고 분석해보자. l = 'a'; ll = 'b'; lll = 'c'; llll = 'd'; lllll = 'e'; llllll = 'f'; lllllll = 'g'; llllllll = 'h'; lllllllll = 'i'; llllllllll = 'j'; lllllllllll = 'k'; llllllllllll = 'l'; llllllll..
문제 소스를 보면 hash가 (1000000~99999999)salt_for_you 형태의 값으로 결정되고 이를 500번 sha1 해시화한 것이 표시되는 해시값이다. 10000000~19999999 까지의 해시값의 앞 8글자정도만 구한 다음에 이 데이터와 맞는 숫자를 대입해주면 문제가 풀린다. [hash.txt를 생성하는 코드] import hashlib import tqdm f = open("./hash.txt","w") for i in tqdm.tqdm(range(10000000,20000000)): sess = str(i) + "salt_for_you" res = sess for j in range(500): res = hashlib.sha1(res.encode("ascii")).hexdigest(..