write-up/webhacking.kr 19

53번

hidden table에서 test1값을 가져와서 출력해주고 있다.val값을 변화하면서 출력값을 살펴보면, test, guest, admin 등 있다. 테이블 이름을 알아내야하는데....union, select가 막혀있어서 information_schema를 못 쓴다... procedure analyse()함수를 사용하자.procedure analyse()에는 테이블의 데이터에 대한 통계정보가 들어있다.첫 번째 열에는 테이블의 컬럼 이름이 들어있다. ?val=1 procedure analyse() 테이블명과 컬럼 명을 토해냈다.

40번

admin으로 로그인 해야하는듯 하다.확인 결과, 필터링은 공백, or, and공백은 %0a로, or는 ||로, and는 &&로 우회해준다.단, &를 쓸 땐 %26로 써주어야 한다는 것을 주의하자. 여러 확인 결과, 예상되는 쿼리는,select * from table where id='$_GET[id]' and pw='$_GET[pw]' and no=$_GET[no]위와 같다. ?no=0 or no=2no가 1일 때 id는 guest이고, no=2일 때 id값이 admin이라는 사실을 알아내었다.예상할 수 있는 테이블의 형태는 +------+-----+----+| id | pw | no |+------+-----+----+| guest | guest | 1 |+------+-----+----+| admi..

35번

challenge35_list라는 테이블에 내 id, ip $_GET[phone]을 넣는다. $_GET[phone]이 int형이라 쿼터가 없어서 인젝션 가능 테이블에서 id='admin' and ip='내 ip'이면 클리어. 그런데 insert될 때는 항상 내 id와 내 ip로만 들어간다. (id='admin'을 만족시켜야 한다.) Multi Row Insert를 이용하여 insert 값을 주작한다. insert into table values (id, ip, phone), (id, ip, phone); 두 행이 동시에 들어간다. 첫 번째 id, ip값은 $_SERVER 변수로 조작 불가이므로, 두 번째걸 조작해준다. 문자열은 0x로 우회한다. 1), (0x61646d696e, 0x3139322e3136..

50번

소스를 보면... 간단하다. select 문에서 3만 추출하면 되므로,쿼리에서select lv from members where id='$_GET[id]' and pw=md5('$_GET[pw]')select lv from ~ where id='aa' or lv = 3 # ' and pw=md5('$_GET[pw]')이런식으로 조작해주면 된다. 그런데 mb_convert_encoding함수로 euc-kr에서 utf-8로 변환하고 있다.멀티바이트셋 환경이다.magic_quote_gpc 우회가 가능하다.=은 like로 우회해준다.공백도 적절히 우회해준다. ?id=%bf%27 or lv like 3 # 그런데 클리어가 안 된다. or 1 로 전체 참 주고 limit으로 레코드 조절해서 뽑아봐도 안 된다... ..

21번

파라미터는 no, id, pw이다. 폼을 통해 제출하는 파라미터는 no이다.이 문제는 소스를 안 보여준다. 쿼리를 유추해야 하는데, 여러 가지 해보면서 유추해보면select * from ~ where no={$_GET[no]} or id='{$_GET[id]}' and pw='{$_GET[pw]}'이다. no가 1 일 때 guest/guest이고no가 2 일 떄 admin/???? 이다.admin의 패스워드를 알아내야 한다. 우선 length함수로 길이를 뽑아낸다.?no=2 and length(pw)=19 이제 한 글자씩 뽑는다.mid(pw,1,1)ord(mid(pw,1,1))이런 식으로 아스키 범위에서 알아내면 되는데, 너무 오래걸린다. (아스키범위 32~127)이진수로 뽑으면 한 글자당 7회의 쿼리만..

webhacking.kr SQL Injection

webhacking.kr SQL Injection 문제 3/28 시작 2 (500)7 (300) - 4/9 클리어8 (350) - 4/1 클리어9 (900) - 7/17 클리어13 (1000) - 8/22 클리어18 (100) - 3/28 클리어21 (250) - 3/28 클리어22 (500) - 8/23 클리어35 (350) - 3/31 클리어40 (500) - 3/31 클리어45 (550) - 4/3 클리어46 (300) - 3/28 클리어49 (300) - 3/28 클리어50 (450) - 3/29 클리어51 (250) - 4/3 클리어53 (350) - 3/31 클리어55 (400) - 4/9 클리어56 (250) - 3/31 클리어57 (600) - 4/3 클리어59 (200) - 7/8 클리어