Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Tags
more
Archives
Today
Total
관리 메뉴

dohki

Codegate CTF 2016 Quals: Web 222 - Combination Pizza 본문

Hacking/CTF write up

Codegate CTF 2016 Quals: Web 222 - Combination Pizza

dohki 2016. 3. 14. 17:49

Description


Shake Shake!!









Write-up


대회가 끝나고 문제 서버를 바로 닫아 버려서 screenshot을 첨부할 수가 없다. 어차피 좋은 문제도 아니었으므로 대충 쓰겠다.


문제로 어떤 blog가 주어졌고 read.php?id=1 같은 형식으로 blog의 글을 볼 수 있었다. read.php?id=1aaa 같은 형식로도 똑같은 글을 읽을 수 있길래 바로 id의 type이 int이고 where id='{$input}' 같은 query를 쓰고 있다는 걸 알 수 있었다. 그래서 read.php?id=1' and true-- - 같은 형식으로 blind sql injection을 할 수 있다. filter도 하나도 없어서 그냥 script 돌려서 뽑았다. 어떤 사람의 write-up을 보니 그냥 sqlmap 썼던데 나도 그럴 걸 그랬다.


뽑은 결과를 보니 login이라는 table에 Admin/70e76a15da00e6301ade718cc9416f79 (md5('adminpw')) 라는 단 하나의 record가 존재했다. 이걸로는 login을 할 수 없었는데 왜내ㅑ하면 login.php에는 tokencode라는 것을 추가로 입력하는 칸이 있었기 때문이다. tokencode와 관련된 것이 db에는 없길래 login을 check하는 page에 hard coding 되어 있을 거라고 추측했다. blog라는 table에 file이라는 column이 있어서 record를 하나 보니 down.php?fn=poem.jpg라는 게 있었다. 그래서 down.php?fn=../login_ck.php로 source를 받아서 보니 


if(md5("blog".$token) == '0e689047178306969035064392896674')


을 통과하면 login을 할 수 있었다. php loose comparison에서 두 string을 비교할 때 둘 다 is_numeric이 true라면 숫자로써 비교를 한다. 그래서 0e[0-9]{30}인 md5를 만드는 token을 찾아서 넣으면 0==0이 되므로 통과를 할 수 있다. 그러한 token으로 '38663978'을 찾았고 login에 성공하였다. 바로 flag를 얻을 수 있었다.



Flag


jjambbong_WEBHACKING!!@!

Comments