php知识点总结(从一道CTF题目谈PHP中的命令执行)
php知识点总结(从一道CTF题目谈PHP中的命令执行)
2024-11-22 11:02:16  作者:伱爹临死前  网址:https://m.xinb2b.cn/know/bwq162065.html

原创 Xenny 合天智汇

快睡的时候,打开B站发现有位用户留言,大意就是让我帮忙看一道题,正好当时有空,于是就打开了他发的链接,代码如下


很明显是一道PHP代码审计的题目,而且只需要绕过第三行的if即可进行任意命令执行。

解决思路

看了代码之后觉得是道普通的题目,对于/a-zA-Z/这个正则表达式,我们可以利用PHP动态函数的特性,构造出字符串即可。

对于想要的字符串,我们可以通过以下三种方式来构造:

1. 异或

对于PHP中的字符串,两个字符串异或的结果是将两个字符串逐位异或,返回一个新字符串。那么我们便可以使用此特性进行构造。

例如我们需要构造phpinfo,则可以用脚本得到('0302181', '@[@[_^^')这两个字符串,脚本如下:


其中valid是可用的字符,answer是我们需要构造的字符串。那么我们得到了这个字符串,又该如何去执行呢。我们可以通过一个变量存储两字符串异或后的值,再让这个变量进行动态函数执行即可,而变量的话因为PHP的变量命名规则和C语言相同,可以使用下划线进行命名,如下:


2. 取反构造

和第一种类似,都是基于PHP字符串位运算的特点(会逐位进行位运算)。而取反构造某些情况比异或构造要方便,因为异或的情况某些字符是无法直接通过其他字符进行异或构造的,而取反却可以利用汉字或者其他特殊字符进行构造(不会有题目会限制某个汉字吧)。比如字母s我们可以通过~('和'{2})得到。而这个时候如果要用异或去构造的话,你得找到两个异或值为s的特殊字符。

取反构造的脚本和异或构造类似,在此不再给出。

3. 自增构造

` 'a' == 'b'`

这个特点是利用了PHP是弱类型语言的特性,在对变量进行操作的时候,PHP会隐式的转换其变量类型,很多代码审计的题目也是利用了这一特性。

遇到障碍

有了上面的思路后,而且也成功执行了phpinfo(),下一步是不是就可以直接构造命令执行函数去进行读取文件,当时我也是这么想的,于是我构造了passthru(), system(), shell_exec(), exec()等函数,都受到了阻碍,没有回显,通过进一步的调试之后发现是禁用了这些函数(通过在函数后面加一个打印函数观察是否执行)。

在这里我停留了很久,试过打印$GLOBALS等都没有任何有用的信息。最后通过使用glob()函数进行目录扫描,发现了flag.php文件,以及file_get_contents()进行获取,最终的payload如下

?mess=$_="`0123"^"?`~``";${$_}[_](${$_}[__]);&_=assert&__=print_r(base64_encode(file_put_contents("flag.php")))


最后再将其界面就可以得到最终的flag了。在最终的payload中我没有去一个一个的构造字符串异或,因为那太长了,而是构造了一个$_POST[_]($_POST[__])的动态函数,这样就可以在其他参数位置直接写函数了。

深入分析

题目到这里就结束了,其实并没有多难,首先是通过特性去构造动态函数,然后发现了命令执行被禁用之后,能够知道使用其他函数去进行获取信息就行了。但是做完这道题后,不仅引发了我的思考,PHP中的命令执行就只有这些方式了吗,肯定不是。于是,我总结了几种新的命令执行技巧供大家参考。

1. 当打印函数被禁用时

如果没有了打印函数,意味着你无法看到回显,这时候即使命令执行成功了你也无法得到信息,这个时候你就得利用其他方式去获取回显了。

首先是网上很多blog使用的方式,phpinfo如果发现开启了curl,或者其他文件传输扩展的的话,可以自建一个靶机,将所有访问信息存入数据库或是文件,然后将回显信息发送到你的靶机地址,这样你去看日志就可以了,这种方式不是很方便而且有一定的局限性。这里我要介绍的是一种新的方式。

如果你使用过Django或者jsp开发web的话,你肯定知道输出一个变量可以使用{{xxx}}或是<%=xxx%>的方式,那么在PHP中是否也有这种方式呢,答案是肯定的,PHP中的<?=xxx?>就可以将一个变量输出,那么如果使用它呢,你只需要构造如下的payload

valid = "1234567890!@$%^*(){}[];\'\",.<>/?-=_`~ "answer = "phpinfo"tmp1,tmp2 = '',''for c in answer: for i in valid: for j in valid: if (ord(i)^ord(j) == ord(c)): tmp1 = i tmp2 = j break else: continue breakprint(tmp1,tmp2)

这样就可以将变量$_里面的内容打印到屏幕上,而且关键的是这个输出方式默认是开启的,管理员很容易就忽视这个选项。所以在做题时不妨一试。

2. 其他的命令执行方式

当system,passthru等不能用时,网上会告诉你可以使用popen,proc_open这些管道命令去进行执行命令,当然这没有问题,而这里我向你介绍一种新方式,使用反引号,在PHP中,被两个反引号括起来的内容将会作为shell命令执行,并将输出信息返回,所以你可以构造下面的payload进行命令执行

$_=`ls`;

3. 不能使用数字字母的命令执行

当不能使用字母数字时,当然你可以使用上述的方式构造字符串进行执行,但是这里提供一些新东西,对于linux中的shell是支持正则表达式的,当你忘记某些字符时可以通过? % *来代替,经过测试,这里的匹配方式也是按照顺序进行匹配,所以你可以查看你的linux中/bin目录下面的顺序,来获取一些可以使用的命令,比如

