南邮CTF部分篇章WP
起名字真難
<?php function noother_says_correct($number) {$one = ord('1');$nine = ord('9');for ($i = 0; $i < strlen($number); $i++){ $digit = ord($number{$i});if ( ($digit >= $one) && ($digit <= $nine) ){return false;}}return $number == '54975581388'; } $flag='*******'; if(noother_says_correct($_GET['key']))echo $flag; else echo 'access denied'; ?>這里要求參數是54975581388,但是前面分for循環又過濾了1~9,所以這里可以將54975581388轉化為16進制進行繞過,只要轉后不含1 ~9的數即可,因為php是可以不同進制數之間比較的。而且因為這里是弱類型,所以必須以數字進行轉換,以字符串進行轉換時不正確的。
54975581388=0xccccccccc
SQL Injection
源碼
#GOAL: login as admin,then get the flag; error_reporting(0); require 'db.inc.php';function clean($str){if(get_magic_quotes_gpc()){$str=stripslashes($str);}return htmlentities($str, ENT_QUOTES); }$username = @clean((string)$_GET['username']); $password = @clean((string)$_GET['password']);$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';'; $result=mysql_query($query); if(!$result || mysql_num_rows($result) < 1){die('Invalid password!'); }echo $flag;這里的stripslashes會去除自動加的轉義符,htmlentities($str, ENT_QUOTES)會對字符串的單雙引號轉為html實體,就是如"<script>alert('123')</script>"變為<script>alert('123')</script>gt,所以這里肯定不能將將username用’來閉合,然后將后面的注釋掉。
因為原SQL語句是SELECT * FROM users WHERE name='' AND pass='';只要我們將username后面的單引號不讓他包裹起來,那username前面的個單引號就會和pass的前一個單引號合起來作為name的值,然后后面pass傳參為 or 1 = 1,使SQL語句的執行結果為永真,就行的通了。
傳入?username=admin\$password=or 1 = 1--+
SQL語句成為了
\'只是字符串中的一個單引號
由此得到flag。
密碼重置2
要求登錄,隨便輸入什么進去看,發現通過get方式傳參,用burp suite抓包看看是不是post有東西,但是都沒有用。判斷SQL注入是不可能的了。
這里看的別人的WR,感覺比較新穎。
vim的特性,自動備份:
一、vim備份文件
默認情況下使用Vim編程,在修改文件后系統會自動生成一個帶~的備份文件,某些情況下可以對其下載進行查看; eg:index.php普遍意義上的首頁,輸入域名不一定會顯示。 它的備份文件則為index.php~
二、vim臨時文件
vim中的swp即swap文件,在編輯文件時產生,它是隱藏文件,如果原文件名是submit,則它的臨時文件
.submit.swp。如果文件正常退出,則此文件自動刪除。
從html源碼中看到跳轉到的是submit.php,因此這里會有臨時文件.submit.php.swp,打開看得到源碼
........榪欎竴琛屾槸鐪佺暐鐨勪唬鐮�......../* 濡傛灉鐧誨綍閭鍦板潃涓嶆槸綆$悊鍛樺垯 die() 鏁版嵁搴撶粨鏋�-- -- 琛ㄧ殑緇撴瀯 `user` --CREATE TABLE IF NOT EXISTS `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(255) NOT NULL,`email` varchar(255) NOT NULL,`token` int(255) NOT NULL DEFAULT '0',PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;-- -- 杞瓨琛ㄤ腑鐨勬暟鎹� `user` --INSERT INTO `user` (`id`, `username`, `email`, `token`) VALUES (1, '****涓嶅彲瑙�***', '***涓嶅彲瑙�***', 0); */........榪欎竴琛屾槸鐪佺暐鐨勪唬鐮�........if(!empty($token)&&!empty($emailAddress)){if(strlen($token)!=10) die('fail');if($token!='0') die('fail');$sql = "SELECT count(*) as num from `user` where token='$token' AND email='$emailAddress'";$r = mysql_query($sql) or die('db error');$r = mysql_fetch_assoc($r);$r = $r['num'];if($r>0){echo $flag;}else{echo "澶辮觸浜嗗憖";} }里面有中文亂碼,但是讀php代碼還是可以知道token=0000000000
然后從index.php的html文件中得到<meta name="admin" content="admin@nuptzj.cn" />郵箱為admin@nuptzj.cn,將結果輸入進去即可。
總結
以上是生活随笔為你收集整理的南邮CTF部分篇章WP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【狂神说Java】Double/Zook
- 下一篇: 人脸识别:FaceNet论文详解