목록전체 글 (370)
cgy12306
pw에 아무 값이나 넣어보자. https://los.eagle-jump.org/dragon_7ead3fe768221c5d34bc42d518130972.php?pw=123 pw가 아무런 값이나 들어가 있어도 #으로 인해 뒤에 모든 문자가 주석처리 돼서 Hello guest가 출력이 된다. 우선 주석을 우회해야 한다. #은 한 줄만 주석처리를 하기 때문에 Line Feed(\n)인 %0a로 한 줄을 넘기고 그 다음에 값을 입력하면 된다. https://los.eagle-jump.org/dragon_7ead3fe768221c5d34bc42d518130972.php?pw=%27%20%0aand%20length(pw)%3C%2720 pw의 길이가 20글자 미만인 경우에는 아무런 값이 안뜨는 것을 보면 정상적으로 ..
Blind SQL Injection을 사용해야 하는 문제인것 같다. 패스워드 길이 먼저 알아보자. https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php?pw=%27%20or%20length(pw)=%2740 패스워드는 40글자이다. ASCII 코드로 변환했을 때는 NULL 값인 0이 전부 참으로 뜨게 된다. https://los.eagle-jump.org/xavis_fd4389515d6540477114ec3c79623afe.php?pw=%27%20or%20id=%27admin%27%20and%20ascii(substr(pw,1,1))=%270 이것도 ASCII가 아닐수도 있다는 힌트를 살짝 얻었다. 비밀번호가 ASCII가 아닌 유니코..
Extended_Euclidean extended_gcd를 이용해서 역원을 구할 수 있다. Modular Exponentiation 밑, 지수, 나머지 계산할 값을 넣고, 지수를 2진수 형태로 바꾼 다음 바이너리 값에서 1에 해당하는 값들을 모두 곱한 후 다시 mod 계산을 해준다. Chinese remainder Theorem 확장 유클리디안 알고리즘을 이용해서 s와 t를 구하고 중국인 나머지 정리 이론 식으로 값을 구한다. Text-book RSA 우선 키 길이와 평문을 먼저 설정해준다. rsa_genkey 함수에서 키 길이를 이용해서 랜덤한 서로소인 소수 p와 q를 생성한다. 소수를 생성할 때 is_prime함수로 소수를 생성하고, is_prime 함수 내부에서 밀러라빈 테스트 함수를 호출하여 소수..
GET으로 받아온 pw가 6글자 이상이면 안된다. 또 #과 -이 preg_match로 막혀있기 때문에 주석처리도 안된다. 대범이 형이 힌트를 줬다. 다른 주석 사용법이 있다. ;%00으로 해주게 되면 모든 쿼리문을 작성하고 ;으로 닫고 뒤에 NULL값 처리를 해서 아무것도 없게 처리를 해준다. https://los.eagle-jump.org/nightmare_ce407ee88ba848c2bec8e42aaeaa6ad4.php?pw=');%00 잘 먹힌것 같지만 pw에는 거짓값이 들어가 있기 때문에 참값으로 만들어 줘야 한다. false는 0이기 때문에 =0,
GET으로 받아온 id와 pw를 preg_match로 '(작은따옴표)를 필터링하고 있다. preg_match는 \(역슬래쉬) 뒤에 오는 문자를 일반문자로 취급해서 우회할 수 있다고 한다. id=\&pw=123을 입력을 해주게 되면 최종 쿼리문에서 select id from prob_succubus where id='\' and pw='123' 이렇게 들어가게 된다. 이렇게 되면 \'로 인해 id값은 \'and pw\'이 들어가게 되버린다. 그러고 뒤에 123'이 남는다. 123을 or 1=1로 대체하면 무조건 참이 되기 때문에 문제가 풀릴 것 같다. https://los.eagle-jump.org/succubus_8ab2d195be2e0b10a3b5aa2873d0863f.php?id=\&pw= or 1=..
소스코드를 보니 GET으로 받은 id와 pw에 ereg 필터링이 걸려있다. 저번 스터디 회의 때 ereg의 취약점 중에서 %00으로 NULL 문자를 넣어주게 되면 뒤의 문자열은 검사를 안한다고 했었다. 그럼 id에 아무값이나 넣고 pw에는 %00으로 NULL 문자를 넣어주고, '(작은따옴표)로 pw를 닫아준 후 무조건 참으로 인지하게 되는 or '1'='1을 입력해주면 된다. https://los.eagle-jump.org/zombie_assassin_14dfa83153eb348c4aea012d453e9c8a.php?id=%00&pw=%00' or '1'='1
코드를 보면 GET으로 받아온 pw는 '(작은따옴표)가 필터링 되어 있다. mysql에서 like를 사용할 때 %를 사용할 수 있다. %는 문자열의 길이와 상관없이 모든 글자를 의미한다. 예를 들어 %A로 입력을 하면 맨 끝의 글자가 A가 있어야하는 조건이 되는것이다. %A%로 입력하게 되면, 해당 문자열에 A가 포함만 되어 있으면 된다는 조건이다. https://los.eagle-jump.org/assassin_bec1c90a48bc3a9f95fbf0c8ae8c88e1.php?pw=% pw에 %를 집어넣었더니 Hello guest가 뜬다. 만약 guest와 admin의 비밀번호가 한 글자만이라도 겹치지 않는다면 %와 % 사이에 임의의 글자를 넣어주는 코드를 돌리면 Hello admin이 뜨지 않을까하고..
쿼리문 작성하는 부분을 보면 from과 prob_giant 사이에는 공백문자가 들어가야 한다. 하지만 GET으로 받아온 shit변수가 들어가게 된다. 또 shit변수는 공백과 개행문자, 탭문자를 필터링 해놨다. 그러면 우리는 VT(Vertical Tab), FF(From Feed)를 사용하면 된다. LF(Line Feed)는 개행이라 필터링이 된다. VT는 %0b, FF는 %0c이다. https://los.eagle-jump.org/giant_9e5c61fc7f0711c680a4bf2553ee60bb.php?shit=%0b https://los.eagle-jump.org/giant_9e5c61fc7f0711c680a4bf2553ee60bb.php?shit=%0c
pw에는 '(작은따옴표)가 필터링 되어 있고, no에는 substr, ascii, =, or, and, like, 0x, 공백이 필터링 되어 있다. 공백은 전에 했던 것 처럼 %09(tab)으로 우회가 가능하고 like는 in으로 우회가 가능하다. in을 사용할 때 값이 괄호()로 덮어줘야 하고 '(작은따옴표)나 "(큰따옴표)로 묶어줘야 한다. 우선 패스워드의 길이를 알아보자. https://los.eagle-jump.org/bugbear_431917ddc1dec75b4d65a23bd39689f8.php?pw=123&no=1%09||%09id%09in%09("admin")%26%26length(pw)%09
pw는 '(작은따옴표)가 필터링이 되어있고, no는 substr, ascii, = 이 필터링 되어있다. '(작은따옴표)는 "(큰따옴표)로 대체해서 사용 가능하다. pw는 '(작은따옴표)를 사용해서 sql injection을 사용해야 하지만 필터링 되어있어서 pw에는 아무런 값을 넣어주고 no는 mysql상에서 int를 사용한다. int는 '(작은따옴표)나 "(큰따옴표)를 사용하지 않는다. no에 아무런 값을 넣어주고 or 연산자로 앞에 있는 and 연산자로 무시하고 뒤에 =은 like로 우회해주면 된다. 그리고 '(작은따옴표) 대신 "(큰따옴표)를 사용한 후에 뒤를 #으로 주석처리 해주고, %20으로 공백을 넣어준다. https://los.eagle-jump.org/darkknight_f76e2eebfe..