笨笨网站建设专家,网站建设合同需注意什么,厦门网站建设公司排名,东莞全网推广点开靶场 发现源码、以及抓包啥都看不出来
用dirsearch扫描发现是git源码泄露#xff0c;用githack获取源码 查看源码发现最终目标要执行eval($_GET[exp])
要执行eval就要通过这些正则#xff0c;第一个正则匹配不分大小写的php伪协议之类的
重点是第二个正则
preg_repl…点开靶场 发现源码、以及抓包啥都看不出来
用dirsearch扫描发现是git源码泄露用githack获取源码 查看源码发现最终目标要执行eval($_GET[exp])
要执行eval就要通过这些正则第一个正则匹配不分大小写的php伪协议之类的
重点是第二个正则
preg_replace(/[a-z,_]\((?R)?\)/, NULL, $_GET[exp])
大概意思是传递的值是字符串a-z跟上()然后就会被替换为空(?R)?的意思是递归匹配。
递归完之判断是否只有;,成立则传进去的 exp 就会被 eval 执行。
举个例子:
a(b(c()));这样的就可以用反之a(b,c)带有参数的就不能使用。
所以要构造无参数的函数进行命令执行 无参数任意文件读取查看当前目录的文件名 ?expprint_r(scandir(pos(localeconv())));
scandir(.);可以用来查看当前目录所有文件名 问题是不能有参数所以就要想办法来构造这个. ocaleconv()返回一包含本地数字及货币格式信息的数组。而数组第一项就是.
pos()别名current()返回数组中的单元默认取第一个值;所以pos(localeconv())就会返回数组的第一项且这个第一项刚好就是我们需要的. chr(46)也就是字符.
所以也可以构造46chr(current(localtime(time()))): 第一个值每秒1最多60秒可以得到46
hebrevcl(crypt(arg))可以随机生成一个hash值。第一个大概率是$,小概率是.
print_r(scandir(chr(ord(hebrevc(crypt(time()))))));多刷新几次一定也能出 最后查看到flag在倒数第二个 再就是如何去读倒数第二个文件
array_reverse() 以相反的元素顺序返回数组反过来之后flag就在第二个位置了。
next()j将数组中的指针向前移动一位那么加上next指针就会指向flag了
再利用show_source()把flag读出来
?expshow_source(next(array_reverse(scandir(current(localeconv())))));