南邮ctf web部分(下)
上一部分:https://www.cnblogs.com/truthilia-12580/p/12513018.html
21.SQL注入1
http://chinalover.sinaapp.com/index.php
点source查看源码。
从数据库里面选择user和pw,然后与输入的user和pass对比,并且user要为admin才能echo flag。
这里可以把查询语句截断,不选择pw,后面对比的时候就不用与pass对比。
在用户名后面加上’) #
则查询语句变为select user from ctf where (user=’admin’) #’) and (pw=’*****’)
#后面的语句被注释,不生效。
22.pass check
http://chinalover.sinaapp.com/web21/
strcmp函数在比较数组时会返回null。
post一个为数组的pass。
23.起名字真难
http://chinalover.sinaapp.com/web12/index.php
要以get形式传输一个key,key的内容要为54975581388但是又不能全为数字。
将54975581388转换为16进制再传输。
是把这个数字作为10进制数进行转换,不是作为字符串,拿字符串转了半天才发现这个问题。
0xccccccccc。
24.密码重置
http://nctf.nuptzj.cn/web13/index.php?user1=Y3RmdXNlcg==
注意到题目的链接里面有一个base64加密的内容。
解密发现是ctfuser。
尝试把这段base64编码改成admin的base64编码,重置,结果error了。
拿bp抓下包,发现除了链接之外,post的内容也包含user名。
把这里改成admin再send就可以获得flag了。
25.SQL Injection
f12查看源码,可以看到一段php代码。
1 <!-- 2 #GOAL: login as admin,then get the flag; 3 error_reporting(0); 4 require 'db.inc.php'; 5 6 function clean($str){ 7 if(get_magic_quotes_gpc()){ 8 $str=stripslashes($str); 9 } 10 return htmlentities($str, ENT_QUOTES); 11 } 12 13 $username = @clean((string)$_GET['username']); 14 $password = @clean((string)$_GET['password']); 15 16 $query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';'; 17 $result=mysql_query($query); 18 if(!$result || mysql_num_rows($result) < 1){ 19 die('Invalid password!'); 20 } 21 22 echo $flag; 23 -->
查询语句为SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';
select * from uses where name=\’$username\’and pass=\’$password\’
select * from uses where name=’$username’and pass=’$password’
在get_magic_quotes_gpc开启时,stripslashes会去掉字符串中的反斜杠。
htmlentities函数会编码双引号和单引号(参考链接)
说明我们无法使用单引号,查询语句无法闭合。
这样我们可以利用语句中的单引号来实现闭合。
使用反斜杠使username后的单引号被转义,再注释掉password后的引号,语句闭合,再让password等于一个永真语句,用or使整条语句永真,则达成条件。
payload:?username=\&password=or 1=1 %23
26.综合题
http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/index.php
一看就知道是jsfuck了,复制丢到浏览器控制台就完事了。
给了一个php,进去看看。
谜样的感觉,总之tip在头部,抓包看看吧。
提示是history of bash。
打开链接http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/.bash_history
打开,会下载一个文件,打开来就是flag。
27.SQL注入2
和上个注入题一样,先查看源码。
query里面存放了查询的结果,所以我们在查询结果中加上我们输入的密码的md5值就可以了,题目提示用联合查询,所以user为
‘ union select md5(123) #
pass也为123.
28.综合题2
打开来是一个留言板?
在留言部分点击预览,弹出一个提示。
好吧,那就不考虑xss了。
在网页底部有一个链接,点开来看看。
稍微整理一下:
config.php 存放数据库信息
index.php 主页文件
passencode.php 加密算法库
say.php 接受处理用户请求
sm.txt cms说明文档
admin表结构
id
username
userpass
在这里我们注意到链接是这样的:
http://cms.nuptzj.cn/about.php?file=sm.txt
可以通过这个查看别的文件。
passencode:
1 <?php function passencode($content) 2 { 3 //$pass=urlencode($content); 4 $array=str_split($content); $pass=""; 5 for($i=0;$i<count($array);$i++) 6 { 7 if($pass!="") 8 { $pass=$pass."".(string)ord($array[$i]); } 9 else 10 { $pass=(string)ord($array[$i]); } 11 } 12 return $pass; } 13 ?>
其他的似乎没有什么用。
在留言处寻找可用的信息。
在留言搜索处搜索,在链接中有so.php
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>搜索留言</title> </head> <body> <center> <div id="say" name="say" align="left" style="width:1024px"> 2 <?php 3 if($_SERVER['HTTP_USER_AGENT']!="Xlcteam Browser") 4 { echo '万恶滴黑阔,本功能只有用本公司开发的浏览器才可以用喔~'; 5 exit(); } 6 $id=$_POST['soid']; 7 include 'config.php'; 8 include 'antiinject.php'; 9 include 'antixss.php'; 10 $id=antiinject($id); 11 $con = mysql_connect($db_address,$db_user,$db_pass) or die("不能连接到数据库!!".mysql_error()); 12 mysql_select_db($db_name,$con); 13 $id=mysql_real_escape_string($id); 14 $result=mysql_query("SELECT * FROM `message` WHERE display=1 AND id=$id"); $rs=mysql_fetch_array($result); 15 echo htmlspecialchars($rs['nice']).':<br /> '.antixss($rs['say']).'<br />'; mysql_free_result($result); mysql_free_result($file); mysql_close($con); ?> 16 </div> 17 </center> 18 </body> 19 </html>
其中可以看到antiinject.php和antixss.php
antiinject.php
1 <?php function antiinject($content) 2 { $keyword=array("select","union","and","from",'',"'",";",'"',"char","or","count","master","name","pass","admin","+","-","order","="); $info=strtolower($content); 3 for($i=0;$i<=count($keyword);$i++) 4 { $info=str_replace($keyword[$i], '',$info); } 5 return $info; } 6 ?>
最后是about.php
1 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 2 <?php 3 $file=$_GET['file']; 4 if($file=="" || strstr($file,'config.php')) 5 { echo "file参数不能为空!"; exit(); } 6 else{ $cut=strchr($file,"loginxlcteam"); 7 if($cut==false) 8 { $data=file_get_contents($file); $date=htmlspecialchars($data); echo $date; } 9 else 10 { echo "<script>alert('敏感目录,禁止查看!但是。。。')</script>"; } }
可以看到loginxlcteam。
看来是通过sql注入来获得admin的密码来登陆。
在搜索处注入。
首先要将user-agent改为Xlcteam Browser。
然后绕过antiinject,用双写绕过和/**/代表空格。
102 117 99 107 114 117 110 116 117
fuckruntu
去后台登陆。
查看小马的源码。
后面不大会做了,看了大佬的wp。
更改网站编码。
用先前的办法看flag。
29.密码重置2
http://nctf.nuptzj.cn/web14/index.php
查看源码。
获得邮箱。
查看备份文件。
打开.index.php.swp,啥都没有。
再看一边源码,看到了submit.php。
打开.submit.php.swp看看。
1 2 ........这一行是省略的代码........ 3 4 /* 5 如果登录邮箱地址不是管理员则 die() 6 数据库结构 7 8 -- 9 -- 表的结构 `user` 10 -- 11 12 CREATE TABLE IF NOT EXISTS `user` ( 13 `id` int(11) NOT NULL AUTO_INCREMENT, 14 `username` varchar(255) NOT NULL, 15 `email` varchar(255) NOT NULL, 16 `token` int(255) NOT NULL DEFAULT '0', 17 PRIMARY KEY (`id`) 18 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; 19 20 -- 21 -- 转存表中的数据 `user` 22 -- 23 24 INSERT INTO `user` (`id`, `username`, `email`, `token`) VALUES 25 (1, '****不可见***', '***不可见***', 0); 26 */ 27 28 29 ........这一行是省略的代码........ 30 31 if(!empty($token)&&!empty($emailAddress)){ 32 if(strlen($token)!=10) die('fail'); 33 if($token!='0') die('fail'); 34 $sql = "SELECT count(*) as num from `user` where token='$token' AND email='$emailAddress'"; 35 $r = mysql_query($sql) or die('db error'); 36 $r = mysql_fetch_assoc($r); 37 $r = $r['num']; 38 if($r>0){ 39 echo $flag; 40 }else{ 41 echo "失败了呀"; 42 } 43 } 44 45
token的长度为10,且token等于0.
那么让token为0000000000.
提交,获得flag。
看到大佬的wp说0e00000000也行。
30.file_get_content
http://chinalover.sinaapp.com/web23/
打开啥都没有?
看看源码。
<!--$file = $_GET['file'];
if(@file_get_contents($file) == "meizijiu"){
echo $nctf;
}—>
看来要用到php伪协议。
?file=php://input
再post meizijiu
31.变量覆盖
http://chinalover.sinaapp.com/web24/
网页里面啥都没有,看看源码。
1 <!--foreach($_GET as $key => $value){ 2 $$key = $value; 3 } 4 if($name == "meizijiu233"){ 5 echo $flag; 6 }-->
foreach函数遍历数组,把键值存储到$key里面,再让$键值=value的值。
题目的要求是$name=“meizijiu233”
用get传值name=meizijiu233就可以了。
32.注意!!
看题目啦。
33.HateIT
34.Anonymous
题目又不见了哒。
结束啦~给自己撒花*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。