write-up 33

56번

게시판이다.admin이 쓴 글은 access denied로 안 읽어지고, guset가 쓴 글의 내용은 hi~이다.검색창에 여러 가지 입력해보니, h, i, hi라고 검색했을 때는 guest글이 검색이 된다.제목이나 내용을 검색하는 듯 하다.제목을 검색하는가 싶어 readme를 검색하니 아무것도 안 나온다. 내용을 검색하는 것 같다.admin이 쓴 글의 내용을 읽어내면 클리어인듯 k를 검색하면 admin이 쓴 글만을 읽어온다. 내용에 k가 있는 것 같다. 예상되는 쿼리는select * from table where contents like '%%' like절에 %가 양 끝에 붙은 것으로 추정 가능한 이유는i를 검색했을 때 guest가 쓴 글의 내용인 hi~를 검색하기 때문이다. 언더바(_)로 글자 수를 추..

53번

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

pythonchallenge.com 2탄

주어진 문장을 아래와 같이 각각 치환해주면 된다. K -> M O -> Q E -> G g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj. strings = "g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm..

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회의 쿼리만..