/???/??? => /bin/cat

那么这样的话,如果要获取/var/www/html/index.php(你得感谢apache默认目录如此之深),则可以直接使用

/???/??? /???/???/????/?????.???

来获取

总结

这篇文章只是针对这道题而延展出的一些东西,在真正做题时,情况可能更加复杂,例如限制长度,限制参数等等情况,而我们的做法也不可能千篇一律,可能某些时候我们甚至会用到一些CVE漏洞。而本篇文章只是告诉读者一些可能以前没有见过的新东西。

那么本篇文章就到此结束了。

如果想更多系统的学习CTF,可点击“http://www.hetianlab.com/pages/CTFLaboratory.jsp”,进入CTF实验室学习,里面涵盖了6个题目类型系统的学习路径和实操环境。


声明:笔者初衷用于分享与普及网络知识,若读者因此作出任何危害网络安全行为后果自负,与合天智汇及原作者无关!

  • it企业框架(IT社区CSDN总部落户长沙)
  • 2024-11-23IT社区CSDN总部落户长沙自2000年开始正式运行、拥有3000万名注册用户的专业IT社区CSDN5月9日宣布,总部将落户湖南长沙CSDN供图中新网北京5月9日电(记者张素)自2000年开始正式运行、迄今已拥有3000万名注册。
  • 小众包哪款最好(买包别只知道小CK)
  • 2024-11-23买包别只知道小CK期待着、盼望着,盛夏即将来临了!随着天气的越来越炎热,走在街上明显感觉大家穿的也越来越简单清凉了季节交替之间,总是不知道要穿些什么如果是我,就会干脆走极简风白T牛仔裤,这种随时套上就走的,真的很适合上。
  • 高唐哪里有锦鲤 山东高唐锦鲤跃龙门
  • 2024-11-23高唐哪里有锦鲤 山东高唐锦鲤跃龙门“各位老铁注意了,收到订单的请回一声重庆的王先生和吉林的林先生特别注意,您的订单已经发出,请注意查收,透露一个新消息,明年我合作社产品将参加国际贸易会,主要进军东南亚市场……”1月18日,在山东省高唐。
  • 杜江霍思燕对儿子性别教育(杜江霍思燕二胎女儿疑为代孕)
  • 2024-11-23杜江霍思燕二胎女儿疑为代孕因为郑爽与张恒的隐私生活被爆,"代孕"话题在互联网平台上闹得沸沸扬扬而有网友通过蛛丝马迹发现,杜江与霍思燕夫妇两人似乎有通过代孕生下二胎女儿的嫌疑?对此,不少网友立刻跑到他们的社交账号。
  • 写人面桃花的诗句(经典诗词背后的那有一段凄美的故事)
  • 2024-11-23经典诗词背后的那有一段凄美的故事去年今日此门中,人面桃花相映红人面不知何处去?桃花依旧笑春风--《题都城南庄》崔护崔护,字殷功,博陵人贞元十二年登第终岭南节度使其诗诗风精练婉丽,语极清新诗六首,皆是佳作,尤以《题都城南庄》流传最广,。
  • 宝宝感冒好了几天才可以洗澡(宝宝感冒了还能洗澡吗)
  • 2024-11-23宝宝感冒了还能洗澡吗我家孩子2岁多了,基本天天洗澡最近天气变化大,孩子感冒了,孩子奶奶说小孩子生病的时候都不能洗澡,有科学依据吗?小孩无论是患有感冒等呼吸道疾病还是皮肤疾病等,洗澡都具有良好的辅助治疗效果有时候给发烧的孩。
  • 广东潮州人才引进(潮州人社2022民生答卷⑤)
  • 2024-11-23潮州人社2022民生答卷⑤千秋基业,人才为本2022年,潮州人社局坚持人才驱动,做强人才“引、育、留、用”这四篇文章,积极引才育才,并努力建好一站式人才服务平台,完善人才评价机制,为推动潮州高质量发展提供更加坚强有力的人力资源。
  • 冰糯种与糯种的区别(凭借一己之力拉高了整个糯种界的天花板)
  • 2024-11-23凭借一己之力拉高了整个糯种界的天花板大家好,我是轩哥糯种翡翠在大众的印象中,似乎一直都是中档翡翠殊不知,常说的糯种翡翠是一个大分类,价值也是有高有低大众对糯种翡翠的理解,普遍停留在其质地如同糯米汤般这种具象化的表达,是翡翠行内人为了大家。
  • 深圳暴雨施工人员遇难(深圳暴雨挡土墙垮塌)
  • 2024-11-23深圳暴雨挡土墙垮塌南都·深圳大件事讯记者邱墨山陈紫嫣颜鹏根据深圳市南山区官方消息,强降雨导致一工业区挡土墙垮塌,埋困两人已找到,均无生命体征深圳市南山区应急管理局通报:2019年4月20日14时,西丽街道同乐路乐峰壮大。
  • 女儿会越长越像妈妈吗(女儿会不会变成)
  • 2024-11-23女儿会不会变成文|文儿现在大龄未婚青年的数量居高不下,尤其是“剩女”的人数更是每年剧增,这可愁坏了不少父母每到过年的时候,七大姑八大姨更是关心,介绍对象安排相亲,比自己的事情还要上心效果却并不显著,大龄未婚女青年的。
  • 莱州红犬为什么不好养(原来莱州红犬这么可怕)
  • 2024-11-23原来莱州红犬这么可怕莱州红犬,是我们本土的一种狗狗,不少人说它长得很威猛、帅气,但是现实中,我们却很少看见有人养这种狗,这是为什么呢?主要是下面这几点太吓人!1.样子长得太凶,容易吓到人莱州红犬肌肉发达,身材修长、强健,。