WarGames-Natas(16)
来源:互联网 发布:linux更改用户权限 编辑:程序博客网 时间:2024/06/14 11:09
natas(16)
<?$key = "";if(array_key_exists("needle", $_REQUEST)) { $key = $_REQUEST["needle"];}if($key != "") { if(preg_match('/[;|&`\'"]/',$key)) { print "Input contains an illegal character!"; } else { passthru("grep -i \"$key\" dictionary.txt"); }}?>
PHP又是上次字符过滤的升级版,在grep的检索中添加了引号,封死了添加其他选项和参数的路
并且过滤了双引号,无法像sql注入那样更改代码
尝试使用CHAR()函数绕过过滤,不知道为什么没有转换成功
关键问题是引号内无法再添加选项和参数,不过PHP里的$
()即使在引号内也可以使用,这个就比较厉害了
在$
()内执行grep str /etc/natas_webpass/natas17,如果str踩中了,就会返回结果,没踩中则返回空值
然而我们还是无法看到$()返回的结果,只能用它影响外层的grep查询
这与上一关的爆破思路相同,想办法将内层的结果反应出来:
我们知道dictionary.txt中存在的字符串,比如说Doctor,用它与$
(grep)的返回值相加,如果内层返回了结果将检索出空值,如果返回空值则外层的grep会返回结果
eg:若password中首字母为a,构成
grep -I "$(grep ^a /etc/natas_webpass/natas17)Doctor" dictionary.txt
由于内部的$
()命令返回了a,则使外层命令变为
grep -I "aDoctor" dictionary.txt
由于dictionary中没有aDoctor,从而返回空值
而如果内层$
()命令返回空值,外层则能正确检索到Doctor,于是返回值,证明首字母不是a
按照这个原理可以构造出爆破脚本,在上一关的基础上稍加变动即可
The password is 8Ps3H0GWbn5rd9S7GmAdgQNdkhPkq9cw
阅读全文
0 0
- WarGames-Natas(16)
- 170817 WarGames-Natas(15)
- 170821 WarGames-Natas(26)
- 170816 WarGames-Natas(0-14)
- 170819 WarGames-Natas(17-20)
- 170820 WarGames-Natas(21-25)
- 170822 WarGames-Natas(27-28)
- 170813 WarGames-Bandit(16-24)
- WarGames-leviathan(0-7)
- 170823 WarGames-Narnia(0)
- 170828 WarGames-Narnia(3)
- 170829 WarGames-Narnia(4)
- 170830 WarGames-Narnia(5)
- 170831 WarGames-Narnia(6)
- 170901 WarGames-Narnia(7)
- 170902 WarGames-Narnia(8)
- 170903 WarGames-Behemoth(0)
- 170903 WarGames-Behemoth(1)
- springmvc4-hibernate二级缓存应用
- CountVectorizer和TfidfVectorizer注意的地方
- screen 命令
- HDU-2017"百度之星"程序设计大赛-复赛-1003-Pokémon GO
- 微信支付申请不了找黑河马解决
- WarGames-Natas(16)
- 基本线程机制
- 概率DP[NOIP2016D2T3换教室]
- 欢迎来到股市大金牛精英平台!
- win7安装centos7问题(U盘安装)
- Python 信用卡评分模型 自动分箱&逻辑回归&制作评分卡
- splay普通平衡树coedvs4543
- Ubuntu下FFmpeg编译
- 读书笔记(一) OCR字符识别-----Halcon机器视觉 应用手册